社区
C#
帖子详情
如何用多线程来管理每一个socket client的连接?
ZengXi
2002-11-01 02:05:02
服务器端有一个listener,客户端可能有20个client,
我想对每个client到listener的连接用一个线程来监听,
谁能给我个例子, 谢谢,
分不够可以再开
...全文
124
8
打赏
收藏
如何用多线程来管理每一个socket client的连接?
服务器端有一个listener,客户端可能有20个client, 我想对每个client到listener的连接用一个线程来监听, 谁能给我个例子, 谢谢, 分不够可以再开
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ZengXi
2002-12-05
打赏
举报
回复
结
bolar
2002-11-29
打赏
举报
回复
http://www.aspcool.com/lanmu/browse1.asp?ID=879&bbsuser=csharp
可能对你有帮助
LovenDreams
2002-11-29
打赏
举报
回复
在Programming C# 一书中有这个例子
服务器用无限循环来监听客户端的连接,一检测到有客户连接则实例化处理应用的类,若有二十个客户,则实例化20个该类就行了,不用开线程!
ZengXi
2002-11-05
打赏
举报
回复
能否给个例子呢?
sunwindone
2002-11-01
打赏
举报
回复
最好是给出完整代码,客户端和服务器端的,大家检现成的
eshao
2002-11-01
打赏
举报
回复
关注.. 请高手们给出更好的方法.
qf0421
2002-11-01
打赏
举报
回复
你的设计不对,如果client增加,你难道也无止境的增加线程????
最常用的方法是用队列来管理这些socketclient。
xiaolie
2002-11-01
打赏
举报
回复
public class server1 {
...
private void doCmd()
{
while(!terminated)
{
try
{
TcpClient clientSock = tcpListener.AcceptTcpClient();
if (clientSock != null)
{
CmdSession cmdSession = new CmdSession(clientSock, logger);
cmdSession.start();
}
}
catch(Exception e)
{
logger.logMsg("Exception : " + e.ToString());
Thread.Sleep(1000);
}
}
}
public void start()
{
...
try
{
ThreadStart ths = new ThreadStart(doCmd);
Thread th = new Thread(ths);
th.Name = "Work Thread";
th.Start();
}
catch (Exception e)
{
logger.logMsg("doCmd err:" + e.Message + " " + e.ToString());
}
...
}
}
public class CmdSession
{
private KBLogger logger;
private TcpClient clientSock;
private bool terminated = false;
private NetworkStream netStream;
private StreamReader netReader;
private StreamWriter netWriter;
private ArrayList msgLines;
public CmdSession(TcpClient clientSock, KBLogger logger)
{
//
// TODO: Add constructor logic here
//
this.clientSock = clientSock;
this.logger = logger;
msgLines = new ArrayList();
netStream = clientSock.GetStream();
netReader = new StreamReader(netStream);
netWriter = new StreamWriter(netStream);
}
private void recvThreadFunc()
{
while(!terminated)
{
try
{
string cmdLine = netReader.ReadLine();
cmdLine = cmdLine.ToLower().Trim();
if (cmdLine.Equals("quit"))
{
Close();
}
if (cmdLine.IndexOf("list") == 0)
{
string item = cmdLine.Trim().Substring(4).Trim();
if (item.IndexOf("process") == 0)
{
Process[] ps = Process.GetProcesses();
Monitor.Enter(msgLines);
foreach (Process p in ps)
{
msgLines.Add(p.ToString());
}
msgLines.Add("COMMAND OK");
Monitor.Exit(msgLines);
}
}
......
}
catch (Exception e)
{
logger.logMsg("CmdSession.recvThreadFunc: error:" + e.ToString());
netReader.Close();
Thread.Sleep(500);
Close();
}
}
}
private void sendThreadFunc()
{
while(!terminated)
{
Monitor.Enter(msgLines);
foreach(string msgLine in msgLines)
{
netWriter.WriteLine(msgLine);
}
msgLines.Clear();
Monitor.Exit(msgLines);
}
}
public void start()
{
ThreadStart recvTS = new ThreadStart(recvThreadFunc);
Thread recvThread = new Thread(recvTS);
recvThread.Start();
ThreadStart sendTS = new ThreadStart(sendThreadFunc);
Thread sendThread = new Thread(sendTS);
sendThread.Start();
}
public void Close()
{
terminated = true;
clientSock.Close();
}
使用TCPServer编写(
多线程
)
socket
服务
因此,通常我们会使用
多线程
来为每个
连接
创建
一个
独立的工作线程,让每个线程独立处理客户端的请求,从而提高服务器的并发处理能力。 编写
多线程
的TCPServer,首先需要导入必要的库,如Python中的`
socket
`和`...
java
socket
通讯例程
多线程
读写 可以同时收发不同终端的消息
在主线程中通过控制台读取键盘...服务器在收到
一个
socket
连接
之后,把该
socket
保存到队列中,并对队列中的每个
socket
开启各自的读写线程。测试可以在不同控制台运行server和
client
,服务器接收消息时,会显示消息来源
Socket
聊天程序(
一个
服务端,多个客户端)
每个
连接
对应
一个
Socket
对象,服务端需要为每个
Socket
创建单独的线程或者使用异步I/O来处理客户端的数据收发,以避免阻塞其他客户端的通信。 客户端则通常简单地
连接
到服务端,发送消息并接收响应。为了实现多用户...
Android基于
Socket
聊天最终版
当
连接
建立后,服务器端的
Socket
会为每个客户端创建
一个
新的线程来处理单独的通信,以确保多用户同时在线聊天的可行性。在这个项目中,服务器可能使用Java的Server
Socket
类来监听和接受
连接
。 数据库文件“qq.sql”...
android在wifi下手机与电脑的
socket
通信
总的来说,Android在WiFi下与电脑的
Socket
通信是
一个
涉及网络编程、
多线程
和数据交换的综合问题。通过熟练掌握这些技术,你可以构建起强大的跨设备交互应用。在实际开发过程中,记得对代码进行充分测试,确保在各种...
C#
111,093
社区成员
642,554
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章