 |
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
AFE-GmdG JLI MVP


Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 06.03.2003, 22:24 Titel: |
|
|
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 |
|
 |
DerJJ Junior JLI'ler
Anmeldedatum: 24.12.2002 Beiträge: 84
Medaillen: Keine
|
Verfasst am: 07.03.2003, 08:52 Titel: |
|
|
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 |
|
 |
AFE-GmdG JLI MVP


Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 07.03.2003, 16:06 Titel: |
|
|
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 |
|
 |
DerJJ Junior JLI'ler
Anmeldedatum: 24.12.2002 Beiträge: 84
Medaillen: Keine
|
Verfasst am: 15.03.2003, 14:20 Titel: |
|
|
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 |
|
 |
|
|
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
|