JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.phpMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Netzwerk Programmierung
Gehe zu Seite Zurück  1, 2
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
AFE-GmdG
JLI MVP
JLI MVP


Alter: 45
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 06.03.2003, 22:24    Titel: Antworten mit Zitat

Eine Message Ohne Verbindungsaufbaue wird über das UDP-Protokoll gesendet. (SOCK_DGRAM oder so) Wenn du das Blockieren der Ports meinst, wenn du etwas davon lesen willst - Es gibt da die Funktion select, die überprüfen kann, ob an einem FilePointer (auch Socket) Bytes (zum lesen) anliegen. Ansonsten gibt es 2 Weitere Möglichkeiten: 1.: Ein extra Thread zum lesen, der ruhig blockieren kann oder 2.: Den Socket auf non-Blocking schalten.

AFE-GmdG
_________________
CPP:
float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
DerJJ
Junior JLI'ler



Anmeldedatum: 24.12.2002
Beiträge: 84

Medaillen: Keine

BeitragVerfasst am: 07.03.2003, 08:52    Titel: Antworten mit Zitat

wie mach ich denn einen socket non-blocking?
ich will ja schon einen thread machen, es soll 1mal das Hauptprogramm laufen und nebenbei der Server dadrauf warten das einer connectet.
Und der Server soll auch nicht auf eine Nachricht warten müssen, sondern wenn er muss auch was senden können, das gildet auch für den client...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
AFE-GmdG
JLI MVP
JLI MVP


Alter: 45
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 07.03.2003, 16:06    Titel: Antworten mit Zitat

Non-Blocking ist eine Socketoption, die beim Öffnen des selben oder per fcntl() nachträglich gesetzt werden kann.
_________________
CPP:
float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
DerJJ
Junior JLI'ler



Anmeldedatum: 24.12.2002
Beiträge: 84

Medaillen: Keine

BeitragVerfasst am: 15.03.2003, 14:20    Titel: Antworten mit Zitat

