创建一个tcp模式的Socket,Connect后Disconnect。
这时候如果立即再Connect会报“通常每个套接字地址(协议/网络地址/端口)只允许使用一次。”异常。
如果等上10多秒之后再connect,就能成功连接。
这是为什么?有没有什么办法能够立即连接就可以成功?
试过断开后新创建一个socket连接相同的ip和端口可以立即连上。不创建新Socket有没有办法解决?
这时候如果立即再Connect会报“通常每个套接字地址(协议/网络地址/端口)只允许使用一次。”异常。
如果等上10多秒之后再connect,就能成功连接。
这是为什么?有没有什么办法能够立即连接就可以成功?
试过断开后新创建一个socket连接相同的ip和端口可以立即连上。不创建新Socket有没有办法解决?
解决方案 »
- DataGridView 改变单元格字体颜色问题!
- C#爬虫
- 有谁知道用VS2005做网站时新建文件(如.aspx,.cs)默认用utf-8
- C#如何处理通配符?Directory.GetFiles()返回字符串处理的是目录里面的文件名,如果参数换成a*.txt这种格式应该如何取得相应的文件名?
- 关于字符串的近似匹配的问题,高手支招.谢谢.....在线等.
- 怎么用c#读取内存地址?
- 网上面试题 疑惑
- [c#] 这里的大虾们用C#搞windows应用开发的多么?
- !~!!!急请版主和高手帮助!!一个asp.net程序在服务器上,我从本机IE访问运行可出现如下错误(将对象引用设置到对象的实例.......),详
- 高手求助,急啊
- 不在数据库里加字段,能实现输入拼音字母查询对应汉字吗?
- c# 调用cmd问题
1.Socket.ShutDown();
Socket.Disconnect(true)2.Socket.Disconnect(true)
SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
无效,disconnect后立即connect依然失败,过一会儿才能成功。
{
AAllClientSocket.Connect(AEndPoint);
}
看是否已经连接,如果已经连接就不用在连接了!通信最好是问答式的,这样安全!如果连续发送也不是不可以
,我可以给你段代码,你参考下 //循环所有DCS端口
for (int i = 0; i < Class_Const.m_DCS_ClientIPAndPort.Count; i++)
{
IPEndPoint AEndPoint = Class_Const.m_DCS_ClientIPAndPort[i];
DataTable Acommand = Class_SQL_DAL.GetTDHandSBH(Class_Const.m_DCS_ClientIPAndPort_ID[i]);
//建立socket连接
Socket AAllClientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
AAllClientSocket.ReceiveTimeout = 1000;
// AAllClientSocket.SendTimeout = 100;
Thread.Sleep(1000);
for (int j = 0; j < Acommand.Rows.Count; j++)
{ //二次表设备号
string AstrSBH = Acommand.Rows[j]["SBH"].ToString();
//字节形式
byte[] ASBH = System.Text.ASCIIEncoding.ASCII.GetBytes(AstrSBH);
//数据通道号
byte[] ATDH = System.Text.ASCIIEncoding.ASCII.GetBytes(Acommand.Rows[j]["TDH"].ToString());
try
{
//连接服务器
Thread.Sleep(500);
if (!AAllClientSocket.Connected)
{
AAllClientSocket.Connect(AEndPoint);
}
byte[] ARequest;
if (AstrSBH == "47")
{
ARequest = new byte[] { 47, 3, 0, 0, 0, 1,194,69};
}
else if (AstrSBH == "46")
{
ARequest = new byte[] { 46, 3, 0, 0, 0, 1,195,148};
}
else
{
ARequest = new byte[] { 0x11, ASBH[0], ASBH[1], ASBH[2], ATDH[0], ATDH[1], 3 };
}
AAllClientSocket.Send(ARequest); Class_Log.ShowLogInWindow("即时上传命令发送成功" + AEndPoint.ToString(), 1);
byte[] Abyte = new byte[1000];
//接受数据
AAllClientSocket.Receive(Abyte);
//处理数据
AnalyzeData(Abyte);
//测试
// string aabb = System.Text.Encoding.ASCII.GetString(Abyte);
// Class_Log.ShowLogInWindow(aabb, 1);
// AAllClientSocket.Shutdown(SocketShutdown.Both);
//关闭连接 // AAllClientSocket.Disconnect(true);
}
catch
{
//显示日志
Class_Log.ShowLogInWindow(AEndPoint.ToString() + ":链路不通 ", 1);
}
}
AAllClientSocket.Close();
}