zoukankan      html  css  js  c++  java
  • socket通信

    socket通信的伪代码流程:

     

    socket简单的示例代码

    client端的代码:

     1 import socket
     2 
     3 client = socket.socket()
     4 client.connect(('localhost',3001))
     5 
     6 client.send(b'hhhh')
     7 data = client.recv(1024)
     8 print('recv:',data)
     9 
    10 client.close()
    1 客户端结果
    2 >>> recv: b'HHHH'

    server端的代码:

     1 import socket
     2 
     3 server = socket.socket()
     4 
     5 server.bind(('localhost',3001)) #绑定要监听端口
     6 server.listen()                 #监听
     7 
     8 print('开始等待数据....')
     9 
    10 #conn表示客户端连接到服务端生成的一个连接实例
    11 conn,addr = server.accept() #等待数据
    12 
    13 print(conn,addr)
    14 
    15 
    16 print('数据来了')
    17 data = conn.recv(1024)
    18 print('recv:',data)
    19 
    20 conn.send(data.upper())
    21 
    22 server.close()
    1 服务端结果
    2 >>> 开始等待数据....
    3 >>> <socket.socket fd=296, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 3001), raddr=('127.0.0.1', 54373)> ('127.0.0.1', 54373)
    4 >>> 数据来了
    5 >>> recv: b'hhhh'

     socket多用户连接:

    client端的代码:

     1 import socket
     2 import os
     3 
     4 client = socket.socket()
     5 client.connect(('localhost', 3001))
     6 while True:
     7     #让用户自己输入要发送的信息msg,因为涉及到中文,所已用encode和decode进行转换
     8     msg = input(">>>:").strip()
     9     if len(msg) == 0:
    10         continue
    11     client.send(msg.encode("utf-8"))
    12     data = client.recv(1024)
    13     print('recv:', data.decode())
    14 
    15 client.close()

    server端的代码:

     1 import socket
     2 import os
     3 
     4 server = socket.socket()  # 创建套接字
     5 server.bind(('localhost', 3001))  # 绑定要监听端口
     6 server.listen(1)  # 监听,数据代表允许多少个链接
     7 
     8 print('开始等待数据....')
     9 # conn表示客户端连接到服务端生成的一个连接实例
    10 # 先说第二个while,循环接收客户端数据,当客户端数据没有发送,服务端收到数据为空的时候跳出循环,这么做是因为这个程序如果想要一直接收客户端数据,就需要进行循环操作,但是如果收到数据为空,该循环就会进入一个死循环,所以需要判定条件,当客户端结束发送数据,然后结束连接;
    11 # 然后第一个while,因为这里考虑测试多人单线程连接server,如果不加while,当客户端数据没有发送,server会直接断开连接,不接收下个新用户的请求数据,所以将一个连接实例放在循环里,当一个用户断开连接,回到上层,然后再接收新用户的数据。
    12 while True:
    13     conn, addr = server.accept()  # 等待数据
    14     print(conn, addr)
    15     print('数据来了')
    16     while True:
    17         data = conn.recv(1024)
    18         print('recv:', data)
    19         if not data:
    20             print('The client did not respond')
    21             break
    22          conn.send(data.upper())
    23 
    24 server.close()

    socket简单的shell实现:

    client端的代码:

    import socket
    import os
    
    client = socket.socket()
    client.connect(('localhost', 3001))
    while True:
        #让用户自己输入要发送的信息msg,因为涉及到中文,所已用encode和decode进行转换
        msg = input(">>>:").strip()
        if len(msg) == 0:
            continue
        client.send(msg.encode("utf-8"))
        data = client.recv(1024)
        #print('recv:', data.decode())
        print(data.decode())
    
    client.close()

    server端的代码:

    import socket
    import os
    
    server = socket.socket()  # 创建套接字
    server.bind(('localhost', 3001))  # 绑定要监听端口
    server.listen(1)  # 监听,数据代表允许多少个链接
    
    print('开始等待数据....')
    while True:
        conn, addr = server.accept()  # 等待数据
        print(conn, addr)
        print('数据来了')
        while True:
            data = conn.recv(1024)
            print('recv:', data)
            if not data:
                print('The client did not respond')
                break
            res = os.popen(data.decode()).read()  #py3 里socket发送的只有bytes,os.popen又只能接受str,所以要decode一下
            conn.send(res.encode("utf-8"))
    
    server.close()


  • 相关阅读:
    MVC @Html.TextBox 添加属性和样式
    当项目中出现“未能找到与此解决方案关联的源代码管理提供程序。项目将视为不受源代码管理”
    MVC视图中读取ViewBag传递过来的HashTable表数据
    使用NPOI导入导出标准的Excel
    网站文件下载代码
    C# 刷新页面浏览次数(点击量)+1
    sed
    Shell变量的取用、删除、取代与替换
    non-member function cannot have cv-qualifier
    awk学习
  • 原文地址:https://www.cnblogs.com/jesse-gong/p/7905456.html
Copyright © 2011-2022 走看看