基本概念
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