zoukankan      html  css  js  c++  java
  • 用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; }

  • 相关阅读:
    UML用例图
    directX--大约CSource和CSourceStream (谁在叫fillbuffer)
    【云】如何建立微信在全国卖场地图?
    C++ Primer 学习笔记_38_STL实践与分析(12)--集成的应用程序容器:文本查询程序
    Android使用SVG矢量创建很酷的动态效率!
    观察者模式(observer行为)c#简单的例子
    Oracle MySQL
    tomcat 跨域
    Jms Spring
    Ehcache使用
  • 原文地址:https://www.cnblogs.com/mazhenyu/p/1322961.html
Copyright © 2011-2022 走看看