【发布时间】:2016-02-23 13:39:25
【问题描述】:
我正在使用 Android 上的 ServerSocket 作为服务器部分。我不明白它的行为方式。这是我测试的:
A1。在 Android 上实例化一个 ServerSocket
A2。 ServerSocket 向客户端发送“hello”
A3。客户端可以读取“hello”并回复ServerSocket
A4。 Android 上的 ServerSocket 接收客户端的答复
=> 效果很好
现在我希望客户端是第一个向 ServerSocket 发送消息的:
B1。在 Android 上实例化一个 ServerSocket
B2。客户端向ServerSocket发送数据
B3。 ServerSocket 从客户端接收数据
B4。无法回复客户
这可能是正常行为吗?
谢谢
这里是源代码
public void startServer()
{
log("startServer");
UUID uuid = UUID.randomUUID();
final String sessionId = uuid.toString().replace("-", "");
log("Session ID = " + sessionId);
Thread t = new Thread(new Runnable() {
@Override
public void run() {
while (stopServer == false) {
ServerSocket serverSocket = null;
try {
serverSocket = new ServerSocket(7777);
final Socket socket = serverSocket.accept();
InputStream inputStream = socket.getInputStream();
String strFromClient = "";
int i = 0;
while (i != -1) {
try {
i = inputStream.read();
if (i != -1)
strFromClient += (char) i;
}catch (Exception e){
break;
}
}
inputStream.close();
OutputStream outputStream = socket.getOutputStream();
String strToClient = "test";
byte[] cArray = strToClient.getBytes();
outputStream.write(cArray);
outputStream.flush();
outputStream.close();
socket.close();
serverSocket.close();
log("end server");
} catch (Exception e) {
//log(e.toString());
}
}
}
});
t.start();
}
【问题讨论】:
-
客户端是 C# 中的 NetworkStream,这可能是问题所在(在调试模式下,ServerSockets 可以很好地发送数据)?
-
那可能是什么问题?
-
我认为SocketServer一定是第一个发起通信的。
-
你为什么这么认为?你的客户端代码在哪里?