服务器通过socket套接字协议,连接socket服务器,提示“通常每个套接字地址(协议/网络地址/端口)只允许使用一次”...

大家好,请教一个问题。我现在再写一个cs架构的系统。具体情况是服务器有一个线程监听Socket,一个线程发送。

监听的线程接收到消息后不会回复,只是把消息存到队列,代码如下:

while (_receiving)

{

byte[] buffer=new byte[1024*1024];

Socket client = _reciever.Accept();

client.Receive(buffer);

IPEndPoint clientEndPoint = (IPEndPoint)client.RemoteEndPoint;

string senderIP = clientEndPoint.Address.ToString();

int senderPort = clientEndPoint.Port;

this.DLGMSGRecieved(buffer);    //委托,将buffer添加到队列

client.Shutdown(SocketShutdown.Both);

client.Close();

client.Dispose();

}

现在的问题是,我用一个客户端发送消息至该socket服务器,第一次发送没问题,可再次发送会出现:通常每个套接字地址(协议/网络地址/端口)只允许使用一次。191.1.7.108:55332的错误(55332是服务器socket的端口号)。

客户端发送代码:

int p=0;

do

{

Random r = new Random(5000);

p = r.Next(65535);

} while (!PortIsAvailable(p));//端口号是否被占用

IPAddress srcIP = IPAddress.Parse(SourceIP) ;

IPEndPoint srcIPEndPoint = new IPEndPoint(srcIP, p);

IPAddress trgIP = IPAddress.Parse(TargetIP);

IPEndPoint trgIPEndPoint = new IPEndPoint(trgIP, TargetPort);

Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

socket.Blocking = true; //设置阻塞

socket.Bind(srcIPEndPoint);

socket.Connect(trgIPEndPoint);

int sentCount = socket.Send(ByteMessage);

socket.Disconnect(false);

socket.Shutdown(SocketShutdown.Both); //关闭读写

socket.Close();

if (sentCount != ByteMessage.Length)

{

throw (new Exception("消息未发送成功"));

}

报错行是:socket.Connect(trgIPEndPoint);

请问各位大神这个如何解决?

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
©️2021 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值