美文网首页
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作业-网络编程

    服务器 客户端 功能总结:能实现url和普通文本发送,url数据只能单次保存,多次发送会更新为最新发送内容。图片发...

  • DAY52

    网络编程作业终于搞定了@_@

  • 网络编程作业

    编写一个能够持续聊天的服务器和客户端,当客户端发送“拜拜”的时候,断开服务器和客户端的连接,发送一个网址,能够下载...

  • 网络编程作业

    1.### 写一个两个人的聊天系统,可以实现双向聊天功能。2.###如果发送的是普通的文字就直接打印,如果发送的文...

  • 网络编程作业

    写一个两个人的聊天系统,可以实现双向聊天功能。如果发送的是普通的文字就直接打印,如果发送的文字是’拜拜’就关闭连接...

  • s9python网络编程

    python之路——网络编程计算机网络ftp作业 网络编程 mac地址 arp协议:通过ip地址找mac地址 ip...

  • 2020年首次读书营作业合集4

    作业:Day16—Day20 作业日期:8/16—8/20

  • DAY60

    今天继续学习了僵尸进程,感觉网络编程的作业好难写

  • Android 网络编程 目录

    Android 网络编程 目录 Android 网络编程1 Http协议Android 网络编程2 Okhttp缓...

  • Linux网络编程篇之ICMP协议分析及ping程序实现

    Linux网络编程系列: Linux网络编程篇之Socket编程预备知识 Linux网络编程篇之TCP协议分析及聊...

网友评论

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

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