zoukankan      html  css  js  c++  java
  • Socket实例

    一、socket处理单个连接

    recv方法不是可以随便接收多大的数据都可以。官方建议是8KB,  即conn.recv(8192)

    import socket
    
    client = socket.socket()
    '''
    等价于client = socket.socket(family=socket.AF_INET, type=socket.SOCKET_STREAM)
    '''
    client.connect(('localhost', 6969))
    client.send(b"hello, server")
    
    data = client.recv(1024)
    print('收到服务器返回数据:', data)
    
    client.close()
    
    #######################################
    #
    # 收到服务器返回数据: b'HELLO, SERVER'
    #
    #######################################
    客户端代码
    import socket
    
    server = socket.socket()
    server.bind(("localhost", 6969))
    server.listen()    # 开始监听
    
    one_person, one_address = server.accept()
    data = one_person.recv(1024)
    print('收到客户端数据:', data)
    one_person.send(data.upper())
    
    server.close()
    
    #######################################
    #
    # 收到客户端数据: b'hello, server'
    #
    #######################################
    服务器端代码

    区别:客户端和服务器连接一通电话,来回通话,如果客户端断开 Windows里服务器端也断开“远程主机关闭了一个现有连接”  Linux里服务器会进入死循环,不停接收到空字符

    注意:不能send空字符。如果send空字符服务器端会卡住,因为此时服务器端还在等待接收数据。 

    二、socket处理单个连接,端口后可以用别的连接启动,客户端输入exit退出

    import socket
    
    client = socket.socket()
    client.connect(('127.0.0.1', 6969))
    while True:
        data = input(">>").strip()
        client.send(data.encode('utf-8'))
        if data.lower() == 'exit':
            break
        print(client.recv(1024).decode("utf-8"))
    
    client.close()
    客户端代码
    import socket
    
    server = socket.socket()
    server.bind(('0.0.0.0', 6969))
    server.listen()
    
    ##############################
    while True:
        first_client, first_address = server.accept()
        while True:
            data = first_client.recv(1024)
            print(first_address, data)
            if data.decode("utf-8").lower() == 'exit':
                print("client is lost..")
                break
            first_client.send(data.upper())
    ##############################
    服务器端代码
  • 相关阅读:
    doT js模板入门
    @SuppressWarnings忽略警告
    SQL注入
    【转】Oracle 执行动态语句
    连接数据库——模拟ATM机查、存、取、开户功能
    Oracle 函数中动态执行语句
    PowerDesigner建表
    数据库表设计—水电费缴费系统
    GUID全局唯一标识符相关知识了解
    Oracle数据库建表+添加数据练习
  • 原文地址:https://www.cnblogs.com/staff/p/9521273.html
Copyright © 2011-2022 走看看