windows socket 数据简单结构化

client

struct DataPackage {
    int age;
    char name[32];
};
//结构化的网络消息
int function07() {
    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;
        }
        DataPackage *p = (DataPackage*)szRecv;
        printf("[server] msg: age=%d name=%s\n", p->age, p->name);
    }

    destroy(sktCli);
    return 0;
}

server

struct DataPackage {
    int age;
    char name[32];
};

//结构化的网络消息
int function07() {
    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, szCmd, sizeof(szCmd), 0);
        if (ret == SOCKET_ERROR) {
            printf("[server] recv error ...\n");
            break;
        }
        if (ret == 0) {
            printf("[client] exit ...\n");
            break;
        }
        printf("[client] %s\n", szCmd);
        char szMsg[1024];
        if (strcmp(szCmd, "getInfo") == 0) {
            DataPackage dp = {1000, "爱白菜的小昆虫"};
            send(sktCli, (const char *)&dp, sizeof(dp), 0);
        }
        else {
            sprintf(szMsg, "%s", "???.");
            send(sktCli, szMsg, strlen(szMsg) + 1, 0);
        }
    }

    destroy(sktServ);
    return 0;
}

原文地址:https://www.cnblogs.com/xuqiulin/p/11437589.html

时间: 2024-11-04 23:52:28

windows socket 数据简单结构化的相关文章

windows socket 完善数据简单结构化

client //交互命令 enum CMD { CMD_LOGIN, CMD_LOGIN_RESULT, CMD_LOGOUT, CMD_LOGOUT_RESULT, CMD_ERROR }; //消息头 struct DataHeader { int cmd;//消息指令 int dataLength;//消息长度 }; //登录消息 struct Login : public DataHeader { Login() { cmd = CMD_LOGIN; dataLength = size

【windows socket+UDPserverclient】

Windows Socket+UDPserverclient Winsock是 Windows下套接字标准.                    1.UDP socket编程:          UDP(用户数据报协议)是一个无连接.不可靠的传输数据,其特点是简单,快捷.相比与TCP,UDP不须要建立连接(不需connect.accept函数),数据发送接收之后,不须要终止连接.基于UDP的程序,避免了TCP执行的开销,在效率与速度上具有更好的表现.          UDP是无连接的,可能会

Windows Socket五种I/O模型——代码全攻略(转)

Winsock 的I/O操作: 1. 两种I/O模式 阻塞模式:执行I/O操作完成前会一直进行等待,不会将控制权交给程序.套接字 默认为阻塞模式.可以通过多线程技术进行处理. 非阻塞模式:执行I/O操作时,Winsock函数会返回并交出控制权.这种模式使用 起来比较复杂,因为函数在没有运行完成就进行返回,会不断地返回 WSAEWOULDBLOCK错误.但功能强大.为了解决这个问题,提出了进行I/O操作的一些I/O模型,下面介绍最常见的三种: Windows Socket五种I/O模型——代码全攻

Windows Socket编程示例-TCP示例程序

前面一部分是介绍,后面有示例 1.网络中进程之间如何通信? 首要解决的问题是如何唯一标识一个进程,否则通信无从谈起!在本地可以通过进程PID来唯一标识一个进程,但是在网络中这是行不通的.其实TCP/IP协议族已经帮我们解决了这个问题,网络层的"ip地址"可以唯一标识网络中的主机,而传输层的"协议+端口"可以唯一标识主机中的应用程序(进程).这样利用三元组(ip地址,协议,端口)就可以标识网络的进程了,网络中的进程通信就可以利用这个标志与其它进程进行交互. 使用TCP

c++下基于windows socket的单线程服务器客户端程序

今天自己用编写了一个简单的c++服务器客户端程序,注释较详细,在此做个笔记. windows下socket编程的主要流程可概括如下:初始化ws2_32.dll动态库-->创建套接字-->绑定地址信息-->服务器进行监听/客户端连接服务器-->数据交换-->关闭套接字对象. 服务器端: 1 #include <Winsock2.h> 2 #include <Ws2tcpip.h> 3 #include <iostream> 4 5 #prag

【windows socket+HTTP服务器客户端】

Windows Socket+HTTP服务器客户端 Winsock是 Windows下套接字标准.                 1.HTTP协议:          HTTP是基于客户端/服务器的请求,响应协议.        请求:由客户端向服务器发起,指定了要从服务器获取的资源.请求包含了协议首部,指明了客户端处理能力信息,如可以处理的文件类型,支持的语言,编码方式等.        响应:服务器收到客户端的请求后,解析这个请求,构造响应,并发送给客户端.响应同样包含了协议首部,指明了服

【windows socket+UDP服务器客户端】

Windows Socket+UDP服务器客户端 Winsock是 Windows下套接字标准.                    1.UDP socket编程:          UDP(用户数据报协议)是一个无连接,不可靠的数据传输,其特点是简单,快捷.相比与TCP,UDP不需要建立连接(不需connect.accept函数),数据发送接收之后,不需要终止连接.基于UDP的程序,避免了TCP运行的开销,在效率与速度上具有更好的表现.          UDP是无连接的,可能会有数据的丢失

【windows socket编程+服务器客户端】

Windows Socket编程与服务器客户端示例 Winsock是 Windows下套接字标准. Socket套接字基于计算机网络,提供同一系统上不同进程或由局域网连接在一起的不同机器上的进程间通讯功能.如下图: 套接字通过IP地址,Port端口号标识,通过这个标识可以在整个局域网定位一个套接字,通过套接字进程便可以相互传输数据.如:进程A与进程B之间欲通过套接字通信,首先进程A创建一个有IP地址,端口号唯一标识的套接字,进程B同样创建一个有IP地址,端口号唯一标识的套接字,进程A,B便可以通

【Windows socket+IP+UDP+TCP】网络基础

Windows Socket+网络 Winsock是 Windows下套接字标准.          Winsock 编程分为UDP[Windows socket + UDP],TCP[Windows socket + TCP]编程.Windows socket 建立在网络基础之上,UDP编程採用用户数据报协议(User Datagram Protocol ,UDP),TCP编程採用传输控制协议(Transmission Control Protocol,TCP).UDP.TCP不同的特性.适应