美文网首页
Day16作业-网络编程

Day16作业-网络编程

作者: 周zau1 | 来源:发表于2018-08-07 22:23 被阅读143次

    服务器

    # 写一个两个人的聊天系统,可以实现双向聊天功能。
    # 如果发送的是普通的文字就直接打印,
    # 如果发送的文字是’拜拜’就关闭连接,
    # 如果是一个网络地址就获取数据(保存到文本文件中),
    # 如果是图片地址就下载图片到本地
    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数据只能单次保存,多次发送会更新为最新发送内容。图片发送无法接收,但也没报错,待解决。

    相关文章

      网友评论

          本文标题:Day16作业-网络编程

          本文链接:https://www.haomeiwen.com/subject/hqezvftx.html