Hirdetés

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

  • G.A.

    aktív tag

    Üdv!

    Egy TCP alapú adatküldő/fogadó alkalmazást szeretnék készíteni, ehhez írtam egy alap programot.

    Jelenleg egy hibája van, csak 1 csomagot képes elküldeni, utána nem csinál semmit. Nem ír ki hibát, nem fagy le, de csak a programból való kilépés majd újraindítás után tud csomagot küldeni. Egyet.

    A program 2-3 szálon fut, ami szerintem a hiba forrása.

    public partial class Form1 : Form
    {
    Stream tcp_stream;
    public Form1()
    {
    InitializeComponent();
    }

    public void TCP_Client_Init()
    {
    c_src_port = Convert.ToInt32(client_src_port.Text);
    c_dst_port = Convert.ToInt32(client_dst_port.Text);

    client_ips = Dns.GetHostAddresses(client_ip_address.Text);
    TCP_Client = new TcpClient();

    try
    {
    TCP_Client.Connect(client_ips[0], c_dst_port);
    }
    catch (Exception e)
    {
    Close_Client();
    }
    if(run_client)
    {
    tcp_stream = TCP_Client.GetStream();

    TCP_Client.Client.ReceiveTimeout = 100;
    TCP_Client.Client.SendTimeout = 100;
    }
    }

    public void Run_TCP_Client_Listen()
    {
    bool client_rxd_packet = false;
    while(run_client)
    {
    try
    {
    client_rxd_packet = true;
    tcp_stream.Read(client_BUFFER, 0,256);

    string value = Encoding.ASCII.GetString(client_BUFFER);
    write_to_rxd_screen(value);

    client_BUFFER = null;
    }
    catch (Exception e) { }

    if(client_rxd_packet)
    {
    client_rxd_packet = false;
    }
    }
    TCP_Client.Close();
    }


    public void Client_Send_TCP_String(string value)
    {
    //tcp_stream = TCP_Client.GetStream(); // HIBA <<-- ITT
    client_BUFFER = Encoding.ASCII.GetBytes(value);
    try
    {
    tcp_stream.Write(client_BUFFER, 0, client_BUFFER.Length);
    }
    catch (Exception e)
    {
    Close_Client();
    }

    }
    }

    A hiba a Client_Send_TCP_String() funkció első sorában van.
    Ha kihagyom a tcp_stream = TCP_Client.GetStream(); sort akkor 1 csomagot el tud küldeni, de többet nem.
    Ha beírom, akkor ez a hibaüzenet jelenik meg:
    An unhandled exception of type 'System.InvalidOperationException' occurred in System.dll

    Additional information: A művelet nem engedélyezett nem csatlakoztatott szoftvercsatornákon.

    A Client_Send_TCP_String() akkor fut le, amikor a Send gombra kattintok (ezt kihagytam a fenti kódból).
    A Run_TCP_Client_Listen() viszont egy másik szálon fut.

    Ha jól értelmeztem a hibakódot, akkor a gondom az, hogy a tcp_stream-et 2 szálon egy időben használnám. A tcp_stream.Read()-nél, ill. a tcp_stream.Write()-nál.

    Ezt valamilyen invoke (módszer/funkció)-val lehetne megoldani? Hogyan?

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