winsock2中的send函数只接受字符指针。我如何通过它发送整数或对象?
发布于 2011-08-22 16:53:24
需要作为参数传递给send()函数的const char *buf只是一个指向字节数组的指针。您需要将整数转换为字节:
const int MAX_BUF_SIZE = 1024;
int int_data = 4;
const char *str_data = "test";
char *buf = (char*) malloc(MAX_BUF_SIZE);
char *p = buf;
memcpy(&int_data, p, sizeof(int_data));
p += sizeof(int_data);
strcpy(p, str_data);
p += strlen(str_data) + 1;
send(sock, buf, p - buf, 0);
free(buf);和读取代码:
const int MAX_BUF_SIZE = 1024;
int int_data = 0;
const char *str_data = NULL;
char *buf = (char*) malloc(MAX_BUF_SIZE);
char *p = buf;
recv(sock, buf, MAX_BUF_SIZE, 0);
memcpy(p, &int_data, sizeof(int_data));
p += sizeof(int_data);
str_data = malloc(strlen(p) + 1);
strcpy(str_data, p);
p += strlen(p) + 1;
free(buf);并且复杂的对象需要被serialized到字节流。
注1:当服务器和客户端使用相同的平台(x32 / x64 / ...)时,代码示例有效。这意味着int具有相同数量的字节和相同的字节顺序。
注意2:编写代码应该检查每一步都没有缓冲区(MAX_BUF_SIZE)溢出。
发布于 2011-08-23 07:28:18
只需将值存储到一个变量中,然后将变量类型转换为char*。尽管使用char*参数,但send()和recv()函数对二进制数据进行操作。
发送:
int int_data = 4;
send(sock, (char*) &int_data, sizeof(int), 0);阅读:
int int_data;
recv(sock, (char*) &int_data, sizeof(int), 0);发布于 2011-08-22 17:49:40
通常,最简单的方法是将整数或对象打印为字符串,然后发送该字符串。文本表示更容易移植,也更容易调试。
对于创建字符串和在另一端解析它,std::stringstream可能是一个有用的类。
https://stackoverflow.com/questions/7144984
复制相似问题