winsock 服務器代碼(不建議win服務器listen防火牆會禁止外部訪問的)

 1 int SessionBase::ServerSock()
 2 {
 3    /*
 4     *    WSADATA是個結構體,在WSAStartup中被填充.
 5     *    WSAStartup爲調用WinSock準備初始化的工做.
 6     *    第一個參數指定編程使用的WinSock規範的最高版本號.
 7     *    WSAStartup成功返回0.失敗則程序退出.
 8     */
 9     WSADATA wsaData; 
10     if((WSAStartup(0x101,&wsaData)) != 0)
11     {
12         return 0;
13     }
14   
       SOCKET clientSock;
       SOCKET serverSock;
15     sockaddr_in local;
16     sockaddr_in from;
17     int fromlen=sizeof(from);
18 
19     local.sin_family      = AF_INET;
20     local.sin_addr.s_addr = inet_addr( m_strPorxyAddr.c_str() );
21     local.sin_port        = htons( m_ProxyPort );
22 
23     if((socket(AF_INET,SOCK_STREAM,0))==INVALID_SOCKET)
24     {
25         return 0;
26     }
27 
28     if(bind(serverSock,(sockaddr*)&local,sizeof(local))!=0)
29     {
30         return 0;
31     }
32 
33     if(listen(serverSock,10)!=0)            /*    backlog表示最大的鏈接數 */
34     {
35         return 0;
36     }
37 
38     while(TRUE)
39     {
40         char temp[2048];
41 
42         clientSock=accept(serverSock,(struct sockaddr*)&from,&fromlen);
43         logger.writeLog("SessionBase  Server socket accept client IP:[%s],port:[%d]",inet_ntoa(from.sin_addr),ntohs(from.sin_port));
44 
45         send(clientSock,temp,strlen(temp),0);
46 
47         closesocket(clientSock);
48     }
49     closesocket(serverSock);
50 
51     WSACleanup();        /* 確保進程再也不使用WS2_32.DLL */
52     return 0;
53 }
相關文章
相關標籤/搜索