码迷,mamicode.com
首页 > 其他好文 > 详细

tcp/udp

时间:2018-11-29 15:24:38      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:style   server   ase   结果   elf   ever   运行   proc   sendto   

基于tcp的subprocess操作:

服务端:
import  socketserver
import  subprocess

class Myserver(socketserver.BaseRequestHandler):
    def handle(self):
        print(3次握手conn is, self.request)#conn,3次握手,建立3次握手的过程
        print(客户端返回的ip地址是,self.client_address)#打印的是客户端的ip地址,addr
        while True:
            try:
                print(开始通信循环了)
                cmd=self.request.recv(1024)
                # if not cmd:
                #     break  # 解决死循环的情况
                print(收到客户端的消息, cmd.decode(utf-8))  # 一字节的形式接收到的数据
                # 执行命令,得到命令的运行结果
                res = subprocess.Popen(cmd.decode(utf-8), shell=True,
                                       stderr=subprocess.PIPE,
                                       stdin=subprocess.PIPE,
                                       stdout=subprocess.PIPE)  # 获取的是对象

                response = res.stdout.read()

                if response:
                    print(程序已经执行out)
                    cmd_res = response  # 加入err没有问题的话就读取到stderr的
                elif not response:
                    print(程序已经执行err)
                    cmd_res = res.stderr.read()


                # 发消息
                self.request.send(cmd_res)



            except Exception as e:
                print(e)
                break

if __name__ == __main__:
    s=socketserver.ThreadingTCPServer((127.0.2.1,8080),Myserver)#实例化过程,传入2个参数,一个是ip地址,建立链接循环,第二个建立通信循环
    print(已经建立链接)
    s.serve_forever()#永远服务下去
客户端:


from socket import *
ip_port=(127.0.2.1,8080)
buffer_size=1024
back_log=5
tcp_client=socket(AF_INET,SOCK_STREAM)
# tcp_client.bind(ip_port)
tcp_client.connect(ip_port)

while True:
    try:
        print(开始运行客户端1)
        msg=input(输入:).strip()
        if not msg: continue
        else:
            tcp_client.send(msg.encode(utf-8))
            print(客户端已经发送消息给服务端)
            data=tcp_client.recv(buffer_size)
            print(客户端接收的数据是,data.decode(gbk))
    except Exception as e:
        print(e)
        break

 

基于udp的并发操作:

request返回的是元组形式的,request【0】是客户端发来的消息
request【1】是套接字对象

addr是客户端的地址

服务端:
import  socketserver
import  subprocess
#基于udp通信,返回的request为元组形式的,第一个是客户端发送的消息,得个是套接字对象,最后一个是客户单的ip地址,addr
class Myserver(socketserver.BaseRequestHandler):
    def handle(self):
        print(接收到客户端的命令是,self.request[0].decode(utf-8))  # 接收的是客户端的消息
        print(self.request[1])  # 接收的是客户端的socket对象
        print(self.client_address)  # 接收的客户端的地址
        while True:
            try:
            #发消息给客户端
                data=self.request[0].decode(utf-8)
                res=subprocess.Popen(data,shell=True,
                             stdout=subprocess.PIPE,
                             stdin=subprocess.PIPE,
                             stderr=subprocess.PIPE)
                cmd_res=res.stdout.read()
                if cmd_res:
                    content=cmd_res
                else:
                    content=res.stderr.read()
                self.request[1].sendto(content,self.client_address)
                print(服务端已经发送消息给客户端)
                break
            except Exception as e:
                print(e)
                break

        # msg=input(‘输入:‘).strip()
        # self.request[1].sendto(msg.encode(‘utf-8‘),self.client_address)
        # print(‘已经发送消息给客户端了‘,msg)



#建立udp链接循环
if __name__ == __main__:
    s=socketserver.ThreadingUDPServer((127.1.1.1,8080),Myserver)#传入的第一个参数是ip地址,第二个参数是通信循环
    s.serve_forever()
客户端:
import  socketserver
import subprocess
from socket import *
ip_port=(127.1.1.1,8080)
buffer_size=10240
back_log=5
tcp_client=socket(AF_INET,SOCK_DGRAM)
tcp_client.connect(ip_port)

while True:
    print(开始运行客户端了)
    msg=input(输入:).strip()
    tcp_client.sendto(msg.encode(utf-8),ip_port)
    print(已经发送消息给服务端了)
    data,addr=tcp_client.recvfrom(buffer_size)
    print(已经接收服务端发来的消息了,data.decode(gbk))

 

tcp/udp

标签:style   server   ase   结果   elf   ever   运行   proc   sendto   

原文地址:https://www.cnblogs.com/yunxintryyoubest/p/10037467.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!