SOCKET
有两种类型:
流式Socket(STREAM):
是一种面向连接的Socket,针对于面向连接的TCP服务应用,安全,但是效率低;
数据报式Socket(DATAGRAM):
是一种无连接的Socket,对应于无连接的UDP服务应用.不安全(丢失,顺序混乱,在接收端要分析重排及要求重发),但效率高.
UDP 数据包套接字的数据发送方式:
将数据折成很多份,然后都发到对方去,但是对方接受到的数据的顺序不一样是发送的顺序,发送出去的数据不一定能顺利到达(丢包),接收方验证所有包齐全后,要重新按照包的组合顺序组建数据
TCP流式套接字的数据发送方式:
在发送数据前,会先经历TCP协议的三次握手协议来建立连接,然后通过连接有次序的将数据发送给接收方,接收方拿到数据后发告诉发送方,数据接收完毕.如果发送超时,那么发送方会再次发送数据.但是.因为连接一直在发送期间保持,所以比较占用资源
Socket一般应用模式 - 服务器端和客户端
Socket的通讯过程:
服务器端:
1.申请一个socket
//创建一个监听客户端请求的套接字
Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
2.绑定到一个IP地址和一个端口上
//创建IP对象
IPAddress address = IPAddress.Parse(txtIP.text);
//创建包含IP和Port的网络终结点对象
IPEndPoint endPoint = new IPEndPoint(address,int.Parse(txtPort.Text.Trim().toString());
//为监听套接字绑定端口
server.Bind(endPoint);
3.开启侦听,等待接授连接
//开始监听,并设置监听队列的最大长度 10
server.Listen(10);
//接受客户端连接请求,并创建一个通信套接字,会阻断线程
Socket sokMsg = server.Accept();
客户端:
1.申请一个socket
Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Strem, ProtocolType.Tcp);
2.连接服务器(指明IP地址和端口号)
clinet.Connect(endpoint);