我有一个Android应用程序,它将创建 ServerSocket 并接受套接字。 我希望它可以与远程设备进行通信(读/写)。
我的示例代码如下:
mListenSocket = new ServerSocket();
mListenSocket.setReuseAddress(true);
mListenSocket.bind(new InetSocketAddress(DOCK_PORT));
mSocket = mListenSocket.accept();
Thread {
loop {
outputStream = mSyncSocket.getOutputStream();
inputStream = mSyncSocket.getInputStream();
...
inputStream.read(data)
outputStream.write(data);
...
}
}
它可以从客户端读取正确的inputStream数据,但是在outputStream的第一次写入数据之后,read()第二次总是返回-1。
我不知道这个问题。 有人可以给我一些提示吗?非常感谢。
=============================================== =======================
我想我需要更清楚地表达我的问题。
有两个设备(A,B),其工作流程如下:
类型1任务:
1.向B
发送命令
2. B收到命令和回复消息给A
3.收到消息,完成。
类型2任务:
1.向B发送命令,完成。
上述任务是异步的。
我的旧方法是分别在A和B设备上创建一个ServerSocket来处理A-> B和B-> A通信。
我想也许一个套接字可以解决上面的任务,但是一个套接字会遇到读-1问题。
有人可以给我更多建议吗?非常感谢。
答案 0 :(得分:0)
read()
返回-1,因为对等方已关闭连接。您应该这样做,并停止阅读,并完全停止处理连接。它已经完成了。
答案 1 :(得分:-1)
我使用这样的东西:
final DataOutputStream dos = new DataOutputStream(s.getOutputStream());
final BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream(), "UTF-8"));
// Send the login data.
final JSONObject login = new JSONObject();
// Send the login message.
dos.write((login.toString() + "\r\n").getBytes());
// Wait until we receive something from the server.
String receivedMessage;
while ((receivedMessage = in.readLine()) != null) {
Log.i(TAG, "Received data: " + receivedMessage);
processMessagesFromServer(dos, receivedMessage);
}
我使用普通套接字而不是ServerSocket
。
有关详细信息,请查看此thread。