Socket通讯
TCP三次握手
1.客户端发送请求报文a,发送信号为i
2.服务端接收报文a,回应客户端发送确认信号i+1,重置发送信号j
3.客户端收到确认报文,再次发送确认信号j+1,重置发送信号k。连接建立成功。
简单的Socket例子
服务端
1.创建IPAddress和IPEndpoint
1
2
3
4
string host = "127.0.0.1"; //IPAddress.Any
int port = 8005;
IPAddress ip = IPAddress.Parse(host);
IPEndpoint ipe = new IPEndpoint(ip,port);
2.创建Socket,打开监听
1
2
3
4
5
6
7
8
//创建一个新的Socket,这里我们使用最常用的基于TCP的Stream Socket(流式套接字)
Socket socket = new Socket(AddressFamuly.InterNetwork,SocketType.Stream,ProtocolType.TCP);
//将该socket绑定到主机上面的某个端口
socket.Blind(ipe);
//启动监听,并且设置一个最大的队列长度(受理连接申请的最大值)
socket.listen(10);
3.接收报文
1
2
3
4
5
Socket serverSocket = socket.Accept();
byte[] recByte = new byte[1000];
int length = serverSocket.Receive(recByte,recByte.Length,0);
string resStr = Encoding.Unicode.GetString(recByte, 0, length);
Console.WriteLine(recStr);
4.发送报文
1
2
3
4
5
string sendStr = "Hello,clent";
byte[] sendByte = Encoding.Unicode.GetBytes(sendStr);
serverSocket.send(sendByte,sendByte.Length,0);
serverSocket.close();
socket.close();
客户端
1.和服务端第一步一样,创建IPAddress和IPEndpoint
……
2.创建clientSocket,连接serverSocket
1
2
3
4
5
//创建一个新的Socket,这里我们使用最常用的基于TCP的Stream Socket(流式套接字)
Socket clientSocket = new Socket(AddressFamuly.InterNetwork,SocketType.Stream,ProtocolType.TCP);
//将该socket连接到主机上面的某个端口
clientSocket.Connect(ipe);
3.发送报文
1
2
3
string sendStr = "Hello,server";
byte[] sendByte = Encoding.Unicode.GetBytes(sendStr);
clientSocket.send(sendByte,sendByte.Length,0);
4.接收报文
1
2
3
4
5
byte[] recByte = new byte[1000];
int length = clientSocket.Receive(recByte,recByte.Length,0);
string resStr = Encoding.Unicode.GetString(recByte, 0, length);
Console.WriteLine(recStr);
clientSocket.Close();