socket.connect在什么时候会报“通常每个套接字地址(协议/网络地址/端口)只允许使用一次”的异常?

panxin 2007-02-27 06:02:29
如题
...全文
1459 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
灰太狼 2007-03-02
  • 打赏
  • 举报
回复
比如你的本機端口90被佔用了,然後你又使用90這個端口時,就會報這個錯誤
casablancaliu 2007-03-01
  • 打赏
  • 举报
回复
1 你用问端口没关闭
2 该端口在用了
panxin 2007-03-01
  • 打赏
  • 举报
回复
我不明白的是,socket.connect时所用到的本地端口号是系统分配的,它应该分配给我的是当前没有被使用的吧,如果是这样,就不应该出现“通常每个套接字地址(协议/网络地址/端口)只允许使用一次”的异常吧。
panxin 2007-03-01
  • 打赏
  • 举报
回复
把打开关闭端口放到线程外面去,线程只管发送,不管打开关闭端口,这样就不会造成冲突了,不过你多线程同时发送要注意接收端能不能正确分离。
========================================================

更详细的过程应该是:
1 准备要发送的数据(5000条),放入队列(Queue<string>)
2 为每个目标端口创建3个发送线程
3 每个发送线程检查队列中是否有数据需要发送,如果有,则创建到目标端口
的连接,发送数据,接收数据(超时为1秒),最后关闭连接。
4 队列中没有数据,则发送线程退出。

这样的操作流程没有办法把端口的打开和关闭操作放到线程外面去做。

另外,连接的创建和关闭代码如下:
Socket socket = null;
try
{
//创建连接
}
catch(Exception ex)
{
//输出异常
}
finally
{
if (socket!=null)
{
try
{
//关闭连接
}
catch(Exception exx)
{
//输出异常
}
}
}

程序运行阶段没有在关闭连接处发生过异常,所以应该可以确定每次连接的关闭都是成功的。
Ivony 2007-03-01
  • 打赏
  • 举报
回复
不能关闭进程,程序执行时不间断的向10个目标端口发送数据,发送数据的过程为:
1 创建到目标端口的连接(Socket.Connect)
2 发送数据(Socket.Send)
3 等待接收数据,超时时间为1秒(Socket.Recive)
4 关闭连接(Socket.Close)


把打开关闭端口放到线程外面去,线程只管发送,不管打开关闭端口,这样就不会造成冲突了,不过你多线程同时发送要注意接收端能不能正确分离。
panxin 2007-03-01
  • 打赏
  • 举报
回复
没错,但是系统分配的是你用于连接的PORT,而不是你要连接的PORT。也就是说你要连接192.168.56.6:6666这个地址吧,那么192.168.56.6这台机器的6666端口被占用了,所以报错了,而你用于连接192.168.56.6:6666的本机端口是系统指定的。

==============================================

但是目标端口是有监听队列长度的啊,我设置的是1000。
那么按照你的意思,也就是说目标端口的监听队列已满,所以才会报这个错误,是吗?
灰太狼 2007-03-01
  • 打赏
  • 举报
回复
to 它应该分配给我的是当前没有被使用的吧

没错,但是系统分配的是你用于连接的PORT,而不是你要连接的PORT。也就是说你要连接192.168.56.6:6666这个地址吧,那么192.168.56.6这台机器的6666端口被占用了,所以报错了,而你用于连接192.168.56.6:6666的本机端口是系统指定的。
frank198381 2007-02-28
  • 打赏
  • 举报
回复
关闭进程,同一端口不可以同时使用。
panxin 2007-02-28
  • 打赏
  • 举报
回复
to csShooter:
进行连接的端口是由系统分配的啊,已经被占用的就不应该分配了吧
zc2cm 2007-02-28
  • 打赏
  • 举报
回复
进程里关闭正在运行的窗体~
csShooter 2007-02-28
  • 打赏
  • 举报
回复
多半都是端口重复打开
panxin 2007-02-28
  • 打赏
  • 举报
回复
关闭进程,同一端口不可以同时使用。
=======================================
不能关闭进程,程序执行时不间断的向10个目标端口发送数据,发送数据的过程为:
1 创建到目标端口的连接(Socket.Connect)
2 发送数据(Socket.Send)
3 等待接收数据,超时时间为1秒(Socket.Recive)
4 关闭连接(Socket.Close)

发送数据的工作是多线程同时进行,每个目标端口对应的发送线程数量是3个,
那么10个目标端口就是30个发送线程。

110,537

社区成员

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

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

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