用socket进行本机进程间通讯

服务器代码:
#include
< winsock2.h >
#include
< iostream >
#include
< windows.h >
using namespace std;
// extern "C"{

int main( int argc, char ** argv){
   
int clientlen;
   
struct sockaddr_in clientaddr;
   
struct hostent * hp;
   
char * haddrp;
   
char chInfo[ 64 ];
    WSADATA wsaData;
   
   
int ret = WSAStartup(MAKEWORD( 2 , 2 ), & wsaData);
   
if (ret != 0 ){
        cout
<< " Error " << endl;
        WSACleanup();
    }

   
if (gethostname(chInfo, sizeof (chInfo)))
        cout
<< " \n无法获取主机!\n " ;
    cout
<< chInfo << endl;

    SOCKET serverSocket
= socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
   
if (serverSocket == INVALID_SOCKET){
        MessageBox(NULL,
" 创建套接字失败! " , " Warning " , MB_ICONEXCLAMATION);
        closesocket(serverSocket);
        WSACleanup();
    }

    sockaddr_in localaddr;
    localaddr.sin_addr.s_addr
= htonl(INADDR_ANY);
    localaddr.sin_family
= AF_INET;
    localaddr.sin_port
= htons( 6000 );
   
if (bind(serverSocket, ( const struct sockaddr * ) & localaddr, sizeof (localaddr)) == SOCKET_ERROR){
        MessageBox(
0 , " 绑定地址失败! " , " Warning " , MB_ICONEXCLAMATION);
        closesocket( serverSocket);
        WSACleanup();
    }

    listen(serverSocket,
5 );

   
while ( true )
    {
        clientlen
= sizeof (clientaddr);
        SOCKET connfd
= accept(serverSocket, ( struct sockaddr * ) & clientaddr, & clientlen);
        hp
= gethostbyaddr(( const char * ) & clientaddr.sin_addr.S_un, sizeof (clientaddr.sin_addr.S_un), AF_INET);
        haddrp
= inet_ntoa(clientaddr.sin_addr);
        cout
<< " server connected to " << hp -> h_name << " ( " << haddrp << " ) " << endl;

       
int length;
       
// char buffer[5];
       
// if ((length = recv(connfd, buffer, 5, 0)) == SOCKET_ERROR)
        char buffer[ 10240 ];
       
if ((length = recv(connfd, buffer, 10240 , 0 )) == SOCKET_ERROR)
            MessageBox(
0 , " 接收失败! " , " Warning " , MB_ICONEXCLAMATION);
       
for ( int i = 0 ;i < length;i ++ )
            cout
<< buffer[i];
        cout
<< endl;

        closesocket(connfd);
    }
    closesocket( serverSocket);
    WSACleanup();
   
   
return 0 ;
}
 
客户端代码:
C/C++ code

     
#include < winsock2.h > #include < iostream > #include < windows.h > #include < memory.h > using namespace std; int main(){ struct hostent * hp; struct in_addr addr; struct sockaddr_in serverAddr; WSADATA wsaData; int ret = WSAStartup(MAKEWORD( 2 , 2 ), & wsaData); if (ret != 0 ){ cout << " Error " << endl; WSACleanup(); } SOCKET clientfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (clientfd == INVALID_SOCKET) { MessageBox( 0 , " 创建套接字失败! " , " Warning " , MB_ICONEXCLAMATION); closesocket(clientfd); WSACleanup(); } addr.s_addr = inet_addr( " 192.168.168.135 " ); hp = gethostbyaddr(( const char * ) & addr, sizeof (addr),AF_INET); memset( & serverAddr, ' \0 ' , sizeof ( struct sockaddr_in)); memcpy(( char * ) & serverAddr.sin_addr,( char * )hp -> h_addr_list[ 0 ],hp -> h_length); // OK serverAddr.sin_family = hp -> h_addrtype; serverAddr.sin_port = htons( 6000 ); if (connect(clientfd, ( struct sockaddr * ) & serverAddr, sizeof (serverAddr)) < 0 ) cout << " error " << endl; int length; char buffer[ 5 ]; for ( int i = 0 ;i < 5 ;i ++ ) buffer[i] = ' a ' ; if ((length = send(clientfd, buffer, 5 , 0 )) == SOCKET_ERROR) MessageBox( 0 , " 发送失败! " , " Warning " , MB_ICONEXCLAMATION); return 0 ; }

你可能感兴趣的:(socket)