用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; }

原文地址:https://www.cnblogs.com/mazhenyu/p/1322961.html