关于Socket异步编程的一个问题

only_you 2003-10-10 11:51:16
请各位看一看我这段程序,有什么问题。

线程启动Run函数 并把keep_Running设为true
rcv_buf_bytes = new bytes[4096];
rcv_buf_len =4096;
public void Run()
{
IAsyncResult ar = socket.BeginReceive(rcv_buf_bytes,0,rcv_buf_len,SocketFlags.None,new AsyncCallback(CallReceive),this);
}

CallReceive是这样的
private void CallReceive(IAsyncResult ar)
{
int recvBytes = socket.EndReceive(ar);
if(keep_Running)Run();
}

程序并不马上出错,而是执行一段时间后
int recvBytes = socket.EndReceive(ar);出错
错误是:未处理的“System.Net.Sockets.SocketException”类型的异常出现在 system.dll 中。

其他信息: 由于线程退出或应用程序请求,已放弃 I/O 操作。

请教各位大虾,这是什么原因?
...全文
103 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
liqianhong 2003-10-13
  • 打赏
  • 举报
回复
可不可以发一个完整一点的程序给我,让我也调试一下?
liqianhong_7708@sina.com.cn
only_you 2003-10-13
  • 打赏
  • 举报
回复
public int EndReceive(
IAsyncResult asyncResult
);
这个没错

我又编了个不是多线程的程序,试了一试,果然就没错了。
代码不变,点击button创建socket。然后,运行Run()
就没有出错了。
很可能就是和多线程有关。
代码我是参考一本书上的,那本书上的例程也不是多线程的。
zhangjie1234 2003-10-13
  • 打赏
  • 举报
回复
int recvBytes = socket.EndReceive(ar);
if(keep_Running)Run();
/////////////////
socket.EndRecive(ar) 好象是返回一个新的socket对象
而不是int
查msdn 看看
jszlq428 2003-10-13
  • 打赏
  • 举报
回复
问题可能出在int recvBytes = socket.EndReceive(ar);上
当程序运行到次是,执行的是退出操作endReceive,
应该接受完毕后再退出!
only_you 2003-10-12
  • 打赏
  • 举报
回复
呵呵
大虾说得在理
我编得就是一个多线程程序,请问你是怎么解决的。
phoenixyf 2003-10-10
  • 打赏
  • 举报
回复
我编的SOCKET异步通讯也出现了这个问题,应该是多个线程之间同步的问题
only_you 2003-10-10
  • 打赏
  • 举报
回复
没有哪位大侠 给点建议吗?
或者有哪位大侠 出面肯定 这些语句是对的
问题出在别的地方

110,502

社区成员

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

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

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