C# Socket通讯问题

[复制链接]
查看11 | 回复0 | 2021-2-25 10:19:46 | 显示全部楼层 |阅读模式
我写了一个服务端可以连接多个客户端,现在的问题是当多个客户端连接之后,每个客户端第一次通讯没问题但是第二次通讯的话只有第一个连接上的才能成功通讯,还有就是当我关闭服务器的按钮之后,并不能关闭连接,只能断开其中一个或者两个,还请各位大神指教指教!!
这是监听连接代码片段
privatevoidStartsocket()
{
try
{
IPAddressip=IPAddress.Any;
//当开始监听时候,在服务器创建一个负责IP地址跟端口号的Socket
socketWatch=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
IPEndPointpoint=newIPEndPoint(ip,9090);
//监听
socketWatch.Bind(point);
//连接数量为10个
socketWatch.Listen(10);
}
catch{throw;}
}
这是客户端连接处理片段
publicvoidListenClickConnect(objecto)
{
SocketsocketWatch=oasSocket;
//等待用户连接创建一个负责通信的Socket
while(true)
{
//最大连接数
intnumber=10;
if(disSocket.Count>number)
{
socketWatch.Close();
socketWatch.Dispose();
ShowMsg("连接数量已达到上限");
}
try
{
//关闭服务器时跳出循环
if(stop)
{
break;
}
//等到客户端新的连接
socketSend=socketWatch.Accept();
//将远程客户端IP地址存储到泛型集合中
disSocket.Add(socketSend.RemoteEndPoint.ToString(),socketSend);
Threadth=newThread(Receive);
th.IsBackground=true;
th.Start(socketSend);
ShowMsg(socketSend.RemoteEndPoint.ToString()+":"+"连接成功");
//timer.Start();
AddKJ();
}
catch{break;}
}
这是关闭服务器代码片段
boolstop=false;
privatevoidStop_Click(objectsender,RoutedEventArgse)
{
for(inti=0;i
接收客户端发来的信息片段
interro=0;
privatevoidReceive(objecto)
{
socketSend=oasSocket;
while(true)
{
try
{
//客户端连接成功后服务器接收发来消息
byte[]buffer=newbyte[1024*1024*2];
//实际接收有效字节数
intr=socketSend.Receive(buffer);
if(r==0)
{
erro+=1;
Erroe(erro);
break;
}
stringstr=Encoding.UTF8.GetString(buffer,0,r);
ShowMsg(str);
SendData(str);
}
catch
{
break;
}
}
}
这是运行界面





分 -->
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行