C# socket 多线程客户端
现在需要实现这样一个功能:服务器端监听套接字,每监听到一个新的连接,就开启一个线程去该对象进行消息传送;这些线程会一直保持运行状态;下次该对象再往服务器发送消息时,服务器...
现在需要实现这样一个功能:服务器端监听套接字,每监听到一个新的连接,就开启一个线程去该对象进行消息传送;这些线程会一直保持运行状态;下次该对象再往服务器发送消息时,服务器直接调用该线程去进行处理。现在关键问题是不知道怎样去调用已经运行的线程。请高手给出答案!偶是新手,没有多少悬赏分,还望见谅!
感谢下面两位的回答,我补充一下:诚如1楼所言,服务端只需开启不同的线程去监听不同的端口即可,那么在监听上可以做到多线程处理;而我们现在要做的是:服务器端往这么多已建立连接的客户端发送消息时,也要采用多线程,也就是刚才监听到的不同的客户端所建立的线程,调用这些线程中的“消息发送”的方法,这一点我不知如何实现,还望高人继续解答,不胜感激! 展开
感谢下面两位的回答,我补充一下:诚如1楼所言,服务端只需开启不同的线程去监听不同的端口即可,那么在监听上可以做到多线程处理;而我们现在要做的是:服务器端往这么多已建立连接的客户端发送消息时,也要采用多线程,也就是刚才监听到的不同的客户端所建立的线程,调用这些线程中的“消息发送”的方法,这一点我不知如何实现,还望高人继续解答,不胜感激! 展开
展开全部
你只需要开启子线程去监听特定端口就行了,在监听时保持连接状态,客户端下次再连接这个特定端口时,服务器端的监听会捕捉到的。
所以服务器端和客户端是靠特定端口来保持双方的通讯的,不需要你来处理线程调用了。
补充:
你可能还没明白多线程的用法,
你可能误解了一点:开启子线程后会关闭,然后下次怎么去找上次开启的线程,是吗?
其实一般的做法是,开启了子线程后,就进入了一个无限循环 while(true){}
然后在这个循环里面去监听客户端的连接,连上来一次处理一次,直到客户端发出停止连接的通知才结束这个无限循环,或者设置一个超时等待。或者在主线程中强制终止这个子线程。
所以你开启了子线程后,就不用担心其他事情了,这个子线程里的循环会一直在运行,你不需要去考虑线程调度的问题。
当然,如果是商业级的程序,会要考虑更多的问题,比如资源访问同步,线程调度,并发控制等。
所以服务器端和客户端是靠特定端口来保持双方的通讯的,不需要你来处理线程调用了。
补充:
你可能还没明白多线程的用法,
你可能误解了一点:开启子线程后会关闭,然后下次怎么去找上次开启的线程,是吗?
其实一般的做法是,开启了子线程后,就进入了一个无限循环 while(true){}
然后在这个循环里面去监听客户端的连接,连上来一次处理一次,直到客户端发出停止连接的通知才结束这个无限循环,或者设置一个超时等待。或者在主线程中强制终止这个子线程。
所以你开启了子线程后,就不用担心其他事情了,这个子线程里的循环会一直在运行,你不需要去考虑线程调度的问题。
当然,如果是商业级的程序,会要考虑更多的问题,比如资源访问同步,线程调度,并发控制等。
展开全部
1)开启的线程设置为后台线程
thread
t
=
new
thread(你的线程函数);
t.isbackground
=
true
2)建议你利用socket提供的异步回调
socket.beginxxxxx()
socket.endxxxx
来实现多线程处理
-----------
利用异步回调最大的好处是:(1)可以充分利用.net
framework
的线程池中i/o线程,最大限度降低cpu处理开销。曾经做过处理1000多个socket
tcp客户端连接的程序,双核cpu平均占用不超过12%(2)网络通信过程各种异常是不可避免的,异步编程结构很容易实现异常处理。
thread
t
=
new
thread(你的线程函数);
t.isbackground
=
true
2)建议你利用socket提供的异步回调
socket.beginxxxxx()
socket.endxxxx
来实现多线程处理
-----------
利用异步回调最大的好处是:(1)可以充分利用.net
framework
的线程池中i/o线程,最大限度降低cpu处理开销。曾经做过处理1000多个socket
tcp客户端连接的程序,双核cpu平均占用不超过12%(2)网络通信过程各种异常是不可避免的,异步编程结构很容易实现异常处理。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
一楼正解
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询