通过套接字发送整数数组时出现问题
Problems sending an integer array over a socket
我正在通过套接字将整数数组从客户端发送到服务器。喜欢这个;
int arr[3] = {5, 4, 1};
send(sock , &arr, 3 , 0); //sending the votes count
并像这样在服务器中接收
recv(new_socket, arr1, 3, 0);
我在arr1[0]
中获得了正确的值,但在arr1[1]
中,我得到了66
,arr1[2]
我得到了67
我不知道这是怎么发生的,66
和67
从何而来
send()
和recv()
只对字节进行操作。 您正在发送和接收 3 个字节,但您的数组实际上是sizeof(int) * 3
个字节(在许多平台上sizeof(int)
通常是 4)。 您需要在两端使用sizeof()
,例如:
send(sock, &arr, sizeof(arr), 0);
recv(new_socket, &arr1, sizeof(arr1), 0);
但是,您还必须注意返回值,因为send()
可以发送比请求的字节少的字节,而recv()
可以接收比请求的字节少的字节。 TCP 是面向流的,而不是面向消息的。您应该在循环中调用send()
并recv()
每个字节,重新调用每个字节,直到所有预期的字节都已完全发送/接收,例如:
ssize_t sendAll(int sckt, void *data, size_t length)
{
char *bytes = (char*) data;
while (length > 0)
{
ssize_t sent = send(sckt, bytes, length, 0);
if (sent == -1) return -1;
bytes += sent;
length -= sent;
}
return 0;
}
int arr[3] = {5, 4, 1};
sendAll(sock, &arr, sizeof(arr));
ssize_t recvAll(int sckt, void *data, size_t length)
{
char *bytes = (char*) data;
while (length > 0)
{
ssize_t recvd = recv(sckt, bytes, length, 0);
if (recvd <= 0) return recvd;
bytes += recvd;
length -= recvd;
}
return 1;
}
int arr1[3];
recvAll(new_socket, &arr1, sizeof(arr1));
相关文章:
- cpp二进制搜索问题,计算给定数组中输入元素的出现次数
- 输入std::数组时出现问题
- 类对象数组的问题会导致崩溃
- 传递二维数组时出现问题
- 从 C++ 中的函数返回数组地址问题
- 使用数组时出现问题
- 打印问题.我在数组中打印值时遇到一些问题
- C++:__aligned(__alignof__) 导致字符数组数据出现问题?
- 将字节数组转换为带有字节序问题的指针
- C++ 填充数组时遇到问题
- 遇到此问题时遇到困难:允许用户输入数组的值并使用 for,而循环也输出输入的最大数字
- 这是使用回溯的 nqueen 问题,但我使用了动态 2d 数组,我的程序编译良好,但不返回任何输出
- 当我尝试通过 arduino 上的引用传递布尔数组时出现问题
- 我正在尝试解决一个需要数组总和值但代码不起作用的问题,我想做这样的事情
- 编写 cin.get() 以接收字符数组时出现问题
- 在 C++ Consol 中的数组中执行用户命令时出现问题
- 存储另一个函数返回的布尔数组时遇到问题
- 当我在 CLion 中读取数组中的 txt 文件时C++编码问题
- 运行时C++数组初始化问题
- 我在解决此错误时遇到问题.我正在努力在主函数中传递数组