(1) TCP编程
① 客户端
1) 创建socket对象:
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
a. AF_INET:指定使用IPv4协议 AF_INET6:建立IPv6协议
b. SOCK_STREAM:使用面向流的TCP协议
2) 建立连接
s.connect((IP地址,端口号)) IP地址和端口号是一个元组
3) 发送数据
s.send(url)
4) 接受数据
s.recv(字节数)
5) 关闭连接
s.close()
② 服务器端
1) 创建socket对象
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
2) 建立绑定
s.blind((IP地址,端口号))
表示本机地址:127.0.0.1
表示所有网络地址:0.0.0.0
端口号小于1024的端口号必须有管理员权限
3) 开始监听
s.listen(5) 传入等待连接的最大数量
4) 接收客户端的连接
while True:
sock,addr=s.accept()
t=threading.Thread(target=函数名,args=(sock,addr))
t.start
accept()会等待并返回一个客户端的连接和IP地址
每个连接都必须创建新线程来处理,否则无法接受其他客户端的连接
(2) UDP编程(面向无连接的协议)
使用UDP协议时,不需要建立连接,只需要知道对方的IP地址和端口号,但是不一定能到达
① 服务器端
1) 绑定端口
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
s.blind((IP地址,端口号))
SOCK_DGRAM:指定了Socket类型为UDP
2) 接收数据
while True:
data,addr=s.recvfrom(字节数)
s.sendto(内容)
recvfrom()方法返回数据和客户端地址与端口
服务器接收到数据后,直接调用sendto()就可以把数据用UDP发给客户端
② 客户端
1) 创建socket
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
2) 发送数据
s.sendto(数据,(IP地址,端口号))
客户端创建了socket对象无需connect()
3) 接收数据
s.recv(字节数)
4) 关闭连接
s.close()