TCP public ip

TCP public ip
2018-12-17T21:29:32+01:00
2018-12-19T17:03:38+01:00
2022-08-11T09:00:29+02:00
SikrZ
Sziasztok!

Olyan problémával fordulok hozzátok, hogy adott egy tcp szerver + kliens.
Eddig localhoston tesztelgettem a kommunikációt és ott működött. 
Amint oda jutottam hogy akkor másik gépen más ip-vel jöttek a gondok. 
Az első részét megoldottam tűzfal és routeren port nyitást és továbbítás arra a belső ip-re amint a szerver fut. Innentől kezdve a kapcsolat létre tudott jönni. 
A kapcsolat létre jön a a szerver fogad minden klienstől küldött csomagot szépen.
A problémám, hogy a kliens egyszerűen nem kapja meg amit a szerver küld semmit.
Nem igazán találom a hibát csak mert localhoston tökéletesen működött. 
Ha kikapcsolom a tűzfalat se kapja meg a csomagokat a kliens. Ha nem kapcsolom ki csak hozzá adom akkor se. Szóval nem tudom mit tudok még csinálni, mit hagytam ki.
Ami talán fura, hogy nem kért a program engedélyt a hálózaton amikor elindult. Mármint a tűzfal.

Szerver: 

public void InitNetwork() } serverSocket = new TcpListener(IPAddress.Any, 333); serverSocket.Start(); serverSocket.BeginAcceptTcpClient(ClientConnectCallback, null); } Client: public void Connect() { client = new TcpClient(); client.ReceiveBufferSize = 4096; client.SendBufferSize = 4096; asyncBuffer = new byte[8192]; client.BeginConnect(IP_ADDRESS, PORT, new AsyncCallback(ConnectCallback), client); }
Köszi a segítséget.
Mutasd a teljes hozzászólást!
SOLVED!

2 napig ültem felette... és egy teljesen banális dolog volt a megoldás. 
Még pedig connect után egyből while-toltam hogy nézze az adatokat ha küldök valamit.
igen ám csak hogy 127.0.0.1 et nagyon gyorsan elérte néha nem de 10 ből 9 szer  addigra elérte mire a cod a while-ra futott. 
Igen ám csak egy távolni ip-re idő kellett.. 
szal ennyi volt a megoldás: 

Thread.Sleep(1000); a While előtt alig szidtam le az eget..
Mutasd a teljes hozzászólást!

  • Jó dolog a kapcsolódás, de ha a küldés-fogadással van a gond, azt is meg kéne mutatni.
    Mutasd a teljes hozzászólást!
  • Az első kérdés nem programozási, hanem üzemeltetési. Sikerült-e megoldanod a tűzfal és csomag irányítási problémákat? Ha a programod az egyik irányban ad csak, cseréld meg a gépeken a szerver / kliens funkciót. Legalább egy irányban működik akkor is?
    Mutasd a teljes hozzászólást!
  • Érdekes fordítva ugyan ez.
    Tehát a szerver mindent fogad viszont amit küld az nem érkezik meg a kliensnek.

    A szerveren ez felel a küldésért:

    public void SendDataTo(int connectionID,byte[] data) { ByteBuffer buffer = new ByteBuffer(); buffer.WriteLong((data.GetUpperBound(0)-data.GetLowerBound(0))+1); buffer.WriteBytes(data); Client[connectionID].myStream.BeginWrite(buffer.ToArray(), 0, buffer.ToArray().Length, null, null); // Console.WriteLine("Csomagküldés! 2 "); } private void ClientConnectCallback(IAsyncResult result) { TcpClient tempClient = serverSocket.EndAcceptTcpClient(result); serverSocket.BeginAcceptTcpClient(ClientConnectCallback, null); for (int i = 0; i < Client.Length; i++) { if (Client[i].socket == null) { Client[i].socket = tempClient; Client[i].connectionID = i; Client[i].ip = tempClient.Client.RemoteEndPoint.ToString(); Client[i].Start(); Console.WriteLine("Egy új kliens csatlakozott! Connection ID : {0} ||IP: {1} port: {2}",i, tempClient.Client.RemoteEndPoint.ToString(), ((IPEndPoint)tempClient.Client.RemoteEndPoint).Port); KEREM_A_MACHINEID_VERZIOT(Client[i].connectionID); //Verzio_kuldes_a_Kliensnek(Client[i].connectionID); return; } } }
    ez pedig a kliens fogadás: 

    public void Connect() { client = new TcpClient(); client.ReceiveBufferSize = 4096; client.SendBufferSize = 4096; asyncBuffer = new byte[8192]; client.BeginConnect(IP_ADDRESS, PORT, new AsyncCallback(ConnectCallback), client); } private void ConnectCallback(IAsyncResult result) { try { client.EndConnect(result); if (client.Connected == false) { return; } else { myStream = client.GetStream(); myStream.BeginRead(asyncBuffer, 0, 8192, OnReceivedData, null); isConnected = true; } } catch (Exception ex) { isConnected = false; return; } } private void OnReceivedData(IAsyncResult result) { try { int packetLenght = myStream.EndRead(result); receivedBytes = new byte[packetLenght]; Buffer.BlockCopy(asyncBuffer, 0, receivedBytes, 0, packetLenght); if (packetLenght == 0) { return; } handleData = true; myStream.BeginRead(asyncBuffer, 0, 8192, OnReceivedData, null); } catch (Exception) { return; } }

    Viszont ami érdekes , hogy ha localhostal próbálom akkor tökéletes megy minden csomag ide oda amoda :D szóval nem tudom hol lehet a hiba. 

    Köszi
    Mutasd a teljes hozzászólást!
  • SOLVED!

    2 napig ültem felette... és egy teljesen banális dolog volt a megoldás. 
    Még pedig connect után egyből while-toltam hogy nézze az adatokat ha küldök valamit.
    igen ám csak hogy 127.0.0.1 et nagyon gyorsan elérte néha nem de 10 ből 9 szer  addigra elérte mire a cod a while-ra futott. 
    Igen ám csak egy távolni ip-re idő kellett.. 
    szal ennyi volt a megoldás: 

    Thread.Sleep(1000); a While előtt alig szidtam le az eget..
    Mutasd a teljes hozzászólást!
  • (Jobb lesz mindnyájunknak, ha ezt most nem firtatom. Az a fő, hogy működik.)
    Mutasd a teljes hozzászólást!
abcd