Socket的英文原义是“孔”或“插座”。作为进程通信机制,取后一种意思。通常也称作“套接字”,用于描述IP地址和端口,
一个通信链的句柄。(其实就是两个程序通信用的。)
socket非常类似于电话插座。以一个电话网为例。电话的通话双方相当于相互通信的两个程序,电话号码就是IP地址。任何用户在通话之前,首先要占有一部电话机,相当于申请一个socket;同时要知道对方的号码,相当于对方有一个固定的socket。然后向对方拨号呼叫,相当于发出连接请求。对方假如在场并空闲,拿起电话话筒,双方就可以正式通话,相当于连接成功。双方通话的过程,是一方向电话机发出信号何从对方电话机接收信号的过程,相当于向socket发送数据和从socket接收数据。通话结束后,一方挂起电话机相当于关闭socket,撤销连接。
二、Socket的两种类型
流式Socket(STREAM):是一种面向;连接的TCP服务应用,安全,但效率低;
数据报式Socket(DATAGRAM):是一种无连接的Socket,对应于无连接的UDP服务应用,不安全(丢失,顺序混乱,在接受端要分析重排及要求重发),但效率高。
三、Socket一般应用模式(服务端和客户端)
服务端welcoming socket 开始监听端口(负责监听客户端连接信息)
客户端client socket 连接服务端指定端口(负责接收和发送服务端消息)
服务端welcoming socket 监听到客户端连接,创建connection socket。(负责和客户端通信)
服务端的Socket(至少需要两个):
一个负责接收客户端连接请求(但不负责与客户端通信)
每成功接收到一个客户端的连接便在服务端产生一个对应的Socket:在接收到客户端连接时创建;为每个连接成功的客户端请求在服务端都创建一个对应的Socket(负责和客户端通信)
客户端的Socket:
客户端Socket:必须指定要连接的服务端地址和端口。通过创建一个Socket对象来初始化一个到服务端的TCP连接。
四、Socket的通讯过程
服务器端:申请一个socket;绑定到一个IP地址和一个端口上;开启侦听,等待接受连接。
客户端:申请一个socket;连接服务器(指定IP和端口号)
服务端接到连接请求后,产生一个新的Socket(端口大于1024)与客户端建立连接并进行通讯,原监听socket继续监听。
五、Socket的构造函数
如:mySocket=new Socket(AddressFamily .InterNetwork, SocketType .Stream,SocketType.Tcp);
连接通过构造函数完成。
public Socket(AddressFamily addressFamily,SocketType socketType ,SocketType protocolType)
AddressFamily指定Socket用来解析地址的寻址方案。例如,InterNetwork 指示当Socket使用一个IP版本地址连接。
SocketType 定义要打开的Socket类型。
Socket类使用SocketType 枚举向Windows Sockets API 通知所请求的协议。