首页 > 解决方案 > *WPF* 我正在尝试以其他方法访问 TCP 套接字,但它会引发错误?

问题描述

我知道代码无法工作,但它可以阻止我说明我的问题。目前我正在尝试在 Windows GUI 和作为从属的 linux 之间建立通信。Raspi 应该控制一些步进电机。我希望他能够报告事情回来。为此,我试图保持插座打开。欢迎任何关于更好 protokoll 的想法!我打开一个到 Rasberry Pi 的 tcp 连接并通过它发送一些数据。

namespace WpfApp2
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {

        private TcpClient tcp;
        private delegate void UpdateLogCallBack(string strMessage);

        public MainWindow()
        {
            InitializeComponent();
            
        }

        private void _Write(string msg)
        {
            NetworkStream stream = tcp.GetStream();
            Byte[] data = System.Text.Encoding.ASCII.GetBytes(msg);
            stream.Write(data, 0, data.Length);


        }

        public void Button_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                tcp = new TcpClient(ip_box.Text,Convert.ToInt32(port_box.Text));
                Byte[] data = System.Text.Encoding.ASCII.GetBytes("Hallo");
                NetworkStream stream = tcp.GetStream();

                // Send the message to the connected TcpServer. 
                stream.Write(data, 0, data.Length);

                stream.Close();
                tcp.Close();


            }
            catch(Exception ex)
            {
                MessageBox.Show("Error");

            }
 
        }




        private void Button_Click_1(object sender, RoutedEventArgs e)
        {
            _Write(msg_box.Text);
        }

        private void ip_box_TextChanged(object sender, TextChangedEventArgs e)
        {

        }

     

        private void msg_box_TextChanged(object sender, TextChangedEventArgs e)
        {

        }

  

    }
}

当我按下按钮它只是崩溃。如何设置连接并按照我的意愿访问它。服务器部分的一些帮助也会有所帮助。可悲的是,我必须用 python 编写它。这是我目前的想法:

print"Pi is starting..."
import socket
print"Socket importet..."
import time
print"Time importet..."
import RPi.GPIO as GPIO
print"GPIO importet..."
import sys
import thread
print"-----------"



ip = "192.168.178.120"
port = 5335

print"Ip: "+ip
print"Port: "+str(port)


axis_1_to_deg=22
axis_2_to_deg=111

def moveaxis1(a):

         x=0
         mvstp1=int(a)
         if(mvstp1<0):
             GPIO.output(stepper1_dir,GPIO.HIGH)
             mvstp1=int(mvstp1)* -1
         elif(mvstp1>0):
            GPIO.output(stepper1_dir,GPIO.LOW)
         while x<int(mvstp1):
             GPIO.output(stepper1_step,GPIO.LOW)
             GPIO.output(stepper1_step,GPIO.HIGH)
             x=x+1
             time.sleep(0.002)

def moveaxis2(a):

         x=0
         mvstp2=int(a)
         if(mvstp2<0):
             GPIO.output(stepper2_dir,GPIO.HIGH)
             mvstp2=int(mvstp2)* -1
         elif(mvstp2>0):
            GPIO.output(stepper2_dir,GPIO.LOW)
         while x<int(mvstp2):
             GPIO.output(stepper2_step,GPIO.LOW)
             GPIO.output(stepper2_step,GPIO.HIGH)
             x=x+1
             time.sleep(0.00005)


def moveaxis3(a):

         x=0
         mvstp3=int(a)
         if(mvstp3<0):
             GPIO.output(stepper3_dir,GPIO.HIGH)
             mvstp3=int(mvstp3)* -1
         elif(mvstp3>0):
            GPIO.output(stepper3_dir,GPIO.LOW)
         while x<int(mvstp3):
             GPIO.output(stepper3_step,GPIO.LOW)
             GPIO.output(stepper3_step,GPIO.HIGH)
             x=x+1
             time.sleep(0.00005)

print"Thread 3 Declared"
print"Threads Declared"

x=0
stepper1_step=40
stepper2_step=36
stepper3_step=26

stepper1_dir=38
stepper2_dir=32
stepper3_dir=24
calib_1=8
calib_2=10

GPIO.setmode(GPIO.BOARD)
GPIO.setup(calib_1,GPIO.IN)
GPIO.setup(calib_2,GPIO.IN)

GPIO.setup(stepper1_step,GPIO.OUT)
GPIO.setup(stepper1_dir,GPIO.OUT)
GPIO.setup(stepper2_step,GPIO.OUT)
GPIO.setup(stepper2_dir,GPIO.OUT)
GPIO.setup(stepper3_step,GPIO.OUT)
GPIO.setup(stepper3_dir,GPIO.OUT)
GPIO.setmode(GPIO.BOARD)

pos_axis1 = 0
pos_axis2 = 0
pos_axis3 = 0




print " "

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind((ip, port))
sock.listen(1)




print("RasPI Server up / awaiting connection...")




connection,client_addres =sock.accept()    # buffer size is 1024 bytes

while True:
    data = connection.recv(1024)
    print "Received message:", data
    if(data.startswith( 'stp')):
         print "Commands for Steppers are being proccesed"
         stp,move_stp1,move_stp2,move_stp3 = data.split(',')
         print("Steps Axis 1"+move_stp1)
         print("Steps Axis 2"+move_stp2)
         print("Steps Axis 3"+move_stp3)
         print"------------"
         print"Threads are starting..."
         in_pos_1=int(move_stp1)*axis_1_to_deg
         in_pos_2=int(move_stp2)*axis_2_to_deg
         in_pos_3=int(move_stp3)*axis_2_to_deg

         z1 = pos_axis1 - in_pos_1
         z2 = pos_axis2 - in_pos_2
         z3 = pos_axis3 - in_pos_3

         thread.start_new_thread(moveaxis1,(z1,))
         thread.start_new_thread(moveaxis2,(z2,))
         thread.start_new_thread(moveaxis3,(z3,))

         pos_axis1 = in_pos_1
         pos_axis2 = in_pos_2
         pos_axis3 = in_pos_3

         print"Position 1: " +str(pos_axis1)
         print"Position 2: " +str(pos_axis2)
         print"Position 3: " +str(pos_axis3)
    elif(data =="calib"):
        ready = False
        while ready==False:
            if(GPIO.input(calib_1)==True):
                moveaxis1(1)
            else:
                ready=True
                moveaxis1(-40*axis_1_to_deg)
        ready = False
        while ready==False:
            if(GPIO.input(calib_2)==True):
                moveaxis2(1)
            else:
                ready=True
                moveaxis2(-85*axis_2_to_deg)
                
                 elif(data=="set_0"):
        pos_axis1=0
        pos_axis2=0
        pos_axis3=0

    elif(data=="exit"):
        break
    print" "



GPIO.cleanup()
sock.close()
print"Fertig"

标签: pythonwpftcptcpclienttcpserver

解决方案


大声笑我明白了.... 只需要删除 stream.Close(); tcp.Close(); 这么白痴的事情……


推荐阅读