SOCKET SERVER
-
/*********************************************************************
Ein sehr(!!) Simpler Socket Server.
-----------------------------------Beachtet das es nur ein Beispiel ist welches nicht ausprogrammiert ist.
Es fehlen Anweisungen wie closesocket und WSACleanup.
Ebenfalls wird hier auch nicht verhindert das mehrere Verbindungen
hergestellt werden können.
Aber zum demonstieren wie man eine Verbingung annimmt und Daten
sendet und empfänget ist es recht geeignet.
Eventuell hat es auch noch einige Fehler im Code..#include <iostream.h> #include <stdlib.h> #include <windows.h> #include <winsock2.h> #define SERVER_PORT 5432 #define RECV_BUF_MAXLEN 256 #define SEND_BUF_MAXLEN 256 long WinsockStartup(); int main() { long rc; SOCKET sockListen; SOCKET sockConnected; SOCKADDR_IN addr; int addrlen = sizeof(addr); char sendBuf[SEND_BUF_MAXLEN+1]; char recvBuf[RECV_BUF_MAXLEN+1]; addr.sin_addr.s_addr = 0; addr.sin_family = AF_INET; addr.sin_port = htons(SERVER_PORT); rc = WinsockStartup(); if (rc == SOCKET_ERROR) { cout << "Error: Winsock Startup failed: " << WSAGetLastError() << endl; return 0; } sockListen=socket(AF_INET,SOCK_STREAM,NULL); if (sockListen == INVALID_SOCKET) { cout << "Error: Cannot create Socket: " << WSAGetLastError() << endl; return 0; } rc = bind(sockListen, (SOCKADDR*)&addr, sizeof(addr)); if (rc == SOCKET_ERROR) { cout << "Error: Cannot bind Socket: " << WSAGetLastError() << endl; return 0; } rc = listen(sockListen, NULL); if (rc == SOCKET_ERROR) { cout << "Error: Cannot listen: " << WSAGetLastError() << endl; return 0; } cout << "Waiting for a connection..." << endl; sockConnected=accept(sockListen, (SOCKADDR*)&addr, &addrlen); if (sockConnected == INVALID_SOCKET) { cout << "Error: Cannot accept connection: " << WSAGetLastError() << endl; return 0; } rc = send(sockConnected,"Hallo\0",6,NULL); if (rc == SOCKET_ERROR) { cout << "Error: Cannot send Data: " << WSAGetLastError() << endl; return 0; } cout << rc << " Bytes sent !" << endl; while (1) { rc = recv(sockConnected,recvBuf,RECV_BUF_MAXLEN,NULL); if (rc == SOCKET_ERROR) { cout << "Error: Cannot recv Data: " << WSAGetLastError() << endl; return 0; } if (rc == 0) { cout << "Other Host has closed the connection !" << endl; return 0; } recvBuf[rc] = '\0'; cout << rc << " Bytes received: " << recvBuf << endl; rc = send(sockConnected,"Ganz meine Meinung\0",19,NULL); if (rc == SOCKET_ERROR) { cout << "Error: Cannot send Data: " << WSAGetLastError() << endl; return 0; } cout << rc << " Bytes sent !" << endl; } } long WinsockStartup() { long rc; WORD wVersionRequested; WSADATA wsaData; wVersionRequested = MAKEWORD(2, 1); rc = WSAStartup( wVersionRequested, &wsaData ); return rc; }Testen könnt ihr ihn indem ihn auf '127.0.0.1 5432' eine telnet Verbindung
herstellt (telnet 127.0.0.1 5432). Er wird euch erst "Hallo" sagen,
und dann alle weiteren Daten welche ihr sendet mit "Ganz meine Meinung"
beantworten. Simpel halt.MEINE FRAGE:
Wo wird hier die IP 127.0.0.1 übergeben?
Bin noch Anfänger
-
hermes schrieb:
Es fehlen Anweisungen wie closesocket und WSACleanup.
Ebenfalls wird hier auch nicht verhindert das mehrere Verbindungen
hergestellt werden können.
Aber zum demonstieren wie man eine Verbingung annimmt und Daten
sendet und empfänget ist es recht geeignet.Dafür ist es eben nicht so gut geeignet, wenn Aufrufe von closesocket und WSACleanup fehlen.

So ein Beispiel sollte immer so kurz wie möglich, aber so lang wie nötig sein.MEINE FRAGE:
Wo wird hier die IP 127.0.0.1 übergeben?Es gibt da die Variable addr. Das sieht doch stark nach der Adresse aus.

-
Ich würde gerne Daten mit einem anderen PC im LAN oder WAN austauschen,
ist diese Methode überhaupt die richtige dafür?
-
Lern erst mal die Grundlagen.
So wie ich dich einschätze wird ohne ein Buch zu WINSOCK nichts klappen.
Hol dir ein Buch.MfG, Tolga.
-
es gibt zu winsock keine aktuelle [edit] deutschen [/edit] bücher (zumindest nicht bei amazon oder bol) aber wenn du die tutorials auf der seite liest wo du den sourcecode herhast (böse böse keine quellen anzugeben
) wirst du das wohl hinbekommen
-
muhkuhmasta schrieb:
es gibt zu winsock keine aktuellen bücher
Da würde ich an deiner Stelle hoffen, dass das keiner mitbekommt..

-