编写一个能够持续聊天的服务器和客户端,当客户端发送“拜拜”的时候,断开服务器和客户端的连接,发送一个网址,能够下载网址内容,当内容是图片是,能够将图片保存到本地
server.py
import socket
import requests
from requests import request
import re
if __name__ == '__main__':
server=socket.socket()
server.bind(('10.7.181.70',8080))
server.listen(512)
#accept()会阻塞线程,当有客户端连接时,开始执行
while True:
conversation,address=server.accept()
while True:
message=input('我:')
#给客户端发送消息
#字符串转换成二进制
conversation.send(message.encode())
#接收客户端的信息
message_re=conversation.recv(1024).decode(encoding='utf-8')
#如果是拜拜
if message_re=='拜拜':
conversation.close()
break
#判断是否是网站
elif re.fullmatch(r'http://(\w\.){2}(\w+)/[\w?=&%@/\.]+ ',message_re):
print('是网站')
match=re.search(r'\.png|\.jpg|\.gif|\.jpeg|',message_re)
#如果是图片
if match:
#返回的是服务器的响应
response=requests.request('GET',message_re)
#获取服务器返回的响应头
print(response.headers)
#获取响应体的二进制
content=response.content
with open('./image'+match.group(),'wb')as f:
f.write(content)
else:
response=requests.request('GET',message_re)
txt=response.text
with open('./text','a',encoding='utf-8')as f:
f.write(txt)
else:
print(message_re)
client.py
import socket
if __name__ == '__main__':
client = socket.socket()
client.connect(('10.7.181.117', 8050))
while True:
# 接收服务器返回的信息
re_message = client.recv(1024).decode(encoding='utf-8')
print(re_message)
# 发送消息
message = input('>>>')
# message = '好吧abc'
client.send(message.encode())
网友评论