用同步 socket 建立多线程 ,出现异常:通常每个套接字地址 (协议/网络地址/端口)只允许使用一次

wu_apple 2004-07-04 08:44:26
因为异步 套接子 比较复杂,我就用了同步 套接字 ,在accept 后马上开启一个线程 ,代码如下:
public static void StartListening()
{
IPHostEntry ipHostInfo = Dns.Resolve(Dns.GetHostName());
IPAddress ipAddress = ipHostInfo.AddressList[0];
Console.WriteLine("localIPAddress is {0}",ipAddress.ToString());
IPEndPoint localEndPoint = new IPEndPoint(ipAddress, 11090);

// Create a TCP/IP socket.
Socket listener = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp );

// Bind the socket to the local endpoint and
// listen for incoming connections.
try
{
listener.Bind(localEndPoint);
listener.Listen(10);

// Start listening for connections.
while (true)
{
Console.WriteLine("Waiting for a connection...");
// Program is suspended while waiting for an incoming connection.
Socket handler = listener.Accept();
//接受 连接产生新线程 监听端口
try
{
Thread thread = new Thread(new ThreadStart(StartListening));
thread.Start();
}
catch(Exception e ){
Console.WriteLine(e.ToString());
}
.....

}

可是他 提示我说:通常每个套接字地址 (协议/网络地址/端口)只允许使用一次。

应该怎样解决呢?
...全文
816 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lamky 2005-09-06
  • 打赏
  • 举报
回复
11090 port值太大了.
wu_apple 2004-07-04
  • 打赏
  • 举报
回复
我明白了道理, 不过还是不知道怎么实现
accept一个连接后得到一个handler ,也就是一个新的socket ,怎么样又去处理(accept)新的连接呢 ,产生一个线程吗?我去试试。
速马 2004-07-04
  • 打赏
  • 举报
回复
Thread thread = new Thread(new ThreadStart(StartListening));
这句不应该写在函数里面
然后Socket只能绑定一次
你的程序一个线程就绑定了n次,当然要出问题了
wu_apple 2004-07-04
  • 打赏
  • 举报
回复
大家帮帮我呀!!
速马 2004-07-04
  • 打赏
  • 举报
回复
用于监听的socket不需要新建
每次accept连接后得到一个新的socket就可以用了
而原来的用于监听的socket还可以继续使用
wu_apple 2004-07-04
  • 打赏
  • 举报
回复


我是这样想的,每一次接受到一个连接,然后就新建一个socket 监听新的连接,接受新的连接后进行同样的处理。这样应该怎么实现呀?

110,534

社区成员

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

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

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