问题描述
大家好,服务器上开一个TCPListener通过多线程和AcceptTCPClient方法,可以建立多个连接,也可以接收多个连接发送过来的数据,但是我如果要向指定的连接发送数据的时候应该怎么做呢?
解决方案
解决方案二:
先顶一下
解决方案三:
Sockets=listener.AcceptSocket();然后可以将这们Socket转交给线程处理,或都者在队列中来处理。
解决方案四:
是啊,但是我现在想要实现向某一个socket发送数据,如何处理呢?
解决方案五:
帖一点代码吧,我原来做的一个通讯项目中的,缩略了些与些无关的内容:while(true){try{Sockets=listener.AcceptSocket();clientsocket=s;clientservice=newThread(newThreadStart(ServiceClient));clientservice.Start();}catch(Exceptione){break;}}privatevoidServiceClient(){Socketclient=clientsocket;stringclientcommand="";while(keepalive){Byte[]buffer=newByte[2048];try{datalen=client.Receive(buffer);}catch{}clientcommand+=System.Text.Encoding.ASCII.GetString(buffer,0,datalen);if(.....){SendToClient(client,refsendBuffer);}}privatevoidSendToClient(Clientclt,stringreturnString){byte[]buffer=newbyte[20];try{buffer=System.Text.Encoding.ASCII.GetBytes(returnString.ToCharArray());client.Send(buffer,buffer.Length,0);}catch(Exception){}}
解决方案六:
每一个连接对应一个连接,要发送数据之类的处理都在特定的处理里做,都是对应着特定的Socket啊。
解决方案七:
我的MSN是:gjq_1@21cn.com
解决方案八:
你这个方法是在获得数据之后,服务器给出回应,发送数据到当前的连接.我想是在任意时刻向指定某台客户端,发送任意数据.也就是说我现在获得10个连接,通过什么办法指定向其中一个连接中发送数据呢?
解决方案九:
使用哈希表。服务器每收到一个客户端连接,就把这个连接存入哈希表。客户端socket对象做值,socket对象的ip和port组合做键,或者你找个别的什么唯一标识做键。这样就可以随时从哈希表中根据键取出值,用这个socket对象值来send数据了。
解决方案十:
谢谢,我看这个方法比较好,希望有更多的方法实现。
解决方案十一:
顶一下,我的方法是Socket和其他必要信息作为一个结构体放在List<>中,需要的时候循环。但是效率不高,正在探索新方法
解决方案十二:
将楼上的List<>改成Direcotry<>就好了!
解决方案十三:
如果那样子,其不是,发送一次数据就要遍历所有的链接,感觉不是很好。另外实时判断某一链接状态如何做呢?即:任意一个链接断开时候报警.....
解决方案十四:
每断开一个连接,服务器端不是要触发一次异常吗,捕捉它,在里面加上从链表删除对应元素的代码,还有别的什么你想加的代码。服务器关闭时也要清空链表。这样就做到实时更新了。