// Code Block 2.1 - Header Includes
// This code block includes all of the standard Sockets API/Winsock headers
#ifdef WIN32 // Windows 95 and above
#include "winsock2.h"
#include "Ws2tcpip.h"
#endif
// End Code Block 2.1 - Header Includes
// Code Block 2.2 - Redefinitions and globals for cross-compatibility
#ifdef WIN32 // Windows 95 and above
WSADATA g_wsadata; // Winsock data holder
#define CloseSocket closesocket
#define GetSocketError WSAGetLastError
#define StartSocketLib WSAStartup( MAKEWORD( 2, 2 ), &g_wsadata );
#define CloseSocketLib WSACleanup();
#ifndef socklen_t
typedef int socklen_t;
#endif
#else // UNIX/Linux
#define CloseSocket close
#define GetSocketError errno
#define StartSocketLib {}
#define CloseSocketLib {}
#endif
// End Code Block 2.2 - Redefinitions and globals for cross-compatibility
#include <iostream>
using namespace std;
int main() {
int err;
StartSocketLib;
// BEGIN CODE BLOCK 2.3 - Create a Listening Socket on port 4000
int sock = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );
if( sock == -1 ) {
cout << "Socket creation error!" << endl;
return 0;
}
cout << "Socket created!" << endl;
// create a sockaddr_in for binding, listening on port 4000
struct sockaddr_in socketaddress;
socklen_t sa_size = sizeof( struct sockaddr_in );
socketaddress.sin_family = AF_INET;
socketaddress.sin_port = htons( 4000 );
socketaddress.sin_addr.s_addr = htonl( INADDR_ANY );
memset( &(socketaddress.sin_zero), 0, 8 );
// bind the socket
err = bind( sock, (struct sockaddr*)&socketaddress, sa_size );
// listen on the socket
err = listen( sock, 16 );
// END CODE BLOCK 2.3 - Create a Listening Socket on port 4000
// wait for an incomming connection now
int datasock;
datasock = accept( sock, (struct sockaddr*)&socketaddress, &sa_size );
// receive data
char buffer[128];
err = recv( datasock, buffer, 128, 0 );
cout << "Data received:" << endl;
cout << buffer << endl;
shutdown( datasock, 2 );
CloseSocket( datasock );
shutdown( sock, 2 );
CloseSocket( sock );
CloseSocketLib;
}
Quote: ------ Build started: Project: Servv1, Configuration: Debug Win32 ------ Compiling... servv1.cpp c:\servv1\servv1\servv1.cpp(35) : error C2065: 'AF_INET' : undeclared identifier c:\servv1\servv1\servv1.cpp(35) : error C2065: 'SOCK_STREAM' : undeclared identifier c:\servv1\servv1\servv1.cpp(35) : error C2065: 'IPPROTO_TCP' : undeclared identifier c:\servv1\servv1\servv1.cpp(35) : error C3861: 'socket': identifier not found c:\servv1\servv1\servv1.cpp(43) : error C2079: 'socketaddress' uses undefined struct 'main::sockaddr_in' c:\servv1\servv1\servv1.cpp(44) : error C2065: 'socklen_t' : undeclared identifier c:\servv1\servv1\servv1.cpp(44) : error C2146: syntax error : missing ';' before identifier 'sa_size' c:\servv1\servv1\servv1.cpp(44) : error C2065: 'sa_size' : undeclared identifier c:\servv1\servv1\servv1.cpp(44) : error C2027: use of undefined type 'main::sockaddr_in' c:\servv1\servv1\servv1.cpp(43) : see declaration of 'main::sockaddr_in' c:\servv1\servv1\servv1.cpp(45) : error C2228: left of '.sin_family' must have class/struct/union type is 'int' c:\servv1\servv1\servv1.cpp(46) : error C2228: left of '.sin_port' must have class/struct/union type is 'int' c:\servv1\servv1\servv1.cpp(46) : error C3861: 'htons': identifier not found c:\servv1\servv1\servv1.cpp(47) : error C2228: left of '.sin_addr' must have class/struct/union type is 'int' c:\servv1\servv1\servv1.cpp(47) : error C2228: left of '.s_addr' must have class/struct/union c:\servv1\servv1\servv1.cpp(47) : error C2065: 'INADDR_ANY' : undeclared identifier c:\servv1\servv1\servv1.cpp(47) : error C3861: 'htonl': identifier not found c:\servv1\servv1\servv1.cpp(48) : error C2228: left of '.sin_zero' must have class/struct/union type is 'int' c:\servv1\servv1\servv1.cpp(51) : error C3861: 'bind': identifier not found c:\servv1\servv1\servv1.cpp(54) : error C3861: 'listen': identifier not found c:\servv1\servv1\servv1.cpp(59) : error C3861: 'accept': identifier not found c:\servv1\servv1\servv1.cpp(63) : error C3861: 'recv': identifier not found c:\servv1\servv1\servv1.cpp(68) : error C3861: 'shutdown': identifier not found c:\servv1\servv1\servv1.cpp(69) : error C3861: 'close': identifier not found c:\servv1\servv1\servv1.cpp(71) : error C3861: 'shutdown': identifier not found c:\servv1\servv1\servv1.cpp(72) : error C3861: 'close': identifier not found Build log was saved at "file://c:\Servv1\Servv1\Debug\BuildLog.htm" Servv1 - 25 error(s), 0 warning(s) ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========