写一个两个人的聊天系统,可以实现双向聊天功能。
如果发送的是普通的文字就直接打印,如果发送的文字是’拜拜’就关闭连接,
如果是一个网络地址就获取数据(保存到文本文件中),如果是图片地址就下载图片到本地
服务器端
import socket
from requests import request
import re
if __name__ == '__main__':
# 1.创建服务器
server = socket.socket()
# 2.绑定ip和端口
server.bind(('10.7.181.81', 8080))
# 3.监听
server.listen(50)
while True:
conversation, addr = server.accept()
while True:
# 4.接收数据
data = conversation.recv(1024)
data = data.decode(encoding='utf-8')
# 如果输入图片地址就下载图片到本地
str1 = r'\.\/.+\.(jpg|png|bmp|jpeg)'
if re.fullmatch(str1, data):
# 接收完地址后保存并打印
with open(data, 'rb') as f:
content = f.read()
print('图片下载成功!')
# 获取完数据后存储到本地
with open('./ccc.png', 'wb') as f:
f.write(content)
# 输入拜拜,结束对话
elif data == '拜拜':
print(data)
conversation.close()
break
# 字符串
else:
str1 = r'(https?|ftp|file)://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]'
# 如果是网络地址就获取数据
if re.fullmatch(str1, data):
response = request('GET', data)
text = response.text
with open('./text.txt', 'w', encoding='utf-8') as f:
f.write(text)
print('数据下载成功!')
else:
# 是普通的文字就直接打印
print(data)
# 5.发送数据
send_data = input('>>>')
if send_data == '拜拜':
conversation.send(send_data.encode())
conversation.close()
break
conversation.send(send_data.encode())
break
客户端
import socket
from requests import request
import re
if __name__ == '__main__':
# 1.创建客户端
client = socket.socket()
# 2.连接服务器
client.connect(('10.7.181.81', 8080))
while True:
# 3.发送数据
send_data = input('>>>')
if send_data == '拜拜':
client.send(send_data.encode())
client.close()
break
client.send(send_data.encode())
# 4.接收数据
data = client.recv(1024)
data = data.decode(encoding='utf-8')
# 如果输入图片地址就下载图片到本地
str1 = r'\.\/.+\.(jpg|png|bmp|jpeg)'
if re.fullmatch(str1, data):
# 接收完地址后保存并打印
with open(data, 'rb') as f:
content = f.read()
print('图片下载成功!')
# 获取完数据后存储到本地
with open('./ccc.png', 'wb') as f:
f.write(content)
# 输入拜拜,结束对话
elif data == '拜拜':
print(data)
client.close()
break
# 字符串
else:
str1 = r'(https?|ftp|file)://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]'
# 如果是网络地址就获取数据
if re.fullmatch(str1, data):
response = request('GET', data)
text = response.text
with open('./text.txt', 'w', encoding='utf-8') as f:
f.write(text)
print('数据下载成功!')
else:
# 是普通的文字就直接打印
print(data)