Python 网络通信
Python 网络通信
UDP 网络通信
UDP 没有严格的服务端 和 客户端的区别 不管对方是否能接收 都会发送
发送
import socket
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
# 第一个参数 是发生的数据 第二个参数是 地址 和 端口号 是一个元组
info = input('发送的消息')
s.sendto(info.encode('utf8'),('192.168.8.34',9000))
s.close()
接收
recvfrom() 是阻塞方法所以只能单个发送
import socket
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
s.bind(('192.168.8.34',9000)) # 绑定指定的端口 和 ip地址
date = s.recvfrom(1024) # 阻塞接收
print(date)
s.close()
TCP 网络通信
TCP 是区分客户端和服务端的 必须要确定对方能接收 才会发送
客户端
import socket
# 基于tcp的socket连接
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# TCP 必须要和服务端建立连接才能 发送请求
s.connect(('192.168.8.34',9000))
s.send('hello python'.encode('utf8'))
s.close()
服务端
import socket
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 绑定地址
s.bind(('192.168.8.34',9000))
# 128 表示 最大请求数
s.listen(128) # 把socket 变成一个被动的监听器
one,two = s.accept() # 拆包
x = one.recv(1024) # 1024 表示 每一次获取的数据大小
print(x) # 返回 b'hello python' 返回的数据在第一个元组中
# 返回 一个元组 第0个数据是 客户端的 socket 连接 第一个是客户端的ip地址和端口号
# (<socket.socket fd=364,
# family=AddressFamily.AF_INET,
# type=SocketKind.SOCK_STREAM,
# proto=0,
# laddr=('192.168.8.34', 9000),
# raddr=('192.168.8.34', 1158)>,
# ('192.168.8.34', 1158))
例子 文件下载 TCP
客户端
import socket
# 基于tcp的socket连接
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# TCP 必须要和服务端建立连接才能 发送请求
s.connect(('192.168.8.34',9000))
name = input('输入你要下载的文件名')
s.send(name.encode('utf8'))
with open(name,'wb') as file:
while True:
f = s.recv(1024)
if not f:
break
file.write(f)
s.close()
服务端
import socket
import os
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind(('192.168.8.34',9000))
# 128 表示 最大请求数
s.listen(128) # 把socket 变成一个被动的监听器
cli_socket,cli_addr = s.accept() # 拆包
name = cli_socket.recv(128)
if os.path.exists(name):
with open(name,'rb') as file:
f = file.read(1024)
print(f)
cli_socket.send(f)
else:
print('没有该文件')

浙公网安备 33010602011771号