socket通信

基本概念

1.进程在应用层产生数据,下发到运输层。

2.运输层有两种处理方式:UDP和TCP。

3.socket是对运输层协议的封装,包括TCP和UDP。

4.socket像是一扇数据流入和流出的大门,地址是ip和port。

5.socket占用端口收发信息,进程占用socket即占用了该端口。

6.socket有两个重要属性:本地的ip和端口LocalEndPoint,与该socket通信的主机的ip和端口RemoteEndPoint。

C#与UDP,TCP

记住:Socket是平等的,只要为一个Socket绑定ip和端口,那么就可以使用它收发消息了。socket使用同一个本地端口发送和接收消息。

TCP和UDP的区别就是通信的socket,在TCP中两个属性都赋值了,在UDP中只赋值了本机LocalEndPoint,未对远程RemoteEndPoint赋值。

UDP通信

假设有两台主机A和B进行UDP通信。

1.在A,B各创建一个Socket,称为SocketA和SocketB。

2.Socket调用bind()绑定一个本地的指定的ip和端口。其实调用bind()也阔以,调用sendto()时若socket没有绑定ip和端口,会随机绑定一个。

3.Socket绑定了ip和端口就具备了收发消息的功能。

4.udp中的socket的远程ip端口属性是null,因为并未建立连接,所以发送时要指定要发送到的远程主机的ip和端口。

TCP通信

1.使用TCP进行通信的两台主机,至少有一方要主动发起连接。

2.我们称为主动发起连接的一方叫客户端,另一方叫服务器。

3.服务器创建一个Socket,绑定ip和端口。我们姑且称这个socket叫listener,那么此时listener已经具备收发消息的功能。

4.客户端也创建一个Socket,绑定一个具体的ip和端口或随机绑定。主动与服务器上名字叫listener的Socket“勾搭”,勾搭的消息内容不是实际要传输的数据。

5.服务器的listener收到消息后,也便知道了客户端的ip和端口。可以调用accept()创建一个新的socket,并用本地主机ip,port和客户端的ip,port填充新Socket的两个属性LocalEndPoint,RemoteEndPoint。

6.这样tcp中通信的一对一的Socket始终知道对话的是谁。

总结:

socket的方法:listen(), accept(), recv() ,recvFrom(), send(), sendto() . 其中accept()应该还会向客户端发送新创建的socket绑定的ip和端口是啥。

原文地址:https://www.cnblogs.com/liliuwei/p/11243766.html