我正在尝试学习网络编程,而我正在尝试创建TCP服务器和TCP客户端。
服务器将启动并侦听连接。客户端将连接并将字符串发送到服务器。 然后服务器将使用包含接收到的字符串的字符串进行回复。
我面临的问题是,第一次尝试这是有效的,但在此之后,客户端有时会收到一个空的回复。
以下是服务器的代码:
package com.androiddepends;
import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import android.util.Log;
public class HelloWorld extends ReactContextBaseJavaModule {
public HelloWorld(ReactApplicationContext reactContext) {
super(reactContext);
}
@Override
public String getName() {
return "HelloWorld";
}
@ReactMethod
public void openWifiSettings() {
Intent intent = new Intent(Intent.ACTION_WIFI_SETTINGS);
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(intent);
}
}
}
客户的代码:
public void handlerThread()
{
TcpClient TcpClient = clients[clients.Count - 1];
NetworkStream networkStream = TcpClient.GetStream();
int i = -1;
while (TcpClient.Connected )
{
Byte[] data = new Byte[1024];
if ((i=networkStream.Read(data, 0, data.Length)) != 0)
{
string incomingMessage = Encoding.ASCII.GetString(data);
Debug.WriteLine("DDB Server incomingMessage: " + incomingMessage);
this.Invoke((MethodInvoker)(() => lbMessage.Items.Add("Message received is: " + incomingMessage)));
// Send back a response.
data = new Byte[1024];
string outMessage = string.Empty;
outMessage = "Recieved msg: " + incomingMessage;
data = System.Text.Encoding.ASCII.GetBytes(outMessage);
networkStream.Write(data, 0, data.Length);
Debug.WriteLine("DDB Server Reply: " + outMessage);
this.Invoke((MethodInvoker)(() => lblStatus.Text = "Sent reply!"));
}
}
}
我在使用Debug.WriteLine()时注意到了第一次运行正确显示的消息。之后,消息彼此相邻(就好像我使用的是Debug.Write())。 可能是消息的字节表示被破坏了(例如返回字符或其他东西)?