socket简介
大部分网络应用都是用socket收发信息,例如聊天软件和浏览器。
使用方法
UDP
注意
- socket套接字为全双工
- 当socket接收数据时操作系统会对socket未读取的信息进行缓存
发送数据
- 创建套接字
- 使用套接字收数据
- 关闭套接字
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| import socket
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
s.bind(('',7890))
s.sendto(b"hello",("192.168.33.5",8080))
s.close()
|
接收数据
- 创建套接字
- 绑定自己信息
- 接收信息
- 关闭套接字
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| import socket
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
localaddr('',7788) s.bind(localaddr)
recv_data=s.recvfrom(1024)
recv_msg=recv_data[0]
print(recv_msg.decode("gbk")
s.close()
|
TCP
发送数据
- 创建套接字
- 链接服务器
- 发送数据
- 关闭套接字
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| import socket
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(('192.168.33.11',7890))
send_data=input("请输入要发送的数据:") s.send(send_data.encode("utf-8"))
s.close()
|
接收数据
- 创建套接字
- 绑定本地信息ip+端口
- 设置监听端口
- 等待客户端请求(accept会新建一个套接字)
- 接收客户端请求(使用新建的套接字接收请求)
- 响应客户端请求
- 关闭套接字
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| import socket
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind(('',7890))
s.listen(128)
new_client_socket,client_addr=s.accept()
recv_data=new_client_socket.recv(1024)
new_client_socket.send('hello'.encode('utf-8'))
s.close() new_client_socket.close()
|
下载器案例
注意
- with在新建文件时用,在对文件操作异常时不用抛异常,可以直接close()
- 在打开文件时要使用try抛异常
客户端
服务器a