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

    客户端运行结果

    服务器运行结果

  • 相关阅读:
    用鼠标滚轮做事件
    0927 匿名函数,隐藏显示层
    好友选中
    bzoj:1687;poj 2434:[Usaco2005 Open]Navigating the City 城市交通
    bzoj:1659: [Usaco2006 Mar]Lights Out 关灯
    bzoj:3392: [Usaco2005 Feb]Part Acquisition 交易
    bzoj:1723: [Usaco2009 Feb]The Leprechaun 寻宝
    poj 2434;bzoj 1686 [Usaco2005 Open]Waves 波纹
    bzoj:3397 [Usaco2009 Feb]Surround the Islands 环岛篱笆
    bzoj:3400 [Usaco2009 Mar]Cow Frisbee Team 奶牛沙盘队
  • 原文地址:https://www.cnblogs.com/gxfaxe/p/15202077.html
Copyright © 2011-2022 走看看