1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
//创建Socket System.Net.Sockets.Socket socket = socketCreate.SocketCreate( "10.231.199.223" , 9014); //byte[] bytes = Encodings.DataEncoding.GetBytes(msgs); //向服务器发送消息 FSocket.Send(socket, msgs); //服务器返回的消息列表 List< string > list = FSocket.List; //清空缓存 list.Clear(); //用死循环向服务器不停的接收消息,如果有数据,我需要解析这条数据,并返回给前台 while ( true ) { //接收服务器上所有的消息,存储到FSocket.List属性中 FSocket.Receive(socket); // 我在这有些疑惑,希望各位能帮助我,UnCode(List)方法应该写在哪里. //方法写在while里面不行,因为一旦list中存在数据,我就得解析,并return给调用者,这个时候就跳出循环,不能一直接收服务器给我的消息了 //写在while代码块外面也不行,因为while是一直在循环,循环没结束,是不可能访问到循环之外的代码的 //24小时在线等各位的建议 if (list.Count>0) { //如果list中有数据,调用unCode方法解析list中的数据 return UnCode(list); } } } |
可以使用异步委托,这个也叫Socket异步编程。具体的你可以看一下MSDN SOCKET API。
异步委托,委托我都用得很少。我先去瞧瞧,谢谢拉
单独用个线程来处理数据不是更好
我想问下怎么处理这些线程?
简单的生产者消费者模式嘛,一个线程不停的收数据,一个线程专门解析数据就可以了。
我就是这个意思,你能告诉我咋写嘛
在循环外新建一个临时变量,专门存放死循环中取出的值,最后分析即可。