C# 线程间传数据
请教前辈:现有一sockettcpserver端程序,主线程循环侦听端口,当有客户端接入时,建立子线程接收数据,保持连接。请问,当需要向特定客户端发数据时,需要得到已建立...
请教前辈:
现有一socket tcp server端程序,主线程循环侦听端口,当有客户端接入时,建立子线程接收数据,保持连接。请问,当需要向特定客户端发数据时,需要得到已建立的连接,即找到相关子线程,该怎样找子线程到并传数据给它?
亟待解决,先拜谢各位啦!
我找到了这个方法
ProcessThreadCollection ptCollection = Process.GetCurrentProcess().Threads;
Console.WriteLine("{0} threads in process",ptCollection.Count);
foreach (ProcessThread pt in ptCollection)
{
Console.WriteLine("ID:{0},State:{1},Priority:{2}",pt.Id,pt.ThreadState,pt.PriorityLevel);
}
能否在线程里写个发送函数,send(byte[] buf)
从主线程里遍历到ID吻合的线程pt后,用pt.send(buf)来下发数据? 展开
现有一socket tcp server端程序,主线程循环侦听端口,当有客户端接入时,建立子线程接收数据,保持连接。请问,当需要向特定客户端发数据时,需要得到已建立的连接,即找到相关子线程,该怎样找子线程到并传数据给它?
亟待解决,先拜谢各位啦!
我找到了这个方法
ProcessThreadCollection ptCollection = Process.GetCurrentProcess().Threads;
Console.WriteLine("{0} threads in process",ptCollection.Count);
foreach (ProcessThread pt in ptCollection)
{
Console.WriteLine("ID:{0},State:{1},Priority:{2}",pt.Id,pt.ThreadState,pt.PriorityLevel);
}
能否在线程里写个发送函数,send(byte[] buf)
从主线程里遍历到ID吻合的线程pt后,用pt.send(buf)来下发数据? 展开
展开全部
给你一个思路吧
每一个连接过来的client你需要有一个唯一标识,让你能够职别出他的身份。Userid之类的,同一个userid最好不要同时进行连接。
方法一:
你定义一个全局的变量Dictionary,这是键值对集合,以userid为key,值为socket类型。当客户端连接过来时,也就是Accept返回值,添加到这个集合中去。当连接断开时,从集合中删除这条记录。当要给客户端发送数据时,通过userid找到对应的socket,就可以发送了。
方法二:
你为每一个userid建立一个消息队列。服务端将要发送的数据放到队列中。
当与client连接过来时,保持连接的期间,对消息队列进行检查,如果有数据就发送给client。
每一个连接过来的client你需要有一个唯一标识,让你能够职别出他的身份。Userid之类的,同一个userid最好不要同时进行连接。
方法一:
你定义一个全局的变量Dictionary,这是键值对集合,以userid为key,值为socket类型。当客户端连接过来时,也就是Accept返回值,添加到这个集合中去。当连接断开时,从集合中删除这条记录。当要给客户端发送数据时,通过userid找到对应的socket,就可以发送了。
方法二:
你为每一个userid建立一个消息队列。服务端将要发送的数据放到队列中。
当与client连接过来时,保持连接的期间,对消息队列进行检查,如果有数据就发送给client。
更多追问追答
追问
谢谢前辈!
请问方法一,当前活跃的socket应该是被相关线程占用来接收数据,主线程里找到它后能够再使用它发数据给客户端吗?
追答
可以,发数据通常是调用socket.Send方法,这方法是线程安全的。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询