002
03.12.2007, 12:52 Uhr
Mr.Bean06
|
Danke, vom Prinzip her muss es auch nicht so kopliziert sein, es geht eben hauptsächlich darum, das die Verwaltung der Clients durch Threads übernommen wird... Kannst du mir evt. auch noch ein paar Codeschnipsel mitgeben?
Hier mal mein Servercode (was müßte ich hier verändern?)
C++: |
int main() { WSADATA wsa; //initialisierung von Winsock (Parameter(Version, Infos zur API)) WSAStartup (MAKEWORD (1,1) ,&wsa);
SOCKET listenSocket; listenSocket = socket (AF_INET, SOCK_STREAM, 0 ); int clientNummer = 0; sockaddr_in addr; addr.sin_addr.s_addr = INADDR_ANY; addr.sin_port = htons (1001); addr.sin_family = AF_INET;
if(bind(listenSocket,(struct sockaddr*)&addr, sizeof(addr)) == -1) { cout<<"Fehler bei bind"; } if (listen(listenSocket,3) == -1) { cout<<"Fehler beim listen"; } printf("Waiting for client to connect...\n");
SOCKET clientSocket = accept(listenSocket,(struct sockaddr*)&addr, 0); if (clientSocket == -1) { cout<<"Fehler bei accept"; closesocket(listenSocket); WSACleanup(); return 1;
} cout<<"Client connected."<<endl;
char buffer[254]; int bytes; //Daten die empfangen werden bytes = recv(clientSocket, buffer, sizeof(buffer) - 1, 0); buffer[bytes] = '\0';
cout<<buffer; MessageBox(0, buffer, "Client Connect!", MB_ICONINFORMATION); //listenSocket wird geschlossen closesocket(listenSocket); WSACleanup();
cout<<"Close Connect"; cin.get(); return 0; }
|
und auch noch der Client:
C++: |
#include "stdafx.h" #include <iostream> #include <winsock2.h>
//Mitteilung an den Linker, wo sich die nötigen Implemanteation der Winsock Funktionen befinden #pragma comment(lib, "ws2_32.lib")
using namespace std;
int main() { WSADATA wsa; //initialisierung von Winsock (Parameter(Version, Infos zur API)) WSAStartup (MAKEWORD (1,1) ,&wsa);
//Schnittstelle zur Netzwerkschicht SOCKET s; char clientNummer[254] = "Client 1\r\n"; //Socket beinhaltet (IP, TCP, Raw-Sockets das Protokoll) s = socket (AF_INET, SOCK_STREAM, 0 ); //hier wird die Serveradresse gespeichert sockaddr_in addr; //umwandeln von einem IP Strin in einen 4 byte Wert addr.sin_addr.s_addr = inet_addr("127.0.0.1"); //mit htons wird ein short (TCP Ports) von host byte order (höchstes byte links) in network byte order umgewandelt (höchstes byte rechts) addr.sin_port = htons (1001); //Adressenfamilie -> IP addr.sin_family = AF_INET;
//Verbindung zum Server (Verbindung zum eigenen Socket, Serveradresse, Größe der Serveradresse) if(connect(s, (SOCKADDR *) &addr, sizeof(addr)) == SOCKET_ERROR) //wenn kein Connect, dann gibt es einen Socketerror und es wird eine Fehlermeldung ausgegeben return (MessageBox(0, "Verbindung fehlgeschlagen!", "WinSock Tutorial Series", MB_ICONEXCLAMATION)); //zusendene Daten(mein Socket, den wert aus dem Buffer, Länge des Buffer, Flag) send(s, clientNummer, strlen(clientNummer), 0);
cout<<"\nEnde"; cin.get(); return 0; }
Danke schon mal im Voraus.
|
|