的协议是重要的在这里。您可以设计一个文本协议,如示例中的KnockKnockProtocol。 e.g:
client: LIST
server: FILES foo.txt bar.txt
client: DETAILS bar.txt
server: DETAILS bar.txt 123421 0644 myuser mygroup
client: GET bar.txt
server: FILEDATA bar.txt <base64-encoded content or such>
client: QUIT
但已经有很多的周围,设计良好的协议是很难而且很容易编写解析器等的错误这通常不值得。
但是...你使用Java客户端和服务器和Java可以序列化对象,这样就可以通过网络流发送整个对象。这样你就不必担心解析问题。
通过ObjectInputStream刚才看了网络套接字,并通过ObjectOutputStream写。这样您就可以拥有对协议的请求和响应进行建模的类。
public interface Request implements Serializable {
}
public class ListFilesRequest implements Request {
}
public class FileDetailsRequest implements Request {
public String fileName;
}
public class DownloadFileRequest implements Request {
public String fileName;
}
public interface Response implements Serializable {
}
public class FileListResponse implements Response {
public String[] fileNames;
}
public class FileDetailsResponse implements Response {
public String fileName;
public int fileSize;
public int fileMode;
}
public class FileDataResponse implements Response {
public String fileName;
public byte[] fileData;
}
然后服务器可以这样做:
ObjectInputStream objInput = new ObjectInputStream(mySocket.getInputStream());
ObjectOutputStream objOutput = new ObjectOutputStream(mySocket.getOutputStream());
Object requestObject = objInput.readObject();
Response responseObject = null;
if (requestObject instanceOf ListFilesRequest) {
FileListResponse response = new FileListResponse();
response.fileNames = new String[] { "foo.txt", "bar.txt" };
responseObject = response;
}
else if (requestObject instanceOf FileDetailsRequest) {
FileDetailsRequest request = (FileDetailsRequest)requestObject;
String fileName = request.fileName;
...
}
objOutput.writeObject(responseObject);
...或者是这样的。
来源
2011-03-09 21:25:32
jkj
我们不打算为您编写代码。开始攻击它,并问我们是否有实现你想法的具体问题。 – 2011-03-09 20:47:50
我指定我不希望任何人写我的代码,并要求我在哪里可以看看示例和函数,以便我可以在哪里学习如何自己完成这件事。如果你不会有所帮助的话,那么你至少不会居高临下。 – 2011-03-09 20:49:54
欢迎来到StackOverflow,@FattyBolger!马特是对的,你没有问过一个具体的问题。这听起来像你有一个你想要你的程序做什么的想法,所以试试看。当你碰到一些你无法想象的东西时,回过头来,发布一些代码,然后问一个可以客观回答的问题。如果你正在寻找更多的开放式编程讨论,那么你可以看看[程序员.stackexchange.com](http://programmers.stackexchange.com)。 – 2011-03-09 20:56:21