实现的功能:
写一个两个人的聊天系统,可以实现双向聊天功能。
如果发送的是普通的文字就直接打印,
如果发送的文字是’拜拜’就关闭连接,
如果是一个网络地址就获取数据(保存到文本文件中),
如果是图片地址就下载图片到本地
服务器端代码
import json
import socket
import re
from requests import request
def get_url(url):
#检测收到的是否为网址并进行处理
response = request('GET',url)
json1 = response.json()
with open('abc.json','w',encoding='utf-8') as f:
json.dump(json1,f)
def get_img():
#判断收到的是否为图片并且将图片保存到本地
image_data = bytes()
data = conversation.recv(1024)
while data:
image_data += data
data = conversation.recv(1024)
with open('aaa.png','wb') as f:
f.write(image_data)
conversation.close()
if __name__ == '__main__':
server = socket.socket()
re_url = r'https?://..*'
re_img = r'..*.'
server.bind(('10.7.181.61',8082))
server.listen(1000)
print('开始监听')
#保持服务器不关闭
while True:
conversation,addr = server.accept()
#让客户端和服务器一直处于连接的状态
while True:
#发送消息
message = input('>>>')
conversation.send(message.encode())
if message == '拜拜':
exit()
#接受消息
message_data = conversation.recv(1024)
text = message_data.decode(encoding = 'utf-8')
if text == '拜拜':
exit()
elif bool(re.findall(re_url,message_data.decode(encoding='utf-8'))):
#如果收到的消息是网址
print('接收到网址')
get_url(message_data.decode(encoding='utf-8'))
elif bool(re.findall(re_img,message)):
#如果收到的消息是图片
print('开始接收图片')
get_img()
print('接收完毕')
客户端代码
import socket
import re
def send_image(image):
#发送图片
with open(image,'rb') as f:
datas =f.read()
client.send(datas)
client.close()
if __name__ == '__main__':
client = socket.socket()
client.connect(('10.7.181.61',8082))
re_img = r'..*.png|..*.jpg'
while True:
#接受消息
data = client.recv(1024)
text = data.decode(encoding = 'utf-8')
if text == '拜拜':
break
print(text)
#发送消息
message = input('>>>')
client.send(message.encode())
if message == '拜拜':
#如果输入的是拜拜
break
if bool(re.findall(re_img,message)):
#如果输入的是图片
print('发送图片')
send_image(message)
client = socket.socket()
client.connect(('10.7.181.61', 8082))
实现功能
初始界面
输入语言
输入图片名称
输入网址
得到的json文件
输入拜拜 程序结束