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()
相关文章
相关标签/搜索