Socket接收数据一定要用‘循环’吗?

Luna0 2010-09-27 11:26:39
socket1 = stServer.Accept();
while (True)
{
Byte[] byBuff = new Byte[100];
socket1 .Receive(byBuff, byBuff.Length, 0);
string strBuff = Encoding.Default.GetString(byBuff).TrimEnd('\0');
}


Socket接收数据一定要用‘while (True)’吗?
...全文
325 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
w_f_y4422 2010-09-27
  • 打赏
  • 举报
回复
可以考虑异步soc.ReceiveAsync
周药师 2010-09-27
  • 打赏
  • 举报
回复
當然要循環啦 不然你怎麼去及時獲取緩存的數據?
编程爱好者L 2010-09-27
  • 打赏
  • 举报
回复
socket1 = stServer.Accept();
while (True)
{
Byte[] byBuff = new Byte[100];
socket1 .Receive(byBuff, byBuff.Length, 0);
string strBuff = Encoding.Default.GetString(byBuff).TrimEnd('\0');
socket1.sleep(50);
}
是的,如果不循环就接受不到服务器传过来的消息了,最好在while里加个socket1.sleep(50);减少CPU的使用率.
Rainqin123 2010-09-27
  • 打赏
  • 举报
回复
楼主那样写的代码可以吗??异常处理函数都没得一个,只有TURE那这个函数有进就有出,要考虑全面啥,不然软件人人都可以做了。。。。
  • 打赏
  • 举报
回复
不然就一次性咯。。
Luna0 2010-09-27
  • 打赏
  • 举报
回复
这样?我以为有‘消息’到达触发的事件或委托。类似数据库触发器的东西
-小蕾- 2010-09-27
  • 打赏
  • 举报
回复
不'while (True)’怎么知道获取到消息了。。
鸭梨山大帝 2010-09-27
  • 打赏
  • 举报
回复
封装只是方便我们编程.
鸭梨山大帝 2010-09-27
  • 打赏
  • 举报
回复
控件只是封装而已...

本质是一样的.

winsocket1.Connect(IP,Port); 这句话就相当于开启一个线程用于接受来自于 IP:Port 的数据

他内部实现(我推测,并未真正去调试winsocket代码)

肯定类似在创建的线程中弄个循环

while(true)
{
if(有数据接收到)
{调用private void w1_DataArrival事件}
}

Luna0 2010-09-27
  • 打赏
  • 举报
回复
我想知道有没有‘消息’到达,然后再读取的事件
比如mswinsck.ocx控件就有个
private void w1_DataArrival(object sender, AxMSWinsockLib.DMSWinsockControlEvents_DataArrivalEvent e)这个事件,在消息到达的时候再去执行读取。

而不是Socket的循环读取。
鸭梨山大帝 2010-09-27
  • 打赏
  • 举报
回复
如果你需要循环接收数据就一定需要
wj0728 2010-09-27
  • 打赏
  • 举报
回复
只有while(true)了它才会一直监听端口上传输过来的数据

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