JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=9d5867ef794897eaa279e85715cafb6aMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Socket Problem

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
RebornX
JLI'ler



Anmeldedatum: 16.03.2007
Beiträge: 169

Medaillen: Keine

BeitragVerfasst am: 29.12.2007, 15:27    Titel: Socket Problem Antworten mit Zitat

Hi,

Ich habe einen Client und Server geschrieben.
Der Server ist im listen Modus und fängt Clienten über den Port 12128 ab und speichert die verbundenen sockets ab um nach weiteren Clienten zu lauschen.

Soo jetzt zum Problem:
Der Server soll 2 ports haben. Einmal 12128 für den listen modus und einmal 13138 für verbundene Clienten.
Dass heißt, wenn accept jetzt einen verbundenen socket rauswirft, soll dieser socket nicht mehr über port 12128 laufen, sondern über port 13138!
wie kann ich das realisieren??
Ich muss ja irgendwie den socket editieren oder?


Ich habs soo versucht:
Code:
int connectedsocket(SOCKADDR_IN a)
{
    SOCKET clientSocket = socket(AF_INET, SOCK_STREAM , 0);

   if(clientSocket == INVALID_SOCKET)
   {
      AddText("Client-Fehler: Socket konnte nicht erstellt werden!");
      return 1;
   }
   else
   {
      AddText("Client-Socket erstellt!");
   }

   addr2.sin_family = AF_INET;
   addr2.sin_port = htons(13138);
   addr2.sin_addr = a.sin_addr;

   test = bind(clientSocket, (SOCKADDR*)&addr2, sizeof(SOCKADDR_IN));
   if(test == SOCKET_ERROR)
   {
      AddText("Client-Fehler: Bind nicht möglich");
      FehlerCode();
      return 1;
   }
   else
   {
      AddText("Client-Socket an Port 13138 gebunden!");
   }
}


Aber das klappt nur local, also 127.0.0.1 im Internet kommt der FehlerCode 6, also:
Zitat:
Specified event object handle is invalid.An application attempts to use an event object, but the specified handle is not valid. Note that this error is returned by the operating system, so the error number may change in future releases of Windows.

Aber was heißt das jetzt??
Firewall ist aus Ports sind offen ...
_________________
Besucht meine Seite:
www.cpparchiv.dl.am
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
PeaceKiller
JLI Master


Alter: 35
Anmeldedatum: 28.11.2002
Beiträge: 970

Medaillen: Keine

BeitragVerfasst am: 29.12.2007, 16:00    Titel: Antworten mit Zitat

Du kannst den Port einer TCP-Verbindung ja nicht einfach ändern. Eine TCP-Verbindung ist ja immer an Quell-Adresse/Port und Ziel-Adresse/Port gebunden. Das kannst du ja nicht einfach ändern, sobald sie aufgebaut wurde.
_________________
»If the automobile had followed the same development cycle as the computer, a Rolls-Royce would today cost $100, get a million miles per gallon, and explode once a year, killing everyone inside.«
– Robert X. Cringely, InfoWorld magazine
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
FH
Super JLI'ler


Alter: 36
Anmeldedatum: 16.10.2004
Beiträge: 438

Medaillen: Keine

BeitragVerfasst am: 29.12.2007, 16:04    Titel: Antworten mit Zitat

Moin. Wink
Ich stelle mir ja erstmal die Frage, warum du das überhaupt trennen willst.
Weil: Es ist überhaupt kein Problem alle Verbindungen über einen Port laufen zu lassen. Das OS erkennt ganz gut, wann eine neue Verbindung ankommt, und was zu einer bereits bestehenden Verbindung gehört. Wink

Aber um zu deinem Problem zurückzukommen:
Soweit ich weiß, geht das so nicht. Du musst auf dem 12128 ja erstmal die Verbindung akzeptieren. Aber eine akzeptierte Verbindung kann ihren Port nicht mehr ändern. Das heißt, wenn du die Verbindung auf 12128 akzeptierst, ist sie dadrauf festgelegt. Und eine Verbindung die auf 12128 rein kam, kann man nicht für einen anderen Port akzeptieren.
Das einzige, was du machen kannst, ist, dass du den Client so schreibst, dass der Server sagen kann: "Verbinde dich bitte neu zu mir auf Port 13138." Wobei ich denke, dass das nicht viel Sinn macht, da der Client dann seine Verbindung auch direkt zu 13138 aufbauen kann.

Was deinen Code angeht versteh ich den Sinn dahinter noch nicht ganz:
Du erzeugst einen Socket, der, nachdem die Funktion beendet ist, sofort wieder erlischt, da er ja nur lokal ist.

Gruß

FH
<edit>
Da war wer schneller...
</edit>
_________________
goto work, send your kids to school
follow fashion, act normal
walk on the pavement, watch T.V.
save for your old age, obey the law
Repeat after me: I am free
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
RebornX
JLI'ler



Anmeldedatum: 16.03.2007
Beiträge: 169

Medaillen: Keine

BeitragVerfasst am: 29.12.2007, 19:26    Titel: Antworten mit Zitat

Ich habe da der funktion die SOCKADDR_IN structur übergeben die accept ausgefüllt hat^^
und dann habe ich einen neuen Socket mit den Daten der structur a ausgefüllt, also ip und der neue port...
und dann wollt ich ihn halt an den neuen port binden...
eigenartig finde ich, das der client wenn ich ihn local teste, also über 127.0.0.1, mit dem server verbindet! Shocked

Ach ja und der SOCKET da ist global^^ .... wollte damit eigentlich nur verdeutlichen dass das ein neuer socket, leerer ist und habe nicht drauf geachtet das der da nicht global ist... im projekt ist er global .


edit//:
ok hat sich erledigt, habe jetzt die Idee von FH eingesetzt thx
_________________
Besucht meine Seite:
www.cpparchiv.dl.am
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
FH
Super JLI'ler


Alter: 36
Anmeldedatum: 16.10.2004
Beiträge: 438

Medaillen: Keine

BeitragVerfasst am: 30.12.2007, 02:24    Titel: Antworten mit Zitat

Betreff Socket: Achso, ok. Hatte mich gewundert, warum der nicht global ist.

KA, warum das lokal funzt. Wahrscheinlich baut Windows da mal wieder irgendwas intern, es sollte auf jeden Fall nicht funktionieren. Warum es das lokal doch tut is ne gute Frage.

Btw.: Das gehört IMO ins Entwicklungs-Forum, weil es ja keine Frage zum Buch ist, soweit ich das sehen kann. Hab es also mal verschoben.
Gruß

FH
_________________
goto work, send your kids to school
follow fashion, act normal
walk on the pavement, watch T.V.
save for your old age, obey the law
Repeat after me: I am free
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum