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

  • 相关阅读:
    补点基础:Javascript中的类和闭包
    Extjs学习笔记之五——一个小细节renderTo和applyTo的区别
    Extjs学习笔记之八——继承和事件基础
    总结一篇
    再补点基础:Javascript的构造函数和constructor属性
    Extjs学习笔记之六——面版
    Extjs学习笔记之七——布局
    Extjs学习笔记之九——数据模型(上)
    引擎功率与扭矩哪个比较重要
    毕业三年,同学基本都辞职了,大部分人看完很有同感~
  • 原文地址:https://www.cnblogs.com/mazhenyu/p/1322961.html
Copyright © 2020-2023  润新知