Also, bei mir sieht das jetzut so aus:
Code:
if(x>=10&&x<=810&&y>=10&&y<=610)
            {
               xFeld=(x-10)/50;
               yFeld=(y-10)/50;
               if(Feld[xFeld][yFeld]==6)
               {
                  long rc;
                  char ip[30];
                  char name[35];
                  int Kampfkraft;
                  int gegner;
                  char gegnerKampfkraft[35]="0000000000000000000000000000000000";
                  char eigeneKampfkraft[35]="0000000000000000000000000000000000";
                  char buf[256];
                  char buf2[256];
                  SOCKET Socket;
                  SOCKET connectedSocket;
                  SOCKADDR_IN addr;

                  rc=startWinsock();

                  Socket=socket(AF_INET,SOCK_STREAM,0);

                  if(Socket==INVALID_SOCKET)
                  {
                     MessageBox(0,"Fehler: Der Socket konnte nicht erstellt werden","Netzwerk Fehler",MB_OK);
                     return 1;
                  }

                  //Auf einen Server connecten
                  if(MessageBox(0,"Wollen sie einen eigenen Server erstellen?","Netzwerk Game",MB_YESNO)==IDNO)
                  {
                     memset(&addr,0,sizeof(SOCKADDR_IN)); // zuerst alles auf 0 setzten

                     addr.sin_family=AF_INET;

                     addr.sin_port=htons(66277); // wir verwenden mal port 66277
                     if(MessageBox(0,"Wollen Sie auf einen Server connecten??\nSie sollten die IP unter Name festlegen.","Netzwerkgame",MB_YESNO)==IDYES)
                     {
                        /**********************************
                        ***** IP auslesen *****************
                        **********************************/
                        FILE *Datei = fopen("name.jjs","w");
                        fread(&ip,sizeof(ip),1,Datei);
                        fclose(Datei);
                        /*********************************/

                        addr.sin_addr.s_addr=inet_addr(ip);
   
                        rc=connect(Socket,(SOCKADDR*)&addr,sizeof(SOCKADDR));

                        Kampfkraft=kleinerjaeger*1;
                        sprintf(eigeneKampfkraft,"%d\0",Kampfkraft);
                        sprintf(name,"%d","huhu");
                        rc=send(Socket,name,35,0);
                        rc=recv(Socket,gegnerKampfkraft,35,0);
                        rc=send(Socket,eigeneKampfkraft,35,0);
                        gegner=atoi(gegnerKampfkraft);
                        if(Kampfkraft<=gegner)
                        {
                           kleinerjaeger=0;
                           sprintf(buf,"Du hast die Raumschlacht verloren! \nDer Gegner hatte eine Kampfkraft von: %i \nDu hattest eine Kampfkraft von: %i",gegner,Kampfkraft);
                           MessageBox(0,buf,"Netzwerknachricht:",MB_OK);
                        }
                        else
                        {
                           sprintf(buf,"Du hast die Raumschlacht gewonnen! \nDer Gegner hatte eine Kampfkraft von: %i \nDu hattest eine Kampfkraft von: %i",gegner,Kampfkraft);
                           MessageBox(0,buf,"Netzwerknachricht:",MB_OK);
                        }
                        closesocket(Socket);
                        WSACleanup();
                        RedrawWindow(hWnd,NULL,NULL,RDW_INVALIDATE);


                     }
                  }
                  else //Selber einen Server aufmachen
                  {
                     if(MessageBox(0,"Soll auf einen Gegner gewartet werden?","Netzwerkgame",MB_YESNO)==IDYES)
                     {
                     memset(&addr,0,sizeof(SOCKADDR_IN));

                     addr.sin_family=AF_INET;

                     addr.sin_port=htons(66277);

                     addr.sin_addr.s_addr=INADDR_ANY;

                     rc=bind(Socket,(SOCKADDR*)&addr,sizeof(SOCKADDR_IN));
      
                     rc=listen(Socket,10);

                     connectedSocket=accept(Socket,NULL,NULL);
                     
      
                     Kampfkraft=kleinerjaeger*1;
                     sprintf(eigeneKampfkraft,"%d\0",Kampfkraft);
                     rc=recv(Socket,name,35,0);
                     sprintf(buf2,"Gegner da: %d\0",name);
                     MessageBox(0,buf2,"Netzwerkgame",MB_OK);
                     rc=send(Socket,eigeneKampfkraft,35,0);
                     rc=recv(Socket,gegnerKampfkraft,35,0);
                     gegner=atoi(gegnerKampfkraft);
                     if(Kampfkraft>=(int)gegnerKampfkraft)
                     {
                        sprintf(buf,"Du hast die Raumschlacht gewonnen! \nDer Gegner hatte eine Kampfkraft von: %i \nDu hattest eine Kampfkraft von: %i",gegner,Kampfkraft);
                        MessageBox(0,buf,"Netzwerknachricht:",MB_OK);
                     }
                     else
                     {
                        kleinerjaeger=0;
                        sprintf(buf,"Du hast die Raumschlacht verloren! \nDer Gegner hatte eine Kampfkraft von: %i \nDu hattest eine Kampfkraft von: %i",gegner,Kampfkraft);
                        MessageBox(0,buf,"Netzwerknachricht:",MB_OK);
                     }
                     closesocket(Socket);
                     WSACleanup();
                     RedrawWindow(hWnd,NULL,NULL,RDW_INVALIDATE);

                  }
      
               }
            return 0;
            }


Und ich habe noch folgende Fehler:
1. Die IP wird nicht Korrekt ausgelesen, wenn ich dort meine eigene IP eintrage(im Code) dann funzt es...
2. Hab ich noch ein problem mit den Variablen, z:b. erhält der Server immer die Nachricht: "Gegner da: 1244678" Die Gegnerische Kampfkraft ist immer 0 und die eigene 1, beim Server hab ich dann verloren, und beim Clienten gewonnen... das passt irgendwie nicht...
3. Wenn die IP falsch war, dann verliert der Client immer, kann man das so ändern das es dann nicht zum Kampf kommt?
kann mir da einer weiterhelfen?
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
Gehe zu Seite Zurück  1, 2
Seite 2 von 2

 
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