c# TCP同步多客户端的程序,在tcplistener开始监听后,怎么启动接受客户端发送的数据的方法?
特别是多客户端连接的情况下,我看其它人的代码,多是用线程启动接收数据的方法,然后在接收方法里中无限循环,取得连接SOCKET,再用NETWORKSTREAM接收数据。wh...
特别是多客户端连接的情况下,
我看其它人的代码,多是用线程启动接收数据的方法,然后在接收方法里中无限循环,取得连接SOCKET,再用NETWORKSTREAM接收数据。
while(true)
{
mysocket-.....
myworkstream-....
....
}
我搞不懂这个方法是怎么识别不同客户端连接的。难道那个WHILE循环每次取得的连接自动会对应已有连接还没进行接收的吗
另没底气的问下,网络编程有没有这种事件,就是服务器和客户端在连接后,一旦系统监测到有数据发来就自动触发的事件,就像鼠标一点按钮,就有按钮被点击的事件一样,如果有的话,那处理接收数据多容易啊。 展开
我看其它人的代码,多是用线程启动接收数据的方法,然后在接收方法里中无限循环,取得连接SOCKET,再用NETWORKSTREAM接收数据。
while(true)
{
mysocket-.....
myworkstream-....
....
}
我搞不懂这个方法是怎么识别不同客户端连接的。难道那个WHILE循环每次取得的连接自动会对应已有连接还没进行接收的吗
另没底气的问下,网络编程有没有这种事件,就是服务器和客户端在连接后,一旦系统监测到有数据发来就自动触发的事件,就像鼠标一点按钮,就有按钮被点击的事件一样,如果有的话,那处理接收数据多容易啊。 展开
1个回答
展开全部
private void Listen设备ForClients()
{
LocalDatabase eventDb = new LocalDatabase();
string eventPreStr = "设备监听线程(" + Thread.CurrentThread.ManagedThreadId.ToString() + ')';
this.listener设备.Start(); eventDb.SaveStr(eventPreStr + "启动");
while (this.isMainRun == true)
{
//blocks until a client has connected to the server
TcpClient client = this.listener设备.AcceptTcpClient();//有连接接入,
//create a thread to handle communication with connected client
Thread clientThread = new Thread(new ParameterizedThreadStart(Handle设备Comm));//应答,并启动一个线程处理
//取得来源IP
eventDb.SaveStr(eventPreStr + "接收到来自" + ((System.Net.IPEndPoint)client.Client.RemoteEndPoint).Address.ToString() + "的连接,并启动线程ID:" + clientThread.ManagedThreadId.ToString());
clientThread.Start(client);
}
}
我的程序中也是这样写的,你应该注意到
TcpClient client = this.listener设备.AcceptTcpClient();//有连接接入,
这句话是有设备连接了,才执行,而不是被跳过去,也就是说,循环是在这里等待的。
你说的网络事件通知,其实可以自己做,只不过是意义不大,现在程序框架已经这么成熟了,自己写也没什么意义。
{
LocalDatabase eventDb = new LocalDatabase();
string eventPreStr = "设备监听线程(" + Thread.CurrentThread.ManagedThreadId.ToString() + ')';
this.listener设备.Start(); eventDb.SaveStr(eventPreStr + "启动");
while (this.isMainRun == true)
{
//blocks until a client has connected to the server
TcpClient client = this.listener设备.AcceptTcpClient();//有连接接入,
//create a thread to handle communication with connected client
Thread clientThread = new Thread(new ParameterizedThreadStart(Handle设备Comm));//应答,并启动一个线程处理
//取得来源IP
eventDb.SaveStr(eventPreStr + "接收到来自" + ((System.Net.IPEndPoint)client.Client.RemoteEndPoint).Address.ToString() + "的连接,并启动线程ID:" + clientThread.ManagedThreadId.ToString());
clientThread.Start(client);
}
}
我的程序中也是这样写的,你应该注意到
TcpClient client = this.listener设备.AcceptTcpClient();//有连接接入,
这句话是有设备连接了,才执行,而不是被跳过去,也就是说,循环是在这里等待的。
你说的网络事件通知,其实可以自己做,只不过是意义不大,现在程序框架已经这么成熟了,自己写也没什么意义。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询