Ganz einfacher Chat // Server-Client
-
Hallo
ich suche eine möglichkeit
ein ganz einfachen Chat zu schreiben, wenn sowas überhaupt "einfach" möglich ist
ich hab schon gegoogelt aber were immer nur auf die winsock seite gelinkt, ich weis garnicht wie und wo ich da anfangen sollkann mir mal wer helfen ?
-
Die Grundlagen:
http://beej.us/guide/bgnet/
einfach die PDF runterladen
(aber das thema ist komplexer als du denkst)wenn du die Grundkonzepte verstanden hast kannst du dir auch boost asio...
http://www.highscore.de/cpp/boost/asio.html...und boost serialization anschauen
http://www.highscore.de/cpp/boost/serialisierung.htmllibevent könnte dich aber auch interessieren
http://libevent.org/Lass dich nicht von den vielen Links abschrecken. Ein ganz einfacher Chat wird schon im ersten Tutorial, den ich dir gegeben hab, geschrieben, aber falls du mehr über Netzwerkprogrammierung lernen möchtest (ist eigentlich ganz interessant) solltest du dir auch den Rest anschauen.
-
Hab was gefunden !!!
2 ausführbare Codes
Client kann den Server ein Befehl abfragen!!!Achtung! Die libws_2.a muss noch eingebunden werden !!!;)
Achtung! Erst den Server öffnen, dann Client !Server:
#include <windows.h> #include <winsock2.h> #include <stdio.h> //Prototypen char Buch[] = { "Merlin" }; int startWinsock(void); int main() { char Buchabfrage[6]; long rc; SOCKET acceptSocket; SOCKET connectedSocket; SOCKADDR_IN addr; char buf[256]; char buf2[300]; // Winsock starten rc=startWinsock(); // Socket erstellen acceptSocket=socket(AF_INET,SOCK_STREAM,0); // Socket binden memset(&addr,0,sizeof(SOCKADDR_IN)); addr.sin_family=AF_INET; addr.sin_port=htons(12345); addr.sin_addr.s_addr=ADDR_ANY; rc=bind(acceptSocket,(SOCKADDR*)&addr,sizeof(SOCKADDR_IN)); // In den listen Modus rc=listen(acceptSocket,10); // Verbindung annehmen connectedSocket=accept(acceptSocket,NULL,NULL); // Daten austauschen while(rc!=SOCKET_ERROR) { rc=recv(connectedSocket,buf,256,0); buf[rc]='\0'; printf("Gesendeter Befehl: %s\n",buf); //sprintf(buf2,"Du mich auch %s",buf); rc=send(connectedSocket,buf2,strlen(buf2),0); //scanf( "%s",&Buch); // test if((strcmp(Buch, buf)) == 0) { Sleep(1000); system("cls"); Sleep(1000); printf("."); Sleep(1000); printf("."); Sleep(1000); printf("."); printf("Befehl wird ausgeführt\n"); } else { printf("unbekannter Befehl\n"); } } closesocket(acceptSocket); closesocket(connectedSocket); WSACleanup(); Sleep(1000); return 0; } int startWinsock(void) { WSADATA wsa; return WSAStartup(MAKEWORD(2,0),&wsa); }
Client:
#include <windows.h> #include <winsock2.h> #include <stdio.h> //Prototypen int startWinsock(void); int main() { long rc; SOCKET s; SOCKADDR_IN addr; char buf[256]; // Winsock starten rc=startWinsock(); // Socket erstellen s=socket(AF_INET,SOCK_STREAM,0); // Verbinden memset(&addr,0,sizeof(SOCKADDR_IN)); // zuerst alles auf 0 setzten addr.sin_family=AF_INET; addr.sin_port=htons(12345); // wir verwenden mal port 12345 addr.sin_addr.s_addr=inet_addr("127.0.0.1"); // zielrechner ist unser eigener rc=connect(s,(SOCKADDR*)&addr,sizeof(SOCKADDR)); // Daten austauschen while(rc!=SOCKET_ERROR) { printf("\nBefehl: [max 256]: "); gets(buf); send(s,buf,strlen(buf),0); rc=recv(s,buf,256,0); buf[rc]='\0'; printf("\nServer antwortet: %s\n",buf); } closesocket(s); WSACleanup(); Sleep(6000); return 0; } int startWinsock(void) { WSADATA wsa; return WSAStartup(MAKEWORD(2,0),&wsa); }
Ursprungsquelle:
http://www.c-worker.ch/
http://www.c-programmieren.com/C-Lernen.htmlHave Fun ...
PS: gibt mal "Merlin" in Client ein...und unter wichtig Speichern
-
die abfrage hab ich geschrieben mithilfe von c-programmieren
OKEY es it zwar C aber egal es funtz
-
und alle fehlerabfragen sind auch erstmal gelöscht worden damit man mal versteht was dort überhaupt passirt
-
ACHJA wir haben es gerade in Hamachi getestet
ES KLAPT !!!! mein kollege sitzt 20km entfehrnt
Hamachi Netzwerkerstellen
dein freund muss beitreten
DANN IN C:Server:
port: 5stellige zahl erfinden
ip: nimmt die von hamachiclient an dein freund schicken
-
port: 5stellige zahl erfinden
Das stimmt so nicht. Portnummern können nicht höher als 65535 sein.
The Registered Ports are in the range 1024-65535.
-
hä ich check garnicht mehr was jetzt server und was client ist
kann es sein das er sich vertan hat ?
und das obere client ist und das untere server ?
-
Server
printf("\nBefehl: ");
gets(buf);
send(s,buf,strlen(buf),0);
rc=recv(s,buf,256,0);
buf[rc]='\0';///////////////////////////////////////////
client:
rc=recv(connectedSocket,buf,256,0);
buf[rc]='\0';
printf("Gesendeter Befehl: %s\n",buf);
rc=send(connectedSocket,buf2,strlen(buf2),0);...
jetzt will ich das aber auch umgekehrt , sodas der server senden kann aber irgentwie bekomme ich das nicht hin .....
-
das hab ich jetzt im Server drin...
Server
... // Daten austauschen while(rc!=SOCKET_ERROR) { rc=recv(connectedSocket,buf,256,0); buf[rc]='\0'; printf("Client sendet: %s\n",buf); rc=send(connectedSocket,buf2,strlen(buf2),0); // printf("Server\n: "); gets(buf2); send(acceptSocket,buf2,strlen(buf2),0); rc=recv(acceptSocket,buf2,256,0); buf2[rc]='\0'; }
Client:
... char buf2[256] ... // Daten austauschen while(rc!=SOCKET_ERROR) { printf("\nZeichenfolge eingeben [max 256]: "); gets(buf); send(s,buf,strlen(buf),0); rc=recv(s,buf,256,0); if(rc==0) { printf("Server hat die Verbindung getrennt..\n"); break; } if(rc==SOCKET_ERROR) { printf("Fehler: recv, fehler code: %d\n",WSAGetLastError()); break; } buf[rc]='\0'; //printf("\nServer antwortet: %s\n",buf); // rc=recv(s,buf2,256,0); buf2[rc]='\0'; printf("Server sendet: %s\n",buf2); rc=send(s,buf2,strlen(buf2),0); }
aber wenn ich zurück sende bekomme ich die meldung
"Server wurde getrennt..."
kann mir wer helfen ?