在C/ c++中通过套接字发送int
Send int over socket in C/C++
我在通过套接字发送整数数组时遇到了麻烦。代码如下所示
程序1:(在windows上运行)
int bmp_info_buff[3];
/* connecting and others */
/* Send informations about bitmap */
send(my_socket, (char*)bmp_info_buff, 3, 0);
程序2:(运行在中微子上)
/*buff to store bitmap information size, with, length */
int bmp_info_buff[3];
/* stuff */
/* Read informations about bitmap */
recv(my_connection, bmp_info_buff, 3, NULL);
printf("Size of bitmap: %dnwidth: %dnheight: %dn", bmp_info_buff[0], bmp_info_buff[1], bmp_info_buff[2]);
应该打印出来位图大小:64
宽度:8
高度:8
位图大小:64
宽度:6
身高:4096
我做错了什么?
发送bmp_info_buff
数组为char数组时,bmp_info_buff
的大小不是3而是3 * sizeof(int)
recv
send(my_socket, (char*)bmp_info_buff, 3, 0);
recv(my_connection, bmp_info_buff, 3, NULL);
send(my_socket, (char*)bmp_info_buff, 3*sizeof(int), 0);
recv(my_connection, bmp_info_buff, 3*sizeof(int), NULL);
send()
和recv()
的size参数以字节为单位,而不是int
s。你发送/接收的数据太少了。
:
send(my_socket, bmp_info_buff, sizeof bmp_info_buff, 0);
和
recv(my_connection, bmp_info_buff, sizeof bmp_info_buff, 0);
注意:
- 这使得你的代码对字节序问题很敏感。
-
int
的大小在所有平台上都是不一样的,你也需要考虑到这一点。 - 无需强制转换指针参数,它是
void *
。 - 你还应该添加代码来检查返回值,I/O可能失败!
-
recv()
的最后一个参数不应该是你代码中的NULL
,它是一个标志整数,就像send()
一样。
相关文章:
- 当套接字连接断开时检测C/C++Unix
- 通过套接字[TCP]传输数据 如何在C / C ++中打包多个整数并使用send() recv()传输数据
- 如何通过套接字将文本文件的内容从服务器发送到客户端
- 如何在C/C++中用FD_set Unix设置套接字文件描述符
- 套接字读取后,我在缓冲区中看到意外输入
- 如何在CPP中创建应该在Windows和Linux上运行的套接字?
- 我可以与 python 服务器而不是 c++ 客户端建立 tcp/ip 套接字吗?
- 套接字连接"Operation not permitted"错误,甚至使用升压/平发器根.cpp
- WINAPI 注册应用程序重新启动时不清除打开的套接字
- (Winsock) UDP 接收工作正常,但同一套接字的发送失败
- 在 UDP 套接字上发送结构、浮点数和 int C++
- 如何通过套接字发送 int
- 通过套接字发送时,字符变为int
- .NET 如何通过套接字 C-Sharp 获取 int
- 如何通过套接字C++服务器/Java客户端发送int
- 在套接字中使用 send() 方法发送 "string" 和"int" var
- 将数据从两种不同的数据结构插入 std::map <std::string, int> mymap 并通过套接字发送
- 在TCP套接字连接上发送int值
- 套接字绑定不会返回 int
- 在C/ c++中通过套接字发送int