day19-网络通信-作业

2018-10-24  本文已影响0人  _桑心人

1.第一题

写一个客户端和服务器的套接字:
客户端连接服务器后展示界面:

===========================
1. 需要图片
2. 需要文字
3. 通知结束
==========================
请选择:


如果客户端选1,服务器给客户端发送一张图片,客户端保存图片到本地
如果客户端选2, 服务器输入一段文字发送给客户端, 客户端将文字保存在一个message.txt文件中
如果客户端选3,通知服务器关闭连接,并且客户端结束

服务器代码

import socket
# 创建服务器套接字对象
server = socket.socket()
# 绑定ip和端口号
server.bind(('10.7.156.96', 8082))
# 监听请求
server.listen()


while True:
    # 接受客服端请求(电话响了,接电话)
    """
    有客服端在请求这个服务器的时候才会往下执行并返回会话和客服端的地址
    """
    conversation, addr = server.accept()
    data = conversation.recv(1024).decode('utf-8')
    if data == '1':
        # 下载图片
        with open('new1.jpg', 'rb') as fp:
            content = fp.read()
            conversation.send(content)
            # 关闭连接
            conversation.close()

    elif data == '2':
        message = input('输入一段文字:')
        # message = bytes(message, encoding='utf-8')
        message_data = message.encode('utf-8')
        conversation.send(message_data)
    else:
        conversation.close()

客服端代码

while True:
   # 创建客服端套接字对象
    clint = socket.socket()
    # 连接服务器
    clint.connect(('10.7.156.96', 8082))
    print('=============')
    print('1.  需要图片')
    print('2.  需要文字')
    print('3.  通知结束')
    print('=============')
    n = input('请选择:')
    if n == '1':
        clint.send(n.encode('utf-8'))
        data = bytes()  # 创建一个空的二进制数据
        message_re = clint.recv(1024)
        while message_re:
            # 接受服务器返回的数据
            print('接收数据')
            data += message_re
            message_re = clint.recv(1024)
            print(message_re)
        with open('new2.jpg', 'wb') as fp:
            fp.write(data)
        print('接收完成')
        clint.close()
    elif n == '2':
        clint.send(n.encode('utf-8'))
        # 接受服务器返回的数据
        re_data = clint.recv(1024)
        print(re_data.decode('utf-8'))
        with open('text.txt', 'wb') as fp:
            fp.write(re_data)
        print('存储成功')
        clint.close()
    else:
        break

2.第二题

第二题:
请求接口:https://www.apiopen.top/satinApi?type=1&page=1  获取网络数据。
将内容中所有的name和text对应的值取出,并且保存到一个json文件中,保存的格式:

[{“name”:”张三”, “text”:”哈哈,让我们一起自由的飞翔”},
{“name”:”喒你家玻璃”, “text”:”截图暂停,截到的将会是对你爱情的预言三词!”}]

代码如下

import requests
import json

url = 'https://www.apiopen.top/satinApi?type=1&page=1'

response = requests.get(url)

data_json = response.json()
print(data_json)
js = []
name = []
text = []
for key, value in data_json.items():
    print(key)
    if key == 'name' or key == 'text':
        js.append({key: value})
    elif key == 'data':
        for value1 in value:
            for key1, value2 in value1.items():
                if key1 == 'name' or key1 == 'text':
                    js.append({key1: value2})
print(js)

with open('json.json', 'w', encoding='utf-8') as fp:
    json.dump(js, fp)
print('写入文件成功!')

运行结果可自行测试

上一篇 下一篇

猜你喜欢

热点阅读