怎样彻底释放一个Socket占用的端口

仓木泽 2006-04-12 03:19:13
while(true)
{
for(int i=0;i<1000;i++)
{
Socket sender = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
try
{
Byte[] data = System.Text.Encoding.ASCII.GetBytes(i.ToString());
IPEndPoint localEP = new IPEndPoint( IPAddress.Parse("172.23.163.169") , 8250);
IPEndPoint remoteEP = new IPEndPoint( IPAddress.Parse("172.23.163.244") , 1860);
sender.Bind(localEP);
sender.Connect(remoteEP);
sender.Send(data);
}
catch(Exception ex)
{
throw new Exception(ex.Message);
//由于系统缓冲区空间不足或列队已满,不能执行套接字上的操作。
}
finally
{
sender.Close();
System.Threading.Thread.Sleep(100);
}
}
}
创建Socket以后,虽然显式调用了sender.Close();
但是重新在8250端口创建Socket连接的时候就报错。
那我需要怎样才能重用之前的套接字连接的端口?
...全文
1368 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
仓木泽 2006-04-25
  • 打赏
  • 举报
回复
我认为实用异步以后client还是server都一样。。。
goldenroses 2006-04-24
  • 打赏
  • 举报
回复
老兄,你这是client还是server?
仓木泽 2006-04-24
  • 打赏
  • 举报
回复
服务器肯定是断开了,问题就是客户端,主要是怕网络繁忙的时候端口不够,抛出异常,因为写的是系统服务,所以尽量想避免异常产生。
goldenroses 2006-04-24
  • 打赏
  • 举报
回复
我想问一下楼主:你的错误信息是什么?最好把它完全粘出来

再就是,这是客户端,在它断开的时候,server端也要断开
kmblack1 2006-04-24
  • 打赏
  • 举报
回复
楼猪是想用多线程发送数据吧!!
写成这样也够强的了
几句话说不清
km_black@hotmail.com
deadshot123 2006-04-24
  • 打赏
  • 举报
回复
/// <summary>
/// StartListener()方法是在新的线程中进行的,它主要用于当接手到一个客户端请求的时候,
/// 确认与客户端的连接,并却立刻启动一个新的线程来处理和该客户端的信息交互
/// </summary>
private void StartListen()
{
bool flag=true;
while(flag)
{
try
{
//当接收到一个客户端请求时,确认与客户端的连接
Socket socket = listener.AcceptSocket();
//用tmpSocket保存发出请求的客户端实例
tmpSocket=socket;
if(clients.Count>=MaxNum)
{
tmpSocket.Close();
}
else
{
//启动一个新的线程,执行方法this.ServiceClient,处理用户相应的请求
Thread clientService=new Thread(new ThreadStart(this.ServiceClient));
clientService.Start();
}

}
catch(Exception ex)
{
if(tmpSocket!=null)
tmpSocket.Close();
flag=false;
this.textBox1.AppendText(ex.Message.ToString().Trim('\0')+"\r\n");
//this.listBox1.Items.Add(ex.ToString());
}
}
}
仓木泽 2006-04-21
  • 打赏
  • 举报
回复
up
QQXQLJ 2006-04-20
  • 打赏
  • 举报
回复
关注关注~~~~
努力努力~~~~
顶!!
仓木泽 2006-04-19
  • 打赏
  • 举报
回复
仓木泽 2006-04-17
  • 打赏
  • 举报
回复
dup
仓木泽 2006-04-17
  • 打赏
  • 举报
回复
liuqian0415 2006-04-14
  • 打赏
  • 举报
回复
dup
huangguangdou 2006-04-13
  • 打赏
  • 举报
回复
socketName.close()
csShooter 2006-04-13
  • 打赏
  • 举报
回复
mark
仓木泽 2006-04-13
  • 打赏
  • 举报
回复
顶一下
仓木泽 2006-04-13
  • 打赏
  • 举报
回复
我延迟了10秒,都抱错....
仓木泽 2006-04-13
  • 打赏
  • 举报
回复
延迟这么长时间花都谢了,不过还是感谢adu1218(阿杜)
adu1218 2006-04-13
  • 打赏
  • 举报
回复
关闭socket绑定,系统是另起一个线程完成的,如果延时时间不够,等下一次循环来了,系统还没有彻底关掉上次绑定就会报错!所以我的做法是让延时时间尽可能的足够。如下处理:
sender.Shutdown(SocketShutdown.Both);
//线程延时3秒,使得sender关闭时间足够
System.Threading.Thread.Sleep(3000);
sender.Close();
//线程延时3秒,使得this.client关闭时间足够
System.Threading.Thread.Sleep(3000);
仓木泽 2006-04-13
  • 打赏
  • 举报
回复
楼上的,我的程序里面已经close了,回答问题的时候能不能先看看问题的内容,谢谢
仓木泽 2006-04-12
  • 打赏
  • 举报
回复
楼上的,这样还是没用,循环第二次的时候就会触发异常
加载更多回复(1)

110,539

社区成员

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

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

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