创建一个超级简单TCP交互的服务器/客户端

创建一个超级简单TCP交互的服务器/客户端

创建客户端代码:

# cs = socket()       # 创建服务端套接字
# cs.connect()        # 尝试连接服务器
# comm_loop:          # 循环通信
#     cs.send() / c.recv()    # 对话(发送和接收)
# cs.close()          # 关闭服务端套接字

# 创建一个TCP客户端, 程序会提示用户输入要传给服务器的信息, 显示服务器返回的加了时间戳的结果
from socket import *


# HOST 和 PORT 表示服务器的主机名与端口号, 由于这里是在一台电脑运行, 所以 HOST 里放的是 localhost
# 如果服务器和客户端不在一台电脑上, HOST要做出相应的修改
# 端口号和服务器的设置完全相同
HOST = 'localhost'   # HOST 变量为空, 表示 bind() 函数可以绑定到所有的有效地址上
PORT = 21567    # 设置端口号
BUFSIZ = 1024   # 设置缓冲区大小为1K
ADDR = (HOST, PORT)

tcp_cli_sock = socket(AF_INET, SOCK_STREAM)
tcp_cli_sock.connect(ADDR)

while True:
    data = input('>>>>>>请输入内容: ')
    if not data:
        break

    tcp_cli_sock.send(data.encode())
    data = tcp_cli_sock.recv(BUFSIZ)
    if not data:
        break

    print(f'>>>>>客户端data: {data}')

tcp_cli_sock.close()

创建服务器代码:

from socket import *
from time import ctime


HOST = ''   # HOST 变量为空, 表示 bind() 函数可以绑定到所有的有效地址上
PORT = 21567    # 设置端口号
BUFSIZ = 1024   # 设置缓冲区大小为1K
ADDR = (HOST, PORT)

tcp_ser_sock = socket(AF_INET, SOCK_STREAM)     # 生成TCP服务套接字, 并绑定到服务器低智商
tcp_ser_sock.bind(ADDR)     # 把地址绑定套套接字上
tcp_ser_sock.listen(5)      # 监听连接, 表示最多允许多少个连接同时连进来,后面的连接会被拒绝掉

# 在服务器进入无限循环后,被动的等待连接的到来。当有连接时, 进入对话循环, 等待客户端发送数据。
# 如果消息为空, 表示客户端已退出,那就再去等待下一个客户端连接
while True:     # 无限循环
    print('等待创建......')
    tcp_cli_sock, addr = tcp_ser_sock.accept()      # 接收客户端连接
    print(f'......创建地址: {addr}')

    while True:     # 通信循环
        # rece() / send(): 对话的接收和发送
        data = tcp_cli_sock.recv(BUFSIZ)    # 对话接收
        if not data:
            break

        # send() 方法python2中入参类型是str, python3中是bytes, 使用encode()/decode()转化
        tcp_cli_sock.send(f'[{ctime()}] {data}'.encode())    # 对话发送
        # tcp_cli_sock.close()    # 关闭客户端套接字

# 这行不会被执行到, 用来提醒服务器退出时要调用close()
tcp_ser_sock.close()    # 关闭服务端套接字

客户端运行结果

服务器运行结果

原文地址:https://www.cnblogs.com/gxfaxe/p/15202077.html