gpt4 book ai didi

c - 如何从客户端(用 C 编写)接收 int 数组到服务器(用 python 编写)

转载 作者:太空宇宙 更新时间:2023-11-04 04:48:05 26 4
gpt4 key购买 nike

我只想从客户端向服务器发送数组 adc_array=[w, x, y, z]。下面是客户端代码,而我的服务器是在只接受 json 的 python 中。编译代码时我没有收到任何错误,但收到 2 条警告:1- 警告:“UDPWrite”传递参数 2 中的指针目标的符号不同。2- 警告:文件末尾没有换行符。

但是在服务器端,我无法接收整个数组,而只是获取数组的第一个字符,即 [ 。

我是 C 编程的新手。如果有任何帮助,我将不胜感激。

// Main function
void FlyportTask()
{
// Flyport connects to default network
WFConnect(WF_DEFAULT);
while(WFGetStat() != CONNECTED);
vTaskDelay(25);
UARTWrite(1,"Flyport Wi-fi connected...hello world!\r\n");

BOOL UdpSocketOpenRequest=TRUE;
BYTE UdpSocket=0;


// openinging UDP socket
if (UdpSocketOpenRequest) //open socket
{
UdpSocketOpenRequest=FALSE;
if (UdpSocket!=0) //if this is not equals to zero
{
UDPClientClose(UdpSocket);
}
UARTWrite(1,"OpenSocket\r\n");
UdpSocket= UDPClientOpen("10.0.0.106", "8000"); //Client socket opening
}


while(1)
{
//defining pointer
int *array_pointer;
int adc_array[4];
int j;
char buf[10]; //buffer to print

// I have made a separate function to get adc values which returns the pointer to the array.
array_pointer = get_adcval();

UARTWrite (1, "ADC Array\r\n");

for (j = 0; j < 4; j++)
{
adc_array[j] = *(array_pointer + j);
sprintf (buf, "%d", adc_array[j]);
UARTWrite (1, buf);
UARTWrite (1, "\n");
}


//if UDP socket is open, send the data
if ((UdpSocket!=0))
{
// defining pointer of serial_out
char *s_out;
int size;

// creating a JSON array from adc_array with 4 elements
cJSON * int_array = cJSON_CreateIntArray(adc_array,4);

// Serializing the array
s_out = cJSON_Print(int_array);

//Writing to the serial output/monitor
UARTWrite(1, "\r\narray to be sent\r\n");
UARTWrite(1, s_out);
UARTWrite(1,"\r\n");

// Assume adc_array=[1021, 1022, 1023, 1024]
// I get output [1021, 1022, 1023, 1024]

//compose message
size = strlen(s_out);
UDPWrite (UdpSocket, s_out, size);

// at the server side, i just receive only first character i.e. [

/*to free the memory */
free(s_out);

}



//
// remember to add delay vTaskDelay(50) 50ms
//remember to close the socket


}


}

最佳答案

您没有为 s_out 分配内存。即使它在 UART 上打印了正确的结果,但它仍然可以被下一行中的任何 UARTWrite 函数或 strlen() 函数覆盖。如果它被覆盖,则“size”变量将获取内存中从第一个字节到第一个空字符的字节数(这就是 strlen() 的功能)。因此“大小”值可以是完全随机的。它可以是 0 或 1 或 1000。如果大小不正确,那么您将只收到“大小”字节数。在您的情况下, size 可能是一个。尝试在 UDPWrite 之前打印尺寸。通过在序列化数组之前添加 malloc 调用来解决此问题。

如果它也不起作用,请检查您的接收器端。如果您从经过测试的 python 客户端(或任何其他经过测试或可靠的客户端)发送一些虚拟数据,您的接收器是否工作正常?如果不是,则说明您的接收器有问题。

关于c - 如何从客户端(用 C 编写)接收 int 数组到服务器(用 python 编写),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18967207/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com