C++ SOCKET 例子

/創建write.txt文本。創建服務器端文件server.cpp,代碼如下:

#include<winsock2.h>  
#include<iostream>
#include<fstream.h>

#pragma   comment(lib,   "ws2_32.lib")  

#define   PORT             5000  
#define   MAXLISTEN   5    

void   main(void)  
{  
WORD         wVersionRequested;  
WSADATA   wsaData;  
int           err;  

wVersionRequested   =   MAKEWORD(2,   2);  

err   =   WSAStartup(wVersionRequested,   &wsaData);  
if(err   !=   0)    
{  
   return;  
}  

if(LOBYTE(wsaData.wVersion)   !=   2   ||   HIBYTE(wsaData.wVersion)   !=   2)    
{  
   WSACleanup();  
   return;    
}    
   
SOCKET   sock;  
   
sock   =   socket(AF_INET,   SOCK_STREAM,   0);  
if(sock   ==   INVALID_SOCKET)  
{  
   printf("socket   fail   !");  
   Sleep(3000);  
   return   ;  
}  
   
struct   sockaddr_in   localaddr;  

localaddr.sin_family               =   AF_INET;    
localaddr.sin_port               =   htons(PORT);  
localaddr.sin_addr.S_un.S_addr   =   htonl(INADDR_ANY);  
   
int   nBind;  
   
nBind   =   bind(sock,   (struct   sockaddr   *)&localaddr,   sizeof(struct   sockaddr_in));  
if(nBind   ==   SOCKET_ERROR)  
{  
   printf("bind   fail   !");  
   ::Sleep(3000);  
   return   ;      
}  
   
int   nListen;    
   
nListen   =   listen(sock,   MAXLISTEN);  
if(nListen   ==   SOCKET_ERROR)  
{  
   std::cout<<"listen   fail   !"<<std::endl;  
   ::Sleep(3000);  
   return   ;      
}  
   
while(true)  
{  
   SOCKET   newsocket;    
  
   struct   sockaddr_in   clientaddr;    
  
   int   length;    
  
   length   =   sizeof(struct   sockaddr_in);    
  
   newsocket   =   accept(sock,   (struct   sockaddr   FAR   *)&clientaddr,   &length);  
   if(newsocket   ==   INVALID_SOCKET)  
   {  
    printf("accept   fail   !");
    ::Sleep(3000);  
   
    int   error   =   WSAGetLastError();  
   
    std::cout<<error<<std::endl;  
    ::Sleep(3000);  
   
    break   ;    
   }
  
   //send   file
   ifstream ofile("write.txt");//讀取write.txt裏面的文本發送
   const int nima= 1024*10;
   char   buffer[nima]; // = "this   is   the   server   !";
   ofile.read(buffer,nima);
   ofile.close();
  
   int   nSend;  
   nSend   =   send(newsocket,   buffer,   sizeof(buffer),   0);  
  
   if(nSend   ==   SOCKET_ERROR)  
   {  
    printf("send   fail   !");
    Sleep(3000);  
    break   ;    
   }  
   //  
   closesocket(newsocket);  
}  
   
closesocket(sock);  
WSACleanup();    
}

 

 

 

 

 

 

 

 

 

 

 

-----------------------------------------------------------------------------------------------------------------------------

//創建客戶端文件client.cpp,代碼如下:

#include   <winsock2.h>  
#include   <winbase.h>  
#include   <iostream>  

#pragma   comment(lib,   "ws2_32.lib")  

#define   PORT   5000  

void   main(void)  
{  
WORD         wVersionRequested;  
WSADATA   wsaData;  
   
int           err;  

wVersionRequested   =   MAKEWORD(2,   2);  

err   =   WSAStartup(wVersionRequested,   &wsaData);  
if(err   !=   0)    
{  
   return;  
}  

if(LOBYTE(wsaData.wVersion)   !=   2   ||   HIBYTE(wsaData.wVersion)   !=   2)    
{  
   WSACleanup();  
   return;    
}  

   
SOCKET   sock;  
sock   =   socket(AF_INET,   SOCK_STREAM,   0);
struct   sockaddr_in     server;  
   
server.sin_family =   AF_INET;  
server.sin_port =   htons(PORT);  
server.sin_addr.S_un.S_addr   =   inet_addr("192.168.0.31");  
   
int   nConnect;    

nConnect   =   connect(sock,   (struct   sockaddr   FAR*)&server,   sizeof(struct   sockaddr_in));  
if(nConnect   ==   SOCKET_ERROR)  
{  
   int   erro   =   WSAGetLastError();  
  
   printf("connect   fail   !");
   Sleep(3000);    
  
   closesocket(sock);  
   WSACleanup();    
   return   ;    
}  
   
char   buffer[1024];   
int     nAmount;  
   
nAmount   =   recv(sock,   buffer,   sizeof(buffer),   0);  
if(nAmount   ==   SOCKET_ERROR)  
{  
   closesocket(sock);  
   WSACleanup();    
   return   ;    
}  
   
std::cout<<buffer<<std::endl;    
Sleep(3000);  
   
closesocket(sock);  
WSACleanup();    
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章