socket同步调用 出错(断开套接字连接后,只能通过异步方式再次重新连接)

liubingonline 2007-07-06 02:55:38
服务器端是socket同步调用,现在想测试这个socket,在客户端写了一个程序来进行测试.是这样子的
bool sign=true;
while(sign)
{
try
{
clientSocket.Connect(ipAddress);
..........
..........
clientSocket.Shutdown(SocketShutdown.Both);
Thread.Sleep(10000);
}
catch(Exception ex)
{
sign=false
}
}

就是隔10秒去连一次,发送接收数据.但是在这里抛异常了:"断开套接字连接后,只能通过异步方式再次重新连接,而且只能连接到不同的 EndPoint。在操作完成前,在将不会退出的线程上必须调用 BeginConnect。"
为什么必须用异步的才行呢,难道不能重新连接么?请大家指教.
...全文
2051 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
天地英豪 2009-09-11
  • 打赏
  • 举报
回复
为什么断开后不能重连?
bxjgood66 2007-09-02
  • 打赏
  • 举报
回复
study
RedGoldFish 2007-07-06
  • 打赏
  • 举报
回复
LS二位说的都有道理,最好的方法是在ShutDown之后在Close:


if(clientSocket.Connected)
clientSocket.Shutdown(SocketShutdown.Both);

clientSocket.Close();

csharpstudy 2007-07-06
  • 打赏
  • 举报
回复
关时最好发个关闭的信号通知服务器.... 最好...

monikamili() 说得没错...肯定要判断的...

monikamili 2007-07-06
  • 打赏
  • 举报
回复
RedGoldFish(红金鱼) 的方法虽然不会抱错
但肯定会出现数据丢失
monikamili 2007-07-06
  • 打赏
  • 举报
回复
我来说两句
clientSocket的Shutdown前一定要判断是否有未处理完的操作
如:
if(clientSocket.Connected)
clientSocket.Shutdown()

也就是说,如果有还在连接的,则关闭,不做处理
如果不做判断,直接Shutdown,是不被推荐的,而且肯定会抱错的

对于你这种方式,建议你connection前重新初始化对象,包括clientSocket
csharpstudy 2007-07-06
  • 打赏
  • 举报
回复
clientSocket.Shutdown(SocketShutdown.Both);
clientSocket.Close();

////////////
开始的时候.重定义clientSocket
try
{
clientSocket = new Socket(....);
}
.....

/////
不过为什么要关闭呢...其实在线程中直接休眠十秒钟. 没有必要关闭socket啊.一直保持连接不好些? 过十秒钟就重连一次, 更耗资源吧.
liubingonline 2007-07-06
  • 打赏
  • 举报
回复
谢谢你了,问题解决了!
RedGoldFish 2007-07-06
  • 打赏
  • 举报
回复
clientSocket.Shutdown(SocketShutdown.Both);
_____________________________________________

用clientSocket.Close()试试,只有调用它才清理资源.

110,536

社区成员

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

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

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