问题描述
usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Net;usingSystem.Net.Sockets;usingSystem.Text;usingSystem.Threading;usingSystem.Threading.Tasks;usingSystem.Windows.Forms;namespacedemoconnect{publicpartialclassForm1:Form{publicForm1(){InitializeComponent();}privatevoidForm1_Load(objectsender,EventArgse){//创建监听的SocketSocketsocketWatch=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);IPAddressip=IPAddress.Any;IPEndPointpoint=newIPEndPoint(ip,5000);//绑定监听socketWatch.Bind(point);socketWatch.Listen(10);//开启一个线程不断监听客户端连接以及发来的消息Threadth=newThread(Cnt);th.IsBackground=true;th.Start(socketWatch);}//客户端连接SocketsocketSend;voidCnt(objecto){SocketsocketWatch=oasSocket;while(true){try{socketSend=socketWatch.Accept();//开启线程不断接收客户端发来的消息Threadth=newThread(GetMsg);th.IsBackground=true;th.Start(socketSend);}catch{}}}//新建一个Socket来存放客户端2的ip和端口Socketsend2=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);//接收客户端消息voidGetMsg(objecto){Socketsend=oasSocket;while(true){try{//客户端连接成功后,服务器应该接受客户端发来的消息byte[]buffer=newbyte[1024*1024*2];//实际接受到的有效字节数intr=socketSend.Receive(buffer);IPAddressip=IPAddress.Parse("192.168.1.103");IPEndPointpoint=newIPEndPoint(ip,5000);send2.Bind(point);//发送方与接收方的握手连接??//------------------------send2.Send(buffer);}catch{}}}}}send2绑定的那个客户2的IP和端口号后,没有与服务器握手,然后就发送消息会报这个错。所以缺少一个握手的环节,但是这里写connect服务器是不行的所以就不知道该放在哪里
解决方案
解决方案二:
不需要在服务器端创建send2当客户端2连接服务器时,socketWatch.Accept()会再分配一个socket给客户端2的你要定义一个list<socket>,将Cnt方法里建立的socketadd到list中,然后对list中的socket线程判断Available
解决方案三:
调试下,看看是不是没有收到消息