c - C 中的 UDP 字符串解析问题

标签 c

我在尝试传入和解析数据时遇到问题。 具体来说,我需要通过 UDP 发送 ([Unsigned Char] [String of any Length])。服务器应该能够解析此信息。不幸的是,使用 sscanf 我没有运气。请帮忙!

客户端代码:

char sendline[1000];
sendline[0] = (unsigned char)atoi(argv[3]); // Place Number at start of Buffer
sendline[1] = (' '); // Padding For Parsing
memcpy(&sendline[2], argv[4], sizeof(argv[4])); // Write String into Buffer after space

result  = sendto(sockfd,&sendline,(sizeof(sendline)),0,(struct sockaddr *)&servaddr,sizeof(servaddr));

服务器代码:

unsigned char test;
char strFirst [500];
char buff[1000];
len = sizeof(cliaddr);
n = recvfrom(sockfd, buff, sizeof(buff), 0, (struct sockaddr *)&cliaddr, &len);
buff[n] = '\0'; // Null Terminate
printf("%u %s\n", buff[0], &buff[2]); // Prints Fine
sscanf(buff, "%u %s", &test, &strFirst); // Attempted Parse of Data
printf("%u \n %s \n", test, strFirst);// Prints 0 and (null)

最佳答案

在服务器端的源代码中,我检测到两个错误:

1-因为第一个参数是二进制编码的(unisgned char),所以 print("%u"..) 正在工作,但等待十进制值字符串的 sscanf(.."%u"..) 不起作用编码。您无法使用 sscanf 读取此值,而只需使用:

test = (unsigned char)(buff[0]);

2- 在 sscanf 函数中,“%s”说明符等待 (char *)。您可能必须使用 strFirst 而不是 &strFirst。

sscanf(&(buff[2]), "%s", strFirst);

If you have to use only data string-encoding, you could simplify and enhance the client side by using the magic 'sprintf' function.

在客户端,源代码可能是:

char sendline[1000];
int result;

sprintf(sendline,"%u %s",atoi(argv[3]),argv[4]);
result  = sendto(sockfd,sendline,(strlen(sendline)+1),0,(struct sockaddr *)&servaddr,sizeof(servaddr));

在服务器端,源代码可能是:

char buff[1000];
char *strFirst;
int len,nRead,nLen;

len = sizeof(cliaddr);
nRead = recvfrom(sockfd, buff, sizeof(buff), 0, (struct sockaddr *)&cliaddr, &len);
buff[nRead] = '\0'; // optional due to nRead = strlen(sendline)+1
sscanf(buff, "%u %s", &nLen, strFirst);

就这些了!!!

关于c - C 中的 UDP 字符串解析问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40079375/

相关文章:

C用户定义函数问题

c++ - 如何重新解释特殊字符 'source code'

c - 在C中获取数组的大小

C - 如何打开窗口资源管理器

c - 互斥量是否保证可见性 (GLib)?

c - 在 Ubuntu 中安装 CodeLite IDE 时出错

c++ - 为什么我们需要在编译期间包含 C 或 CPP 声明文件而不是像 iostream 这样的默认库?

c - 结构体指针赋值

c - realloc 如何处理使用 calloc 分配的内存?

关于数组和最小值的c编程?