client2:

    1. # encoding: utf8
    2. # 表示当前的文件默认使用 gbk 编码
    3. # 编码方式和解码方式要保持一致
    4. # 导入套接字模块 socket
    5. import socket
    6. import threading
    7. # 接收数据的线程
    8. def reciver_thread(client):
    9. while True:
    10. # 不断的打印接收到的数据
    11. print(client.recv(100).decode())
    12. # main 函数,为主模块时执行
    13. def main():
    14. # 1. 创建一个用于网络连接的套接字,使用 TCP 协议
    15. client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    16. # 2. 等待客户端的连接
    17. client.connect(("127.0.0.1", 0x1616))
    18. threading.Thread(target=reciver_thread, args=(client,)).start()
    19. # 3. 和客户端使用 send recv 进行交互
    20. while True:
    21. s = input(">> ")
    22. # 发送的数据必须是 bytes 类型的,需要编码
    23. client.send(s.encode())
    24. if __name__ == "__main__":
    25. main()

    server2:

    1. # 导入套接字模块 socket
    2. import socket
    3. import threading
    4. # 接收数据的线程
    5. def reciver_thread(client):
    6. while True:
    7. # 不断的打印接收到的数据
    8. print(client.recv(100).decode())
    9. # main 函数,为主模块时执行
    10. def main():
    11. # 1. 创建一个用于网络连接的套接字,使用 TCP 协议
    12. server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    13. # 2. 绑定套接字到执行的 ip 和 端口,必须是元组
    14. server.bind(("127.0.0.1", 0x1616))
    15. # 3. 设置套接字为监听状态,同一时刻能接收的数量
    16. server.listen(socket.SOMAXCONN)
    17. # 4. 等待客户端的连接
    18. client, address = server.accept()
    19. threading.Thread(target=reciver_thread, args=(client,)).start()
    20. # 5. 和客户端使用 send recv 进行交互
    21. while True:
    22. s = input(">> ")
    23. # 发送的数据必须是 bytes 类型的,需要编码
    24. client.send(s.encode())
    25. if __name__ == "__main__":
    26. main()