加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

windows socket 数据交互

发布时间:2020-12-14 06:00:36 所属栏目:Windows 来源:网络整理
导读:client // ip地址 端口 SOCKET init( const char * IP,u_short port) { WSADATA wd; int ret = WSAStartup(MAKEWORD( 2 , 2 ), wd); if (ret != 0 ) { cout " WSAStartup error ... " endl; return INVALID_SOCKET; } cout " WSAStartup success ... " endl;

client

//ip地址 端口
SOCKET init(const char *IP,u_short port) {
    WSADATA wd;
    int ret = WSAStartup(MAKEWORD(2,2),&wd);
    if (ret != 0) {
        cout << "WSAStartup error ..." << endl;
        return INVALID_SOCKET;
    }
    cout << "WSAStartup success ..." << endl;

    //创建套接字
    SOCKET skt = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
    if (skt == SOCKET_ERROR) {
        cout << "socket error ..." << endl;
        return INVALID_SOCKET;
    }
    cout << "socket success ..." << endl;

    //服务端信息
    sockaddr_in addrServ;
    addrServ.sin_family = AF_INET;//IPV4协议
    addrServ.sin_port = htons(port);//端口
    addrServ.sin_addr.s_addr = inet_addr(IP);//IP地址

    //连接服务器
    if (connect(skt,(sockaddr *)&addrServ,sizeof(addrServ)) == SOCKET_ERROR) {
        cout << "connect error ..." << endl;
        return -1;
    }
    cout << "connect success ..." << endl;

    return skt;
}

void destroy(SOCKET skt) {
    closesocket(skt);
    WSACleanup();
}

void printMenu() {
    printf("*************************n");
    printf("*getName                *n");
    printf("*getAge                 *n");
    printf("*exit                   *n");
    printf("*************************n");
}

//socket客户端代码 客户端发送命令 接受服务器发送的消息
int function06() {
    SOCKET sktCli = init("192.168.3.18",8080);
    if (sktCli == INVALID_SOCKET) {
        return -1;
    }

    while (true) {
        printMenu();
        char szCmd[64] = {0};
        scanf("%s",szCmd);
        if (strcmp(szCmd,"exit") == 0) {
            printf("[client] exit ...n");
            break;
        }
        send(sktCli,szCmd,strlen(szCmd)+1,0);

        char szRecv[1024] = {0};
        int ret = recv(sktCli,szRecv,sizeof(szRecv),0);
        if (ret <= 0) {
            printf("[client] server exit ...n");
            break;
        }
        printf("[server] msg:%sn",szRecv);
    }

    destroy(sktCli);
    return 0;
}

server

//初始化
SOCKET init(const char *IP,&wd);
    if (ret != 0) {
        cout << "WSAStartup error ..." << endl;
        return -1;
    }
    cout << "WSAStartup success ..." << endl;

    //创建套接字
    SOCKET skt = socket(AF_INET,IPPROTO_TCP);
    if (skt == INVALID_SOCKET) {
        cout << "socket error ..." << endl;
        return -1;
    }
    cout << "socket success ..." << endl;
    //服务器信息
    sockaddr_in addrServ;
    addrServ.sin_family = AF_INET;
    addrServ.sin_port = htons(port);
    addrServ.sin_addr.s_addr = inet_addr(IP);

    //套接字绑定端口和ip
    if (bind(skt,sizeof(addrServ)) == SOCKET_ERROR) {
        cout << "bind error ..." << endl;
        return -1;
    }
    cout << "bind success ..." << endl;

    //开始监听套接字
    if (listen(skt,SOMAXCONN) == SOCKET_ERROR) {
        cout << "listen error ..." << endl;
        return -1;
    }
    cout << "listen success ..." << endl;

    return skt;
}

void destroy(SOCKET skt) {
    closesocket(skt);
    WSACleanup();
}

//接受客户端发送的命令 发送消息给客户端
int function06() {
    SOCKET sktServ = init("0.0.0.0",8080);
    if (sktServ == INVALID_SOCKET) {
        return -1;
    }

    SOCKET sktCli = accept(sktServ,NULL,NULL);
    while (true) {
        char szCmd[64] = {0};
        int ret = recv(sktCli,sizeof(szCmd),0);
        if (ret == SOCKET_ERROR) {
            printf("[server] recv error ...n");
            break;
        }
        if (ret == 0) {
            printf("[client] exit ...n");
            break;
        }
        printf("[client] %sn",szCmd);
        char szMsg[1024];
        if (strcmp(szCmd,"getName") == 0) {
            sprintf(szMsg,"%s","爱白菜的小昆虫.");
        }
        else if (strcmp(szCmd,"getAge") == 0) {
            sprintf(szMsg,"1000.");
        }
        else {
            sprintf(szMsg,"???.");
        }
        send(sktCli,szMsg,strlen(szMsg)+1,0);
    }

    destroy(sktServ);
    return 0;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读