socket断开后后再连接失败,why?

nn2003 2003-02-14 05:51:31
//断开:
if(socket!=null)
{
if(socket.Connected)
{
socket.Shutdown(SocketShutdown.Both);
socket.Close();//不用这行也不行;
}
}

//连接:
try
{

IPAddress ip;
int endport;
try
{
ip=IPAddress.Parse(this.form1.ResInI.IPE_ip);
endport=int.Parse(this.form1.ResInI.IPE_Port);
}
catch(Exception ee)
{
MessageBox.Show(ee.Message);
return;
}

IPEndPoint ipe=new IPEndPoint(ip,endport);
if(socket==null)
{
this.socket=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
}
this.socket.Connect(ipe);
}
catch(Exception ee)
{
MessageBox.Show(ee.Message);
return;
}
先连接,再断开;再连接失败;why?
...全文
344 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
RnfShadow 2003-08-18
  • 打赏
  • 举报
回复
gz
poetc 2003-02-14
  • 打赏
  • 举报
回复
学习~~
nn2003 2003-02-14
  • 打赏
  • 举报
回复
搞定啦,谢谢大家.
nn2003 2003-02-14
  • 打赏
  • 举报
回复
关闭后当然无法再连接;
msdn:
Socket.Shutdown 方法
将 how 设置为 Send,指定不允许随后对 Send 进行调用。对于 TCP 套接字,将在接收方已发送和确认所有数据后发送 FIN。

如果将 how 设置为 Receive,则指定不允许随后对 Receive 进行调用。这对于较低的协议层没有影响。对于 TCP 套接字,如果数据正在等待被接收或者如果更多的数据在 Socket 被禁用后到达,则将重置连接。对于 UDP 套接字,将接受数据文报并将其排队。

如果将 how 设置为 Both,则将按上述方式同时禁用发送和接收。

若要结束关闭 Socket,则必须在调用 Shutdown 之后对 Close 进行调用。不应试图复用 Socket。

示例
[Visual Basic, C#] 下面的示例使用 Shutdown 禁用 Socket。

[Visual Basic]
aSocket.Shutdown(SocketShutdown.Both)
aSocket.Close()
If aSocket.Connected Then
Console.WriteLine("Winsock error: " _
+ Convert.ToString(System.Runtime.InteropServices.Marshal.GetLastWin32Error()))
End If
[C#]
aSocket.Shutdown(SocketShutdown.Both);
aSocket.Close();
if (aSocket.Connected) {
Console.WriteLine("Winsock error: " + Convert.ToString(System.Runtime.InteropServices.Marshal.GetLastWin32Error()) );
}
[C++, JScript] 没有可用于 C++ 或 JScript 的示例。若要查看 Visual Basic 或 C# 示例,请单击页左上角的语言筛选器按钮 。
close方法:
强制 Socket 连接关闭。

[Visual Basic]
Public Sub Close()
[C#]
public void Close();
[C++]
public: void Close();
[JScript]
public function Close();
备注
当该套接字被关闭时,Connected 属性将被设置为 false。

在调用 Close 之前,该应用程序应调用 Shutdown,以确保在 Socket 关闭之前已发送或接收所有挂起的数据。

示例
[Visual Basic, C#] 下面的示例关闭一个 Socket。

[Visual Basic]
aSocket.Shutdown(SocketShutdown.Both)
aSocket.Close()
If aSocket.Connected Then
Console.WriteLine("Winsock error: " _
+ Convert.ToString(System.Runtime.InteropServices.Marshal.GetLastWin32Error()))
End If
[C#]
aSocket.Shutdown(SocketShutdown.Both);
aSocket.Close();
if (aSocket.Connected) {
Console.WriteLine("Winsock error: " + Convert.ToString(System.Runtime.InteropServices.Marshal.GetLastWin32Error()) );
}


需要重新建一个socket,再连接

110,539

社区成员

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

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

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