网络编程套接字
1. 端口号
端口号(port)是传输层协议的内容:
- 端口号是一个32位的整数;
- 端口号用来标识一个进程, 告诉操作系统, 当前的这个数据要交给哪一个进程来处理;
- IP地址 + 端口号能够标识网络上的某一台主机的某一个进程;
- 一个端口号只能被一个进程占用
注意:进程和端口号的关系
一个进程可以绑定多个端口号; 但是一个端口号不能被多个进程绑定
2. TCP/UDP
TCP(Transmission Control Protocol 传输控制协议)
UDP(User Datagram Protocol 用户数据报协议)
相同 | 不同 | |
---|---|---|
TCP | 传输层协议 | 可靠的、有连接、面向字节流 |
UDP | 传输层协议 | 不可靠的、无连接、面向数据报 |
2. 注意
-
TCP面向流的:不保证是原封不动的接收到的
eg:服务器发送:“Hello word”
客户端吧收到的可能是 :“H” “ello” " " “word” -
UDP是面向报文的:原封不动的接收
eg:发送端发送的是"Hello word"
接受端收到的一定是"Hello word" -
TCP面向连接 ——有connect连接
-
UDP无连接—— 没有调用connect
-
TCP可靠的
eg:发送了对方一定能收到;如果收不到,我也知道出问题了 -
UDP不可靠的
eg: -
severSocket().accept() //已经获取了一条链接
3. Socket
3.1 Socket常见API
DatagramSocket类:
方法签名 | 解释 |
---|---|
DatagramSocket(int port,InetAddress laddr) | 创建一个数据报套接字,绑定到指定的本地地址 |
DatagramSocket(SocketAddress bindaddr) | 创建一个数据报套接字,绑定到指定的本地套接字地址 |
void bind(SocketAddress addr) | 将此DatagramSocket绑定到特定的地址和端口 |
void connect(InetAddress address,int port) | 将套接字连接到此套接字的远程地址 |
void receive(DatagramPacket p) | 从此套接字接收数据报包 |
void close() | 关闭此数据报套接字 |
void send(DatagramPacket p) | 从此套接字发送数据报包 |
4.
4.1如何写UDP服务器?
1创建一个 UDP socket
DatagramSocket udpServerSocket=new DatagramSocket(8090);
2 循环
2.1 等待对方发送 UDP 报文过来
udpServerSocket.receive(receivePacket);
2.2 回复对方一个 UDP 报文
udpServerSocket.send(sendPacket);
4.2
4.3如何写一个TCP服务器?
4.4线程处理流程
1 把输入流和输出流都转成合适的
正式员工数量
临时工+正式员工数量
空闲时间
队列