本文共 1813 字,大约阅读时间需要 6 分钟。
原文地址:
注意关于windows.h 与 winsock2.h 一起使用时的问题:
The Winsock2.h header file internally includes core elements from theWindows.h header file, so there is not usually an #include line for theWindows.h header file in Winsock applications. If an #include line is needed for theWindows.h header file, this should be preceded with the #define WIN32_LEAN_AND_MEAN macro. For historical reasons, theWindows.h header defaults to including theWinsock.h header file for Windows Sockets 1.1. The declarations in theWinsock.h header file will conflict with the declarations in theWinsock2.h header file required by Windows Sockets 2.0. The WIN32_LEAN_AND_MEAN macro prevents theWinsock.h from being included by theWindows.h header. An example illustrating this is shown below.
#ifndef WIN32_LEAN_AND_MEAN#define WIN32_LEAN_AND_MEAN#endif#include#include #include #include #include #pragma comment(lib, "Ws2_32.lib")int main() { return 0;}
原文地址:
A simple echo server:
#include "Socket.h"#include#include unsigned __stdcall Answer(void* a) { Socket* s = (Socket*) a; while (1) { std::string r = s->ReceiveLine(); if (r.empty()) break; s->SendLine(r); } delete s; return 0;}int main(int argc, char* argv[]) { SocketServer in(2000,5); while (1) { Socket* s=in.Accept(); unsigned ret; _beginthreadex(0,0,Answer,(void*) s,0,&ret); } return 0;}
SOCKET ClientSocket = accept(ListenSocket, NULL, NULL); sockaddr_in remoteName; int remNameLen=sizeof(remoteName); memset((void *)& remoteName, 0, remNameLen); int iResult = getpeername(ClientSocket, (sockaddr *) & remoteName,& remNameLen); printf("Remote IP: %s\n", inet_ntoa(remoteName.sin_addr));
转载地址:http://rthai.baihongyu.com/