使用python发送文本与上传到服务器图片
符合C/S架构,并用socket模块
发送信息
server端
import socket
#设置服务端对象并绑定端口
server1 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server1.bind(('127.0.0.1', 8080))
server1.listen(5)
while True:
conn,adr = server1.accept()
print(f'链接成功,地址为{adr}')
conn.sendall('欢迎使用客服系统'.encode())
while True:
data = conn.recv(1024)
if not data:
break
conn.sendall('你说什么没听清'.encode())
result = conn.recv(1024)
print(f'回复内容为{result.decode()}')
print('断开链接')
conn.close()
server1.close()
client
import socket
#对象化并链接服务端
client1 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client1.connect(('127.0.0.1', 8080))
#接收欢迎
content = client1.recv(1024)
print(content.decode())
while True:
#发送问题
user_input = input('请输入咨询内容')
if user_input.upper() == 'Q':
break
client1.send(user_input.encode())
#接受回答
rely = client1.recv(1024)
print(rely.decode())
client1.close()
c链接大循环s s发送c接收欢迎标语
c接收反馈问题并发送到s的小循环接收中
s循环中发送解决方法到c的循环收到中
c在一次Q中止循环,会执行循环外的c close并发送空值到s的接收并中止循环
发送文件
server
import socket
from datetime import datetime
#接收图片
#对象化
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('127.0.0.1', 9999))
server.listen(5)
# 接收对象
conn, addr = server.accept()
#接收照片
while True:
##发送标语
conn.sendall('欢迎使用照片发送'.encode())
#接收文件大小
pic_size = int(conn.recv(1024).decode())
#打开照片对象
time_str = datetime.now().strftime('%Y-%m-%d-%H-%M-%S')
pic = open(time_str + '.jpg', 'wb')
#开始接收图片
# 已存数据
has_save_data = 0
while True:
chunk = conn.recv(10240)
pic.write(chunk)
pic.flush()
has_save_data += len(chunk)
if has_save_data >= pic_size:
break
client
import socket
import os
#发送图片
#对象实例化
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 配对
client.connect(('127.0.0.1', 9999))
#发送图片
while True:
# 接收标语
data_title = client.recv(1024)
#展示标语
print(data_title.decode())
user_input = input('请输入照片的路径: ').strip()
if user_input.upper() == 'Q':
break
#打开图片
pic = open(user_input, 'rb')
#发送照片大小
pic_size = os.stat(pic.name).st_size
client.sendall(str(int(pic_size)).encode())
has_save_data = 0
#开始发送图片
while True:
data = pic.read(10240)
client.sendall(data)
has_save_data += len(data)
if has_save_data == pic_size:
break