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) #在绑定之前设置

posted @ 2019-01-25 23:27  heyeege  阅读(160)  评论(0编辑  收藏  举报