day_17作业

写一个两个人的聊天系统,可以实现双向聊天功能。
如果发送的是普通的文字就直接打印,如果发送的文字是’拜拜’就关闭连接,
如果是一个网络地址就获取数据(保存到文本文件中),如果是图片地址就下载图片到本地

服务器端

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)

你可能感兴趣的:(day_17作业)