社区
C#
帖子详情
如何用多线程来管理每一个socket client的连接?
ZengXi
2002-11-01 02:05:02
服务器端有一个listener,客户端可能有20个client,
我想对每个client到listener的连接用一个线程来监听,
谁能给我个例子, 谢谢,
分不够可以再开
...全文
147
8
打赏
收藏
如何用多线程来管理每一个socket client的连接?
服务器端有一个listener,客户端可能有20个client, 我想对每个client到listener的连接用一个线程来监听, 谁能给我个例子, 谢谢, 分不够可以再开
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用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();
}
python
多线程
socket
实现多个
client
连接
一个
server
server.py代码 import
socket
# 导入
socket
模块 from threading import Thread import time import json ADDRESS = ('127.0.0.1', 8712) # 绑定地址 g_
socket
_server = None # 负责监听的
socket
g_conn_pool = {} #
连接
池...
如何在Java实现TCP方式发送和接收
Socket
消息(
多线程
模式)
详细叙述了如何在Java实现TCP方式发送和接收
Socket
消息(
多线程
模式)。欢迎点赞收藏。
php
多线程
解决之stream_
socket
_
client
问题:有没有办法在php中实现
多线程
呢? 假设你正在写
一个
基于多台服务器的php应用,理想的情况时同时向多台服务器发送请求,而不是一台接一台。可以实现吗?回答: 当有人想要实现并发功能时,他们通常会想到用fork或者spawn threads,但是当他们发现php不支持
多线程
的时候,大概会转换思路去用一些不够好的语言,比如perl。 其实的是大多数情况下,你大可不必使用fork或者线程,并且...
C#基于
Socket
的TCP通讯例程 Server
Client
一、简单了解服务端和客户端各自的功能 首先应该清楚服务端(Server)和客户端(
Client
)它们各自的功能。 (1)服务端(Server):负责接收客户端的请求,然后根据客户端请求的内容不同而给客户端返回相应的数据。 (2)客户端(
Client
):接服务端,向服务端发送自己的业务需求(也就是数据),然后接受服务端返回过来的信息。 (3)分析服务端和客户端的功能,可以很清楚的知道,它们完成了数据之间的交流,或者说是业务之间的相互传递与获取。 二、服务器与客户端之间信息传递的桥梁(
Socket
) (1)服务
LINUX 实现
socket
与
多线程
结合与多个TCP
client
实现双向通信
上一节中,我们编写了
socket
单播1v1的双向通讯,但
socket
本身可以是1v多的,而我们的思路主要是通过主线程
管理
连接
socket
,并创建多线线程对单个
连接
进行单独处理,这样我们实现了多个
socket
连接
双向通讯问题。
socket
在创建线程时会将参数
client
_sock(accept返回的id)传入线程,在线程中会对malloc申请的空间进行释放。1.server.c 主线处理
连接
,创建线程与对应客服端id进行双向通信。3.
client
_2.c 发送并接收(其实与
client
_1.c一样的)
C#
111,128
社区成员
642,536
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章