xxx.xxx.xxx.xxx
0-255
端口:65536个
计算机内不同应用使用网络的区分
知名端口:0-1023
80 HTTP
21 FTP
动态端口:
对某个使用网络的程序动态的分配端口
使用网络时要申请端口
socket套接字:
创建
import socket
socket.socket(AddressFamily, Type)
AddressFamily:
AF_INET 网络通信
AF_UNIX 电脑内部通信
Type:
SOCK_STREAM 流式套接字(TCP)
SOCK_DGRAM数据报套接字(UDP)
UDP:
发送
sendto(内容, ip+port(元组表示))
内容不能用字符串 要加.encode(“utf-8”)
接收:
socket.bind((IP, 端口))
程序绑定端口
IP不填表示本机任意一个IP
socket.recvfrom(一次接收最大字节)
接收
返回值返回接收数据报(接收到的数据, (发送方IP,发送端口))
接收到的数据要解码用decode(“gbk”)
TCP机制:
面向连接(三次握手)
有序传输
重发丢失
舍弃重复
无差错数据传输
阻塞/ 流量控制
TCP 客户端:
创建套接字
SOCK_STREAM
连接服务器
socket.connect(ip, port)
收发数据
socket.send(发送的信息)
关闭套接字
TCP 服务器:
创建套接字
bind绑定ip port
listen使套接字变为可被动连接
accept等待客户连接
返回值有两个 ,连接的IP
recv/send 收发数据(新的套接字操作收发)
PS:
收到的只有文本与UDP不同
当客户端套接字下线后 服务器端会recv接触阻塞返回数据长度为零,可以以此判断客户端是否下线