Python篇--socket

 

客户端向服务端获取数据实例:

# coding: utf-8
import time

import socket
from struct         import *

def connect(host, port):

    # create socket
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)

    s.settimeout(5)

    s.connect((host, port))

    return s

def send(host, byte):
    s = connect(host, 7777)   # 7777 端口号
    s.sendall(byte)
    return s

def recv(host, byte):
    s = send(host, byte)

    data = s.recv(264)

    return data

def unpackdata(host, byte):
    data = recv(host, byte)

    tup = unpack('ii256s', data)

    return tup

if __name__ == '__main__':

    host  = '172.30.100.40'
    param = b'uname -a'
    sendparam = param + b'\0' * (256 - len(param))
    byte  = pack('ii256s', 0, 0, sendparam)   # 第二个参数是用例编号

    data = unpackdata(host, byte)

    print('packdata = ', data)
code

服务器返回数据:

packdata =  (0, 0, b'Linux localhos****(此处删除了部分字符) CST 2022 aarch64\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x002022-05-07 15:38:19.686194\x00\x00\x00\x00\x00\x00')

 

 

以下是课件内容

服务端代码:


# coding:utf-8
# === TCP 服务端程序 server.py ===

from socket import *

# 主机地址为127.0.0.1,表示绑定主机所有网络接口ip地址
# 等待客户端来连接
IP = '127.0.0.1'
PORT = 50000
#定义一次从socket缓冲区最多读入512个字节数据
BUFLEN = 512

# 实例化一个socket对象
# 参数AF_INET:表示该socket网络层使用IP协议
# 参数SOCK_STREAM:表示该socket传输层使用tcp协议
listenSocket = socket(AF_INET, SOCK_STREAM)

# socket绑定地址和端口
listenSocket.bind((IP, PORT))

# 使socket处于监听状态,等待客户端的连接请求
# 参数5表示 最多接受多少个等待连接的客户端
listenSocket.listen(5)
print(f'服务端启动成功,在{PORT}端口等待客户端连接...')

dataSocket, addr = listenSocket.accept()
print('接受一个客户端连接: ',addr)

while True:
# 尝试读取对方发送的消息
# BUFLEN 指定指定从接收缓冲里最多读取多少字节
recved = dataSocket.recv(BUFLEN)

# 如果返回空bytes,表示对方关闭了连接
# 退出循环,结束消息收发
if not recved:
break

# 读取的字节数据是bytes类型,需要解码为字符串
info = recved.decode() # 编码解码需要根据实际情况,如果是音频视频,需要另外处理
print(f'收到对方信息: {info}')

# 发送的数据类型必须是bytes,所以要编码
dataSocket.send(f'服务端接收到了信息{info}'.encode())


dataSocket.close()
listenSocket.close()
 

 客户端代码:

# --- coding:utf-8----
# === TCP 服务端程序 client.py ===
from socket import *

IP = '127.0.0.1'
SERVER_PORT = 50000
BUFLEN = 512


dataSocket = socket(AF_INET, SOCK_STREAM)

dataSocket.connect((IP, SERVER_PORT))

while True:
    # 从终端读入用户输入的字符串
    toSend = input('>>> ')
    if toSend == 'exit':
        break
    dataSocket.send(toSend.encode())

    # 等待接收服务段的消息
    recved = dataSocket.recv(BUFLEN)

    if not recved:
        break
    print(recved.decode())
dataSocket.close()

 

posted @ 2022-02-07 10:26  夜未央leo  阅读(68)  评论(0编辑  收藏  举报