如题,求用socket进行本机进程间通讯的例子

解决方案 »

  1.   

    如果楼主是学生为了应付作业的话,最好还是自己做的
    多多实践对自己真的很有帮助,
    我有这样的感受,因为我也是一个初学着,希望我们以后一起+U
    给出的例子如下:
    服务器代码:
    #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;
    }
      

  2.   

    客户端代码:
    #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;
    }
      

  3.   

    本机进程间通讯一般不用socket实现,可以使用管道,WM_COPYDATA等方式
      

  4.   

    共享数据,共享内存,注册表,文件,WM_COPYDATA