我创建了一个服务,它正在启动服务器和一个线程 OnStart,并正在关闭服务器 OnStop。
我的代码与我通过此端口连接的 1 个设备运行良好。我要连接的第二台设备没有来自服务器的响应。
我有点初学者,所以,有人可以看看我的代码并告诉我出了什么问题,为什么不与多个客户合作?还是多线程?
对不起我的英语……我在学校没学过 :)
这是代码:
int i;
TcpListener server = new TcpListener(IPAddress.Any, 9101);
NetworkStream stream;
TcpClient client;
byte[] datalength = new byte[4];
公共无效 ServerReadSend() {
stream = client.GetStream();
new Thread(() =>
{
while ((i = stream.Read(datalength, 0, 1)) != 0)
{
byte[] data = new byte[BitConverter.ToInt32(datalength, 0)];
stream.Read(data, 0, data.Length);
d = Encoding.Default.GetString(data);
d = d.Replace("\0", "");
d = d.Replace("\n", "");
SOME CODE HERE
ServerSend(SOME STRING HERE);
}
}).Start();
}
public void ServerSend(string msg)
{
stream = client.GetStream();
byte[] data;
data = Encoding.Default.GetBytes(msg);
int length = data.Length;
byte[] datalength = new byte[4];
datalength = BitConverter.GetBytes(length);
stream.Write(datalength, 0, 1);
stream.Write(data, 0, data.Length);
}
protected override void OnStart(string[] args)
{
server.Start();
new Thread(() =>
{
client = server.AcceptTcpClient();
if (client.Connected)
{
ServerReadSend();
}
}).Start();
}
protected override void OnStop()
{
server.Stop();
server = null;
}
我通过端口 9101 连接的设备是扫描仪,它们正在从数据库中读取一些信息。从数据库返回的信息由服务器发送回客户端。并且在 1 台设备上运行良好。因此,这仅在扫描时进行。服务器发送信息后,我们可以关闭连接并添加新连接吗?