重复使用同一个套接字绑定的端口IP组合了。往往提示这个是你实例化的时候出的问题,看你函数定义的名字,大概你是想封装起来调用,每次收到新连接然后直接调用TCPlisten()得到连接然后回调处理吧。如果是我说的这种情况,那么你函数不能这么写,因为new就代表你每次调用这个函数就对这个全局对象进行了一次实例化操作,而且还是针对同一个套接字IP端口组合进行,就会报错,因为你一开始监听但没有结束并释放它的话,这个是一直保持占用的。如果想直接每次监听就直接用TCPlisten(),那么你需要把listener的实例化从这个函数中提取出来,单独做初始化对象处理。更何况你指的是多客户端。
专注于为中小企业提供成都网站建设、做网站服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业阳东免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了上千余家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
发送接收的过程都放在Try...Catch里面,一旦连接中断,就会出错,此时可以关闭现有连接,重新连服务端
DatagramSocket用于接收和发送UDP的Socket实例。该类有3个构造函数:DatagramSocket():通常用于客户端编程,它并没有特定监听的端口,仅仅使用一个临时的。程序会让操作系统分配一个可用的端口。DatagramSocket(int port):创建实例,并固定监听Port端口的报文。通常用于服务端。
接收到客户端数据,处理完毕........
//返回信息给客户端
string sendStr = "ok!Client send message successful!";
byte[] bs = Encoding.ASCII.GetBytes(sendStr);
client.Send(bs, bs.Length, 0);
//关闭套接字
client.Close();
.............客户端发送完数据等待服务端返回处理结果.............
/**/
///接受从服务器返回的信息
string recvStr = "";
byte[] recvBytes = new byte[1024];
int bytes;
bytes = client.Receive(recvBytes, recvBytes.Length, 0);//从服务器端接受返回信息
recvStr += Encoding.ASCII.GetString(recvBytes, 0, bytes);
label15.Text = DateTime.Now.ToString() + ":" + recvStr;//显示服务器返回信息
///一定记着用完socket后要关闭
//关闭套接字
client.Close();