我正在玩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();
}
答案 0 :(得分:0)
好的,我找到了解决方案!错误是因为C#客户端没有发送“-1”值(这只是在关闭流或类似的东西后触发)。
解决方案在Android端,现在从客户端读取数据如下:
InputStream inputStream = socket.getInputStream();
String strFromClient = "";
int available = inputStream.available();
Log.d("intelsms", "available from client:" + available);
for (int i=0;i<available;i++){
int c = inputStream.read();
strFromClient+=(char)c;
}
我使用“available()”方法来了解可从客户端读取的字节数。
OUF!