python 用自带库实现socket客户端和服务端的通信

1、服务端Server代码:

# -*- coding:utf-8 -*-
import time
import json
import socket

sock = socket.socket()
sock.bind(("127.0.0.1", 6789))  # 绑定ip地址和端口
sock.listen(8)                  # 侦听
print("socket 服务端 开始工作...")
print("等待客户端连接...")
conn, addr = sock.accept()  # 接受连接
print("客户端已经建立连接>>>")

while True:
    rcvData = conn.recv(64 * 1024)  # 接收数据
    reqJsonDict = json.loads(rcvData.decode('utf-8'))
    print("客户端请求数据:", reqJsonDict)

    dataDict = {
        "msg": "成功",
        "data": {
            "X": 100,
            "Y": "OK",
        },
        "code": 0
    }

    jsonString = json.dumps(dataDict)
    print("服务端返回数据:", jsonString)  
    conn.send(jsonString.encode('utf-8'))  # 返回数据
    time.sleep(5)

conn.close()
sock.close()

2、客户端Client代码:

# -*- coding:utf-8 -*-
import time
import socket
import json

if __name__ == '__main__':
    host = "127.0.0.1"            # 服务端ip地址
    port = 6789                   # 侦听端口

    sock = socket.socket()        # 创建socket
    sock.connect((host, port))    # 建立socket连接

    while True:
        dataDict = {
            "msg": "请求",
            "data": {
                "A": 1,
                "B": "String Information",
                "C": 10.55
            }
        }

        jsonString = json.dumps(dataDict)         # json字符串
        print("Socket客户端发送数据:", jsonString)  
        # 发送数据
        sock.send(jsonString.encode('utf-8'))
        # 接收数据
        rcvData = sock.recv(100 * 1024)
        retJsonDict = json.loads(rcvData.decode('utf-8'))
        print("Socket客户端接收数据:", retJsonDict)
        time.sleep(5)

    sock.close()

3、先启动服务端,再启动客户端

服务端控制台输出日志:

socket 服务端 开始工作...
等待客户端连接...
客户端已经建立连接>>>
客户端请求数据: {'msg': '请求', 'data': {'A': 1, 'B': 'String Information', 'C': 10.55}}
服务端返回数据: {"msg": "\u6210\u529f", "data": {"X": 100, "Y": "OK"}, "code": 0}

客户端控制台输出日志:

Socket客户端发送数据: {"msg": "\u8bf7\u6c42", "data": {"A": 1, "B": "String Information", "C": 10.55}}
Socket客户端接收数据: {'msg': '成功', 'data': {'X': 100, 'Y': 'OK'}, 'code': 0}

4、修改中文显示

"\u8bf7\u6c42"这是unicode编码数据,如果要完整显示中文
服务端修改代码如下:
原代码:

print("服务端返回数据:", jsonString) 

修改后代码:

print("服务端返回数据:", jsonString.encode("utf-8").decode('unicode-escape'))  # 

客户端修改代码如下:
原代码:

print("Socket客户端发送数据:", jsonString)  

修改后代码:

print("Socket客户端发送数据:", jsonString.encode("utf-8").decode('unicode-escape'))  #

5、控制台显示
服务端控制台输出:

socket 服务端 开始工作...
等待客户端连接...
客户端已经建立连接>>>
客户端请求数据: {'msg': '请求', 'data': {'A': 1, 'B': 'String Information', 'C': 10.55}}
服务端返回数据: {"msg": "成功", "data": {"X": 100, "Y": "OK"}, "code": 0}
客户端请求数据: {'msg': '请求', 'data': {'A': 1, 'B': 'String Information', 'C': 10.55}}
服务端返回数据: {"msg": "成功", "data": {"X": 100, "Y": "OK"}, "code": 0}

客户端控制台输出:

Socket客户端发送数据: {"msg": "请求", "data": {"A": 1, "B": "String Information", "C": 10.55}}
Socket客户端接收数据: {'msg': '成功', 'data': {'X': 100, 'Y': 'OK'}, 'code': 0}
Socket客户端发送数据: {"msg": "请求", "data": {"A": 1, "B": "String Information", "C": 10.55}}
Socket客户端接收数据: {'msg': '成功', 'data': {'X': 100, 'Y': 'OK'}, 'code': 0}

你可能感兴趣的:(Python,python,开发语言,json)