当前位置: 代码迷 >> 综合 >> clientserver02简单网络通信
  详细解决方案

clientserver02简单网络通信

热度:96   发布时间:2024-02-21 20:47:23.0

client02

 

#define WIN32_LEAN_AND_MEAN
#define _CRT_SECURE_NO_WARNINGS
#include<windows.h>
#include<WinSock2.h>
#include<iostream>
#include<stdio.h>

using namespace std;
#pragma comment(lib,"ws2_32.lib")//动态链接库
//可以在属性的链接库中添加

int main1_1(){
    //启动Windows Socket程序
    WORD ver = MAKEWORD(2, 2);
    WSADATA dat;
    WSAStartup(ver, &dat);

    //1、建立socket
    SOCKET sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    // 2、连接服务器
    sockaddr_in _sin = {};
    _sin.sin_family = AF_INET;
    _sin.sin_port = htons(4567);//host to net unsigned short
    _sin.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
    int ret = connect(sock, (sockaddr*)&_sin, sizeof(sockaddr_in));
    if (SOCKET_ERROR == ret)
        printf("绑定网络端口失败。。。");


    while (true){

        //3、输入请求命令
        char cmdBuf[128] = {};
        cout << "发送数据给服务器:" << endl;
        scanf("%s", cmdBuf);

        // 4、处理请求命令
        if (0 == strcmp(cmdBuf, "exit")){
            printf("收到exit,任务结束");
            break;
        }
        else{
            //5、向服务器发送请求命令
            send(sock, cmdBuf, strlen(cmdBuf) + 1, 0);

            //6、接收服务器的信息
            char recvBuf[128] = {};
            int nlen = recv(sock, recvBuf, 128, 0);
            if (nlen > 0){
                printf("接收到的数据:%s\n", recvBuf);
            }
        }
    }

 


    // 7、关闭套接字
    closesocket(sock);


    WSACleanup();
    system("pause");
    return 0;
}

 

 

 

server02

 

#define WIN32_LEAN_AND_MEAN
#include<windows.h>
#include<WinSock2.h>
#include<iostream>


#pragma comment(lib,"ws2_32.lib")//动态链接库
//可以在属性的链接库中添加

int main1_1(){
    //启动Windows Socket程序
    WORD ver = MAKEWORD(2, 2);
    WSADATA dat;
    WSAStartup(ver, &dat);

    //1、建立socket
    SOCKET sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    // 2、绑定网络端口
    sockaddr_in _sin = {};
    _sin.sin_family = AF_INET;
    _sin.sin_port = htons(4567);//host to net unsigned short
    _sin.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");

    if (SOCKET_ERROR == bind(sock, (sockaddr*)&_sin, sizeof(sockaddr_in)))
        printf("绑定网络端口失败。。。");

    //3、listen 监听端口

    if (SOCKET_ERROR == listen(sock, 5))
        printf("监听网络端口失败。。。");

    //4、accept 等待客户端连接
    sockaddr_in clientAddr = {};
    int nAddrlen = sizeof(sockaddr_in);
    SOCKET _cSocket = INVALID_SOCKET;

    char msgBuf[] = "hello, I am server...";

    _cSocket = accept(sock, (sockaddr*)&clientAddr, &nAddrlen);

    if (INVALID_SOCKET == _cSocket){
        printf("错误,接收到无效客户端。。。");
    }
    printf("新客户端加入:socket=%d,IP=%s\n", (int)_cSocket,inet_ntoa(clientAddr.sin_addr));

    char _recvBuf[128] = {};
    while (true){

        //5、接收客户端请求数据

        int nLen = recv(_cSocket, _recvBuf, 128, 0);

        if (nLen <= 0){
            printf("客户端已退出。。。");
            break;
        }
        printf("收到客户端的信息为:%s", _recvBuf);

        //6、处理请求

        if (0 == strcmp(_recvBuf, "get")){
            char msgBuf[] = "I am server...";
            send(_cSocket, msgBuf, strlen(msgBuf) + 1, 0);
        }
        else if (0 == strcmp(_recvBuf, "Age")){
            char msgBuf[] = "I am 18...";
            send(_cSocket, msgBuf, strlen(msgBuf) + 1, 0);
        }
        else{
            char msgBuf[] = "????";
            send(_cSocket, msgBuf, strlen(msgBuf) + 1, 0);
        }
    
        printf("发送成功");

    }

    // 6、关闭套接字
    closesocket(sock);


    WSACleanup();
    printf("已退出,任务结束");
    system("pause");
    return 0;
}