tcp/ip 实现局域网内设备通信

3 篇文章 0 订阅

客户端单向控制服务器

服务器

# -*- coding:utf-8 -*-
import socket
import os
import time

host = '192.168.1.105'
port = 12345

def main():
    while True:
        ret = str(conn.recv(1024), encoding="utf-8")
        if ('End' in ret) or (ret==""):
            print('客户端断开链接')
            conn.sendall(bytes("Finish!", encoding="utf-8"))
            conn.close()
            os.system('netstat -ano | findstr %s' % port)
            break
        else:
            print('服务器: runing...')
            if ret == "1":
                print ("执行指令:up\n")
                cmd = "start t.txt"
                os.system(cmd)
            elif ret == "2":
                print ("执行指令:down\n")
            elif ret == "3":
                print ("执行指令:left\n")
            elif ret == "4":
                print ("执行指令:right\n")
            elif ret == "5":
                print ("执行指令:front\n")
            elif ret == "6":
                print ("执行指令:behind\n")
            elif ret == "7":
                print ("执行指令:start\n")
            elif ret == "8":
                print ("执行指令:stop\n")
            else:
                print ("未知指令,跳过\n")
                break
         
if __name__=='__main__':
    sk = socket.socket()
    sk.bind((host, port))
    sk.listen(5)
    print('The port is listening...')
    os.system('netstat -ano | findstr %s' % port)
    print('Wait for the client.')
    conn, address = sk.accept()
    print('Connecting...')
    print('Connect from: ', address)
    os.system('netstat -ano | findstr %s' % port)
    main()


在这里插入图片描述

客户端

# -*- coding: utf-8 -*-
from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.floatlayout import FloatLayout
from kivy.graphics import Rectangle, Color
from kivy.config import Config
Config.set('graphics', 'width', '360')
Config.set('graphics', 'height', '540')
import socket
import os
import subprocess
 
host='192.168.1.105'
port=12345

class FloatLayoutApp(App):
    def build(self):
        def update_rect(layout, *args):
            layout.rect.pos = layout.pos
            layout.rect.size = layout.size

        float_layout = FloatLayout()
        button1 = Button(text='1.up', size_hint=(.2, .1), pos=(70,400))
        button2 = Button(text='2.down', size_hint=(.2, .1), pos=(215, 400))
        button3 = Button(text='3.left', size_hint=(.2, .1), pos=(70, 320))
        button4 = Button(text='4.right', size_hint=(.2, .1), pos=(215, 320))
        button5 = Button(text='5.front', size_hint=(.2, .1), pos=(70,240))
        button6 = Button(text='6.behind', size_hint=(.2, .1), pos=(215, 240))
        button7 = Button(text='7.start', size_hint=(.2, .1), pos=(70, 160))
        button8 = Button(text='8.stop', size_hint=(.2, .1), pos=(215, 160))
        button9 = Button(text='9.con kill', size_hint=(.2, .1), pos=(70,80))
        self.button10 = Button(text='10.exit', size_hint=(.2, .1), pos=(215, 80))
        float_layout.add_widget(button1)
        float_layout.add_widget(button2)
        float_layout.add_widget(button3)
        float_layout.add_widget(button4)
        float_layout.add_widget(button5)
        float_layout.add_widget(button6)
        float_layout.add_widget(button7)
        float_layout.add_widget(button8)
        float_layout.add_widget(button9)
        float_layout.add_widget(self.button10)

        button1.bind(on_press=self.button1_func)
        button2.bind(on_press=self.button2_func)
        button3.bind(on_press=self.button3_func)
        button4.bind(on_press=self.button4_func)
        button5.bind(on_press=self.button5_func)
        button6.bind(on_press=self.button6_func)
        button7.bind(on_press=self.button7_func)
        button8.bind(on_press=self.button8_func)
        button9.bind(on_press=self.button9_func)
        self.button10.bind(on_press=self.button10_func)
        self.set_connect()
        return float_layout
    def set_connect(self):
        try:
            self.obj=socket.socket()
            self.obj.connect((host,port))
            cmd=('netstat -ano | findstr %s'%port)
            result_out=subprocess.getoutput(cmd)
            print(result_out)
        except  Exception as e:
            print ("please open servse\n")
    def button1_func(self, event):
        print("1.up")
        print("客户端runing...")
        self.obj.send(bytes("1",encoding="utf-8"))
    def button2_func(self, event):
        print("2.down")
        print("客户端runing...")
        self.obj.send(bytes("2",encoding="utf-8"))
    def button3_func(self, event):
        print("3.left")
        print("客户端runing...")
        self.obj.send(bytes("3",encoding="utf-8"))
    def button4_func(self, event):
        print("4.right")
        print("客户端runing...")
        self.obj.send(bytes("4",encoding="utf-8"))
    def button5_func(self, event):
        print("5.front")
        print("客户端runing...")
        self.obj.send(bytes("5",encoding="utf-8"))
    def button6_func(self, event):
        print("6.behind")
        print("客户端runing...")
        self.obj.send(bytes("6",encoding="utf-8"))
    def button7_func(self, event):
        print("7.start")
        print("客户端runing...")
        self.obj.send(bytes("7",encoding="utf-8"))
    def button8_func(self, event):
        print("8.stop")
        print("客户端runing...")
        self.obj.send(bytes("8",encoding="utf-8"))
    def button9_func(self, event):
        print("9.con kill")
        print("客户端runing...")
        self.obj.send(bytes("9",encoding="utf-8"))
    def button10_func(self, event):
        print("10.exit")
        self.stop()
        
if __name__ == "__main__":
    FloatLayoutApp().run()


在这里插入图片描述
说明:1-10,能够控制服务器完成指令,可应用于机器人。

客户端服务器双向通信

服务器

# -*- coding:utf-8 -*-
import socket
import os
import time

host = '192.168.1.105'
port = 12345

def main():
    while True:
        ret = str(conn.recv(1024), encoding="utf-8")
        if 'End'==ret:
            print('End')
            conn.sendall(bytes("Finish!", encoding="utf-8"))
            conn.close()
            os.system('netstat -ano | findstr %s' % port)
            break
        else:
            print("收到客户端消息:",ret)
            meg = input("请输入发送的消息:\n")
            conn.sendall(bytes(meg, encoding="utf-8"))
            continue
 
if __name__=='__main__':
    while True:
        sk = socket.socket()
        sk.bind((host, port))
        sk.listen(5)
        #sk.settimeout(10)
        print('The port is listening...')
        os.system('netstat -ano | findstr %s' % port)
        print('Wait for the client.')
        conn, address = sk.accept()
        print('Connecting...')
        print('Connect from: ', address)
        os.system('netstat -ano | findstr %s' % port)
        main()


在这里插入图片描述

客户端

# -*- coding:utf-8 -*-
import socket
import os
import subprocess
 
host = '192.168.1.105'
port = 12345

def set_connect(): 
    obj=socket.socket()
    obj.connect((host,port))
    cmd='netstat -ano | findstr %s'%port
    result_out = subprocess.getoutput(cmd)
    print(result_out)
    while True:
        meg = str(input("请输入发送的消息:\n"))
        obj.send(bytes(meg,encoding="utf-8"))

        ret=str(obj.recv(1024),encoding="utf-8")
        if ret=='Finish!':
            obj.close()
        else:
            print("收到服务器消息:",ret)
            
    result=subprocess.getoutput(cmd)
    print(result)

def main():
    set_connect()

if __name__=='__main__':
    main()



在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

佐倉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值