日積月累
          千里之行始于足下
          posts - 1,comments - 0,trackbacks - 0
          1、Socket服務(wù)器端:
          Socket服務(wù)器端流程如下:加載套接字->創(chuàng)建監(jiān)聽的套接字->綁定套接字->監(jiān)聽套接字->處理客戶端相關(guān)請(qǐng)求。
          下面是孫鑫VC詳解里面的服務(wù)器端的例子:
          C++代碼 復(fù)制代碼
          1. #include <Winsock2.h>   
          2. #include <stdio.h>   
          3.   
          4. void main()   
          5. {   
          6.     //加載套接字   
          7.     WORD wVersionRequested;   
          8.     WSADATA wsaData;   
          9.     int err;   
          10.        
          11.     wVersionRequested=MAKEWORD(1,1);   
          12.        
          13.     err=WSAStartup(wVersionRequested,&wsaData);   
          14.     if (err!=0)   
          15.     {   
          16.         return;   
          17.     }   
          18.        
          19.     if (LOBYTE(wsaData.wVersion)!=1||   
          20.         HIBYTE(wsaData.wVersion)!=1)   
          21.     {   
          22.         WSACleanup();   
          23.         return;   
          24.     }   
          25.        
          26.     //創(chuàng)建監(jiān)聽的套接字   
          27.     SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);   
          28.        
          29.     SOCKADDR_IN addrSrv;   
          30.     addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//把U_LONG的主機(jī)字節(jié)順序轉(zhuǎn)換為TCP/IP網(wǎng)絡(luò)字節(jié)順序   
          31.     addrSrv.sin_family=AF_INET;   
          32.     addrSrv.sin_port=htons(6000);   
          33.        
          34.     //綁定套接字   
          35.     bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));   
          36.     //將套接字設(shè)置為監(jiān)聽模式,準(zhǔn)備接受用戶請(qǐng)求   
          37.     listen(sockSrv,5);   
          38.        
          39.     SOCKADDR_IN addrClient;   
          40.     int len=sizeof(SOCKADDR);   
          41.        
          42.     printf("%s\n","welcome,the serve is started...");   
          43.     while (1)   
          44.     {   
          45.         //等待用戶請(qǐng)求到來   
          46.         SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);   
          47.         char sendBuf[100];   
          48.         sprintf(sendBuf,"welcome %s to http://unblue2008.javaeye.com",inet_ntoa(addrClient.sin_addr));   
          49.            
          50.         //發(fā)送數(shù)據(jù)   
          51.         send(sockConn,sendBuf,100,0);   
          52.         char revBuf[100];   
          53.            
          54.         //接收數(shù)據(jù)   
          55.         recv(sockConn,revBuf,100,0);   
          56.         //打印接受數(shù)據(jù)   
          57.         printf("%s\n",revBuf);   
          58.            
          59.         //關(guān)閉套接字   
          60.         closesocket(sockConn);   
          61.     }      
          62. }  

          注意:需要包含頭文件<Winsock2.h>,并且在工程設(shè)置的link里面加上ws32_2.dll
          如果在VC中還有一個(gè)簡(jiǎn)單的加載套接字的方法:
          C++代碼 復(fù)制代碼
          1. if (!AfxSocketInit())   
          2.     {   
          3.         AfxMessageBox("套接字加載失敗!");   
          4.         return false;   
          5.     }  

          這個(gè)不需要包含上面注里面的頭文件和ws2_32.lib庫就可以實(shí)現(xiàn)加載套接字。
          2、Socket客戶端:
          Socket客戶端同樣需要先加載套接字,然后創(chuàng)建套接字,不過之后不用綁定和監(jiān)聽了,而是直接連接服務(wù)器,發(fā)送相關(guān)請(qǐng)求。
          同樣貼出孫鑫VC詳解里面的客戶端的例子:(不是我偷懶,是人家實(shí)在寫的太好,無法超越
          C++代碼 復(fù)制代碼
          1. #include <Winsock2.h>   
          2. #include <stdio.h>   
          3.   
          4. void main()   
          5. {   
          6.     //加載套接字   
          7.     WORD wVersionRequested;   
          8.     WSADATA wsaData;   
          9.     int err;   
          10.        
          11.     wVersionRequested=MAKEWORD(1,1);   
          12.        
          13.     err=WSAStartup(wVersionRequested,&wsaData);   
          14.     if (err!=0)   
          15.     {   
          16.         return;   
          17.     }   
          18.        
          19.     if (LOBYTE(wsaData.wVersion)!=1||   
          20.         HIBYTE(wsaData.wVersion)!=1)   
          21.     {   
          22.         WSACleanup();   
          23.         return;   
          24.     }   
          25.   
          26.     //創(chuàng)建套接字   
          27.     SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);   
          28.        
          29.     SOCKADDR_IN addrSrv;   
          30.     addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");//把U_LONG的主機(jī)字節(jié)順序轉(zhuǎn)換為TCP/IP網(wǎng)絡(luò)字節(jié)順序   
          31.     addrSrv.sin_family=AF_INET;   
          32.     addrSrv.sin_port=htons(6000);   
          33.   
          34.     //向服務(wù)器發(fā)送請(qǐng)求   
          35.     connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));   
          36.        
          37.     //接受數(shù)據(jù)   
          38.     char recBuf[100];   
          39.     recv(sockClient,recBuf,100,0);   
          40.     printf("%s\n",recBuf);   
          41.        
          42.     //發(fā)送數(shù)據(jù)   
          43.     send(sockClient,"this is 扈修非",strlen("this is 扈修非")+1,0);   
          44.     //關(guān)閉套接字   
          45.     closesocket(sockClient);   
          46.     WSACleanup();   
          47. }  

          需要加載的頭文件和庫同上
          posted @ 2009-12-15 23:24 fullfill 閱讀(160) | 評(píng)論 (0)編輯 收藏
          僅列出標(biāo)題  
          主站蜘蛛池模板: 马山县| 平江县| 诏安县| 岢岚县| 报价| 肃宁县| 北辰区| 来凤县| 保康县| 佳木斯市| 托克逊县| 六盘水市| 平江县| 海林市| 金秀| 建阳市| 商水县| 剑川县| 紫阳县| 略阳县| 乌审旗| 辽源市| 砀山县| 扎赉特旗| 白城市| 无极县| 勃利县| 巴马| 武宣县| 化州市| 金坛市| 太仆寺旗| 清原| 麻栗坡县| 桃源县| 宜兰县| 沙坪坝区| 昌吉市| 长寿区| 昂仁县| 寻乌县|