博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python-20-优化socket_tcp
阅读量:6079 次
发布时间:2019-06-20

本文共 3426 字,大约阅读时间需要 11 分钟。

struck

import struct#b'\x0c\x00\x00\x00'print(struct.pack('i',12))s = struct.pack('i',12)print(struct.unpack('i',s)[0])复制代码

socket_server_tcp

from socket import *import subprocessimport struct# ip_port = ('127.0.0.1',8080)# back_log=5# buffer_size = 1024## tcp_server = socket(AF_INET,SOCK_STREAM)# tcp_server.bind(ip_port)# tcp_server.listen(back_log)## while True:#     conn,addr = tcp_server.accept()#     print('新的客户端链接',addr)#     while True:#         try:#             cmd=conn.recv(buffer_size)#             print('收到的客户端的命令',cmd)##             res = subprocess.Popen(cmd.decode('utf-8'), shell=True, stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.PIPE)#             err = res.stderr.read()#             if err:#                 cmd_res = err#             else:#                 cmd_res = res.stdout.read()##             if not cmd_res:#                 cmd_res = '执行成功'.encode('gbk')#             #计算数据长度#             length =len(cmd_res)#             data_length=str#             #将数据长度发送给客户端#             conn.send(str(length).encode('utf-8'))#             #服务端接收到客户端发送的准备指令#             client_ready = conn.recv(buffer_size)#             #真正的进行发送数据#             if client_ready == b'ready':#                 conn.send(cmd_res)#         except Exception as e:#             print(e)#             break#------------------------------------------------------ip_port = ('127.0.0.1',8080)back_log=5buffer_size = 1024tcp_server = socket(AF_INET,SOCK_STREAM)tcp_server.bind(ip_port)tcp_server.listen(back_log)while True:    conn,addr = tcp_server.accept()    print('新的客户端链接',addr)    while True:        try:            cmd=conn.recv(buffer_size)            print('收到的客户端的命令',cmd)            res = subprocess.Popen(cmd.decode('utf-8'), shell=True, stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.PIPE)            err = res.stderr.read()            if err:                cmd_res = err            else:                cmd_res = res.stdout.read()            if not cmd_res:                cmd_res = '执行成功'.encode('gbk')            #计算数据长度            length =len(cmd_res)            data_length=struct.pack('i',length)            #此时已知第一次发送的长度是4个字节            conn.send(data_length)            conn.send(cmd_res)        except Exception as e:            print(e)            break复制代码

socket_client_tcp

from socket import *import structfrom functools import partial# ip_port = ('127.0.0.1',8080)# back_log=5# buffer_size=1024## tcp_client = socket(AF_INET,SOCK_STREAM)# tcp_client.connect(ip_port)## while True:#     cmd = input('>>:').strip()#     if not cmd:continue#     if cmd == 'quit':break#     tcp_client.send(cmd.encode('utf-8'))#     #解决粘包#     #客户端接收到服务端发送的数据长度#     length = tcp_client.recv(buffer_size)#     #客户端发送一个自定义的准备操作#     tcp_client.send(b'ready')#     length = int(length.decode('utf-8'))##     recv_size = 0#     recv_msg =b''#     while recv_size 
>:').strip() if not cmd:continue if cmd == 'quit':break tcp_client.send(cmd.encode('utf-8')) #解决粘包 length_data = tcp_client.recv(4) length = struct.unpack('i',length_data)[0] # recv_size = 0 # recv_msg = b'' # while recv_size

iter补充

l = ['a','b','c','d']def test():    return l.pop()x = iter(test,'b')print(x.__next__())print(x.__next__())print(x.__next__())from functools import partialdef add(x,y):    return x+yprint(add(1,2))func = partial(add,1)print(func(1))print(func(2))复制代码

转载地址:http://cehgx.baihongyu.com/

你可能感兴趣的文章
HTTP499状态码 nginx下499错误及其解决方法
查看>>
BGP路由反射器与联盟详解(上)
查看>>
利用Fierce2查询子域名
查看>>
RPM软件包管理器(RPM Package Manager)
查看>>
一个存储过程实现(问题答案)
查看>>
Windows 2008从入门到精通系列教程(五)
查看>>
Android教程之如何安装(卸载)apk文件到模拟器
查看>>
C#线程系列讲座(2):Thread类的应用
查看>>
js table 操作-----实现table的插入、修改、删除
查看>>
Bootstrap-轮播图-No.8
查看>>
[Java Web] 4、JavaScript 简单例子(高手略过)
查看>>
粗览Activiti Modeler操作和源代码
查看>>
[汇编] 比较2个字符串是否相等
查看>>
代码重构~代码注释
查看>>
C#实现二叉查找树
查看>>
Angular 4 http通讯 解决服务器参数无法接收问题
查看>>
rose分析
查看>>
最长递减子序列(nlogn)(个人模版)
查看>>
springMVC拦截配置
查看>>
将不确定变为确定~LINQ查询包含对不同数据上下文上所定义项的引用
查看>>