python socket编程
Posted being-a-tester
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python socket编程相关的知识,希望对你有一定的参考价值。
udp协议:
- 发送时不会先建立连接,广播式的,可以一对一或一对多,传送数据并不安全,不能保证数据能够到达
- 使用udp协议的socket流程:
- 创建套接字
- 发送/接收数据
关闭套接字
import socket
#创建套接字
udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
#发送数据
udp_socket.sendto(‘要发送的数据‘.encode(),(‘127.0.0.1‘,7890))
#接收数据
recv_data = udp_socket.recvfrom(1024) #这里会返回一个元组,有两个数据,第一个是返回的消息,第二个是数据来源的ip和端口
data = recv_data[0].decode()
addr = recv_data[1]
print(data,addr)
#关闭套接字
udp_socket.close()
建立udp服务端时,需要绑定端口
import socket
#创建套接字
udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
#绑定端口
udp_socket.bind(‘‘,7890)
#接收数据
recv_data = udp_socket.recvfrom(1024)
data = recv_data[0].decode()
addr = recv_data[1]
print(data,addr)
#发送数据
udp_socket.sendto(‘要发送的数据‘.encode(),addr)
#关闭套接字
udp_socket.close()
##tcp协议:- 发送时必须先建立连接,是一对一的,所以数据传输一般是安全可靠的,有严格的客户端和服务端之分
- 客户端流程
- 创建套接字
- 与服务端建立连接
- 发送/接收数据
关闭连接
import socket
#创建套接字
client_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#与服务端连接
client_socket.connect((‘127.0.0.1‘,7890))
#发送数据
client_socket.send(‘这是发送的数据‘.encode())
#接收数据
recv_data = client_socket.recv(1024).decode()
print(recv_data)
#关闭套接字
client_socket.close()
- 服务端流程
- 创建套接字
- 绑定端口
- 开启监听
- 等待客户端连接
- 使用新的套接字与客户端连接
- 接收/发送数据
- 关闭新的连接,结束与该客户端的连接
关闭服务端连接
import socket
server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server_socket.bind((‘‘,7890))
server_socket.listen(10)
new_socket,client_addr = server_socket.accept() #这里返回一个新的socket对象和客户端的地址
recv_data = new_socket.recv(1024).decode()
print(recv_data)
new_socket.send(‘服务端发送的信息‘.encode())
new_socket.close()
server_socket.close()
为了连接多个客户端,可将等待连接及之后的代码放入循环内:
while True:
new_socket,client_addr = server_socket.accept() #这里返回一个新的socket对象和客户端的地址
recv_data = new_socket.recv(1024).decode()
print(recv_data)
new_socket.send(‘服务端发送的信息‘.encode())
new_socket.close()
当关闭socket后,连接所占用的资源不会立即释放,此时再开启服务端可能会出现端口被占用的情况,此时可以设置端口复用
server_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True) #在绑定之前设置
以上是关于python socket编程的主要内容,如果未能解决你的问题,请参考以下文章