enum Choose { TcpHeartbeat=200, TcpExeCmd }; struct DataPacket { int clientSockfd; enum Choose choose; char *cmdBuf; char *returnValue; }; struct DataPacket datapacket; struct DataPacket ReceivePackets; int InitializePointer(char option[]) { next: if (strstr(option, "init")) { ReceivePackets.cmdBuf = calloc(BUFFER_SIZE, sizeof(char)); ReceivePackets.returnValue = calloc(BUFFER_SIZE, sizeof(char)); datapacket.cmdBuf = calloc(BUFFER_SIZE, sizeof(char)); datapacket.returnValue = calloc(BUFFER_SIZE, sizeof(char)); if (ReceivePackets.cmdBuf == NULL || ReceivePackets.returnValue == NULL || datapacket.cmdBuf == NULL || datapacket.returnValue == NULL) { CON_LOG("memory allocation failed"); goto next; } } else if (strstr(option, "free")) { free(datapacket.cmdBuf); datapacket.cmdBuf = NULL; free(ReceivePackets.returnValue); ReceivePackets.returnValue = NULL; free(datapacket.cmdBuf); datapacket.cmdBuf = NULL; free(ReceivePackets.cmdBuf); ReceivePackets.cmdBuf = NULL; } else { return 0; } return 1; } 客户端 if(InitializePointer("init") < 0) { CON_LOG("==="); return -1; } datapacket.clientSockfd=client_sockfd; datapacket.choose=TcpHeartbeat; ssize_t bytes_written = write(datapacket.clientSockfd , &datapacket,sizeof(datapacket)); 服务器 CON_LOG("==="); // 读取数据 ssize_t num_bytes = read(datapacket.clientSockfd,&ReceivePackets,sizeof(ReceivePackets)); CON_LOG("==="); if (num_bytes > 0) { // 成功读取了一定数量的数据 CON_LOG("==="); CON_LOG("###read######fd:%d,cmdBuf:%s# returnValue:%s",ReceivePackets.clientSockfd,ReceivePackets.cmdBuf,ReceivePackets.returnValue); CON_LOG("==="); 提问:为什么服务器执行到CON_LOG("###read######fd:%d,cmdBuf:%s# returnValue:%s",ReceivePackets.clientSockfd,ReceivePackets.cmdBuf,ReceivePackets.returnValue);会出现程序错误
时间: 2024-04-11 13:31:06 浏览: 171
Java Enum和String及int的相互转化示例
根据提供的代码,服务器执行到CON_LOG("###read######fd:%d,cmdBuf:%s# returnValue:%s",ReceivePackets.clientSockfd,ReceivePackets.cmdBuf,ReceivePackets.returnValue);时出现程序错误的原因可能是以下几点:
1. 数据传输问题:在服务器端读取数据之前,确保客户端已经成功发送了数据。可以通过在客户端发送数据之前添加日志输出或调试语句,以确认数据是否被发送。
2. 数据结构问题:在服务器端读取数据之前,确保接收数据的结构体 `ReceivePackets` 的成员变量都已经正确地进行内存分配。可以使用调试器或添加日志输出来检查结构体成员变量的内存分配情况。
3. 数据读取问题:在服务器端读取数据时,需要确保读取的字节数与发送的字节数一致,以避免数据传输错误。可以通过在服务器端添加日志输出或调试语句来检查读取的字节数是否与发送的字节数相匹配。
4. 日志输出问题:确保日志输出语句中的格式化字符串和参数类型匹配,避免出现格式化错误导致程序崩溃。
请仔细检查以上可能导致程序错误的原因,并进行相应的调试和修改。如果问题仍然存在,请提供更多相关代码和错误信息以便进一步分析和解决问题。
阅读全文