服务器
# 写一个两个人的聊天系统,可以实现双向聊天功能。
# 如果发送的是普通的文字就直接打印,
# 如果发送的文字是’拜拜’就关闭连接,
# 如果是一个网络地址就获取数据(保存到文本文件中),
# 如果是图片地址就下载图片到本地
from requests import request
import socket
import re
# 1.创建服务器套接字对象
server = socket.socket()
# 2.绑定ip地址和端口
server.bind(('192.168.1.9', 8000))
# 3.监听
server.listen(50)
# 保证服务器处于一直启动的状态(循环体)
while True:
# 4.接收客户端的请求
conversation, addr = server.accept()
print(addr)
# 保证聊天过程中能多次收发信息
while True:
# 5.发送信息,说拜拜就退出
message = input('>>>')
conversation.send(message.encode())
if message == '拜拜':
break
# 6.接收信息,听见拜拜就退出
message_data = conversation.recv(1024)
try:
str1 = message_data.decode(encoding='utf-8')
# 匹配字符串看是否是链接
if re.findall(r'https://www.*', str1):
list1 = re.findall(r'https://www.*', str1)
str_url = list1[0].rstrip()
# 是链接就储存链接内容到本地,不是则正常接收消息
if str_url == str1.rstrip():
response = request('GET', str_url)
text = response.text
with open('./text_url', 'w', encoding='utf-8') as f:
f.write(text)
print('对方发送了一条链接!已保存链接内容在本地。')
# elif re.findall(r'.*\.jpg', str1):
# # 匹配字符串看是否是jpg格式图片
# if str1 == re.findall(r'.*\.jpg', str1):
# image_data = bytes()
# while message_data:
# image_data += message_data
# message_data = conversation.recv(1024)
# # 保存图片到本地
# with open('./pic.jpg', 'wb') as f:
# f.write(image_data)
else:
print(str1)
if str1 == '拜拜':
break
except:
image_data = bytes()
while message_data:
image_data += message_data
message_data = conversation.recv(1024)
# 保存图片到本地
with open('./pic.jpg', 'wb') as f:
f.write(image_data)
print('图片已保存。')
break
# 7.关闭连接
conversation.close()
客户端
# Jay
# 写一个两个人的聊天系统,可以实现双向聊天功能。
# 如果发送的是普通的文字就直接打印,
# 如果发送的文字是’拜拜’就关闭连接,
# 如果是一个网络地址就获取数据(保存到文本文件中),
# 如果是图片地址就下载图片到本地
from requests import request
import socket
import re
# 1.创建套接字对象
client = socket.socket()
# 2.连接服务器
client.connect(('192.168.1.9', 8000))
# 使聊天窗口一直存在
while True:
# 3.接收消息,听见拜拜就退出
data = client.recv(1024)
# 将接收到的消息转换成字符串
str1 = data.decode(encoding='utf-8')
# 匹配字符串看是否是链接
if re.findall(r'https://www.*', str1):
list1 = re.findall(r'https://www.*', str1)
str_url = list1[0].rstrip()
# 是链接就储存链接内容到本地,不是则正常接收消息
if str_url == str1.rstrip():
response = request('GET', str_url)
text = response.text
with open('./text_url', 'w', encoding='utf-8') as f:
f.write(text)
print('对方发送了一条链接!已保存链接内容在本地。')
else:
print(str1)
if str1 == '拜拜':
break
# 4.发送消息,说拜拜就退出
message = input('>>>')
# 判断是否是jpg格式图片,是的话需要先转换为二进制数据发送
if re.findall(r'.*\.jpg', message):
with open(message, 'rb') as f:
data = f.read()
client.send(data)
else:
client.send(message.encode(encoding='utf-8'))
if message == '拜拜':
break
# 关闭连接
client.close()
功能总结:能实现url和普通文本发送,url数据只能单次保存,多次发送会更新为最新发送内容。图片发送无法接收,但也没报错,待解决。
网友评论