Új hozzászólás Aktív témák

  • G.A.

    aktív tag

    Üdv!

    A problémám a következő:
    Építettem, pontosabban építgetek, egy mikorcontrollert, amit hálózatra kötnék. Hogy az eszközt távolról is elérhessem írtam hozzá C#-ben egy GUI-s alkalmazást.

    A kommunikációra az UDP protokollt választottam, mivel sokkal egyszerűbb, mint a TCP.
    A program külsőre így néz ki:

    A felső sorokban a Wireshark által kiírt csomagok láthatóak. A hálózaton a 11-es gép a vezérlő, a 8-as a PC.

    Látható, hogy megy a küldés és a fogadás is, ami nem megy az a a programban a forrás port 9800-re való beállítása. Pontosabban az megy, csak ekkor a program összeomlik, a következő hibaüzenettel:

    Additional information: Az összes szoftvercsatorna-cím használatának általában csak egy módja (protokoll/hálózat cím/port) engedélyezett

    Tehát jelenleg arra nem vagyok képes, hogy a beérkezett és a küldendő csomag source<-> destination portjait fel tudjam cserélni.

    A kód:
    namespace Smart_Home
    {
    public partial class Form1 : Form
    {
    public static byte[] data = new byte[1536], TX_BUFFER = new byte[1536], RX_BUFFER = new byte[1536];
    public static bool connection_status = false;
    public static byte[] IP_Address = new byte[4];
    public static string ip_address_string;

    public Form1()
    {
    InitializeComponent();
    }

    public void write_to_screen(string value)
    {
    if (InvokeRequired)
    {
    this.Invoke(new Action<string>(write_to_screen), new object[] { value });
    return;
    }
    screen.Text += value;
    }

    public void RecieveChallenge()
    {

    IPEndPoint AVREndPoint = new IPEndPoint(IPAddress.Parse(rx_ip_address.Text), Convert.ToInt32(rx_dst_port.Text));
    UdpClient client = new UdpClient(Convert.ToInt32(rx_dst_port.Text));

    while (connection_status)
    {
    RX_BUFFER = client.Receive(ref AVREndPoint);
    write_to_screen(Encoding.ASCII.GetString(RX_BUFFER));
    write_to_screen(Environment.NewLine);
    }
    client.Close();
    }

    public void connect_Click(object sender, EventArgs e)
    {


    if (rx_ip_address.TextLength != 0 && rx_dst_port.TextLength != 0)
    {
    if (!connection_status)
    {
    connect.Text = "Disconnect";
    connection_status = true;
    send.Enabled = true;
    Thread recieveChallengeThread = new Thread(new ThreadStart(RecieveChallenge));
    recieveChallengeThread.Start();
    }
    else
    {
    connect.Text = "Connect";
    connection_status = false;
    send.Enabled = false;
    }
    }
    }

    public void send_Click(object sender, EventArgs e)
    {
    IPEndPoint AVREndPoint = new IPEndPoint(IPAddress.Parse(tx_ip_address.Text), Convert.ToInt32(tx_dst_port.Text));
    UdpClient client = new UdpClient(Convert.ToInt32(tx_src_port.Text));
    TX_BUFFER = Encoding.ASCII.GetBytes(send_data.Text);
    client.Send(TX_BUFFER, TX_BUFFER.Length, AVREndPoint);
    client.Close();
    }
    }
    }

Új hozzászólás Aktív témák

Hirdetés