1
嗨,我有一个服务器套接字,它侦听来自客户端套接字的请求,而我的代码似乎没有从其输入流中从客户端套接字发送的数据中检索数据。下面Java Socket服务器没有从客户端套接字接收数据
是服务器套接字代码监听连接和处理请求
public void startlistener() {
serverSocket = new ServerSocket(PORT);
listening = true;
thread.start();
Log.print(TAG, "startlistener");
}
public void stopListener() {
thread.stop();
listening = false;
Log.print(TAG, "stopListener");
}
public void run() {
while (listening) {
try {
Log.d(TAG, "inside server listener loop");
Socket accept = serverSocket.accept();
String data = getData(accept);
httpHandler.handleRequest(data, accept);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private String getData(Socket socket) throws IOException {
InputStream in = socket.getInputStream();
Log.print(TAG, "getData");
int c = 0;
StringBuffer buffer = new StringBuffer();
//goes as far as here and then freezes/doesnt retrieve anything from the input stream
while ((c = in.read()) != -1) {
buffer.append((char) c);
}
return buffer.toString();
}
这里是我的测试用例
private static final String HTTP_REQUEST = "HTTP/1.0 408 Request Time-out"
+ newLine + "Cache-Control: no-cache" + newLine
+ "Connection: close" + newLine + "Content-Type: text/html";
public void testSocketConnection() {
try {
httpProxy = new HttpProxy(testHttpHandler);
httpProxy.startlistener();
testSocket = new Socket("localhost", HttpProxy.PORT);
OutputStream outputStream = testSocket.getOutputStream();
InputStream inputStream = testSocket.getInputStream();
outputStream.write(HTTP_REQUEST.getBytes());
} catch (UnknownHostException e) {
httpProxy.stopListener();
e.printStackTrace();
fail(e.toString());
} catch (IOException e) {
httpProxy.stopListener();
e.printStackTrace();
fail(e.toString());
}
}
ok,只要我在客户端调用socket.write()。我应该在适当的时候关闭套接字? – jonney
每当你想让接收环路停止。或者,更改接收循环。查看DataOutputStream和DataInputStream的方法,如果您想知道如何在保持套接字打开的情况下发送数据。或者,使用对象序列化,XML等。 – EJP