首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在winsock2中发送其他数据类型

在winsock2中发送其他数据类型
EN

Stack Overflow用户
提问于 2011-08-22 16:46:31
回答 3查看 3.7K关注 0票数 1

winsock2中的send函数只接受字符指针。我如何通过它发送整数或对象?

EN

回答 3

Stack Overflow用户

发布于 2011-08-22 16:53:24

需要作为参数传递给send()函数的const char *buf只是一个指向字节数组的指针。您需要将整数转换为字节:

代码语言:javascript
复制
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);

和读取代码:

代码语言:javascript
复制
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)溢出。

票数 5
EN

Stack Overflow用户

发布于 2011-08-23 07:28:18

只需将值存储到一个变量中,然后将变量类型转换为char*。尽管使用char*参数,但send()recv()函数对二进制数据进行操作。

发送:

代码语言:javascript
复制
int int_data = 4;
send(sock, (char*) &int_data, sizeof(int), 0);

阅读:

代码语言:javascript
复制
int int_data;
recv(sock, (char*) &int_data, sizeof(int), 0);
票数 2
EN

Stack Overflow用户

发布于 2011-08-22 17:49:40

通常,最简单的方法是将整数或对象打印为字符串,然后发送该字符串。文本表示更容易移植,也更容易调试。

对于创建字符串和在另一端解析它,std::stringstream可能是一个有用的类。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7144984

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档