我知道这可能是一个很普遍的问题,但我一直没有找到如何解决它的明确答案。
首先,假设我们有一个接受查询的Java服务器,例如(我只列出了相关行,并为清晰起见省略了异常处理):
ServerSocket socket = new ServerSocket(port);
while (true) {
ClientWorker w;
w = new ClientWorker(socket.accept());
Thread t = new Thread(w);
t.start();
}
然后在ClientWorker中
BufferedReader inFromClient = new BufferedReader(new InputStreamReader(client.getInputStream()));
DataOutputStream outToClient = new DataOutputStream(client.getOutputStream());
String query = inFromClient.readLine();
// process query here
String response = "testresponse";
outToClient.writeBytes(response + "\n");
outToClient.close();
inFromClient.close();
client.close();
现在我可以获取一个能够与此服务器配合工作的Java客户端:
String query = "testquery";
Socket queryProcessorSocket = new Socket(queryIp,queryPort);
DataOutputStream queryProcessorDos = new DataOutputStream(queryProcessorSocket.getOutputStream());
BufferedReader queryProcessorReader = new BufferedReader(new InputStreamReader(queryProcessorSocket.getInputStream()));
queryProcessorDos.writeBytes(query + "\n");
String response = queryProcessorReader.readLine();
但是如何让C ++客户端做到与Java客户端相同的事情呢?我尝试了很多方法,但似乎没有什么作用。最理想的情况是我不想接触Java服务器,这可行吗?如果有人能指向一个好的例子或一些示例代码,那将不胜感激。我搜索了很多网站,但都没有结果。
writen()
和readn()
的代码,或者提到它们来自哪里(UNIX网络编程,如果我没记错的话)。 - D.Shawley