• 创建一个超级简单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()    # 关闭服务端套接字

    客户端运行结果

    服务器运行结果

  • 相关阅读:
    C# 数据操作系列
    C# 数据操作系列
    C# 基础知识系列- 17 小工具优化
    C# 基础知识系列- 17 实战篇 编写一个小工具(1)
    计算机网络知识概述
    微信公众号开发:消息处理
    微信公众号开发:服务器配置
    C#调用接口注意要点
    npm安装和Vue运行
    实战spring自定义属性(schema)
  • 原文地址:https://www.cnblogs.com/gxfaxe/p/15202077.html
Copyright © 2020-2023  润新知