C语言udp服务器接收BC95模块发送的十六进制数据

qq_34566140 2017-10-18 11:10:25
通过编写的udp服务器,通过socket调试工具发送十六进制数据,接收到的数据正常,但是通过开发板BC95模块发送的数据接收出错,我是直接通过unsigned char数组来接收数据的,想问问是什么原因
...全文
462 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
xian_wwq 2017-10-19
  • 打赏
  • 举报
回复
是的,字符串是靠‘\0’来判定是否结束的 这对于byte[]的接收不适用 一般都是包头携带数据长度,根据数据长度来判定是否结束
老马何以识途 2017-10-18
  • 打赏
  • 举报
回复
用strlen来判断接收数据大小,只适用于该数据刚好是字符串的情况,BC95_Senddata是如何发送数据的,你清楚吗?若不知道,改成直接把buf全部打印出来,研究一下。
qq_34566140 2017-10-18
  • 打赏
  • 举报
回复


void print_client_info(const struct sockaddr_in *client_addr)
{
char ipstr[128] = {0};
inet_ntop(AF_INET, &(client_addr->sin_addr).s_addr, ipstr, sizeof(ipstr));
int client_port = ntohs(client_addr->sin_port);
printf("client IP = %s, PORT = %d\n", ipstr, client_port);
}

int main(int agrc, const char *argv[])
{
int socket_fd;
socklen_t addr_len;
struct sockaddr_in serveraddr, clientaddr;
unsigned char buf[MAXLINE] = {0};

bzero(&serveraddr, sizeof(serveraddr));
bzero(&clientaddr, sizeof(clientaddr));

serveraddr.sin_family = AF_INET;
serveraddr.sin_addr.s_addr = htonl(INADDR_ANY);
serveraddr.sin_port = htons(SERVER_PORT);

addr_len = sizeof(clientaddr);

socket_fd = socket(AF_INET, SOCK_DGRAM, 0);
bind(socket_fd, (struct sockaddr *)&serveraddr, sizeof(serveraddr));
while(1) {

addr_len = sizeof(clientaddr);

memset(buf, 0, sizeof(buf));

recvfrom(socket_fd, buf, sizeof(buf), 0, (struct sockaddr *)&clientaddr, &addr_len);

print_client_info(&clientaddr);

// printf("recive from client:\n %s\n",buf);
printf("buf大小: %d\n",strlen(buf));

for(int i = 0; i < strlen(buf); i++) {
buf[i] = toupper(buf[i]);
printf("%X\n",buf[i]);
}
printf("\n");

sendto(socket_fd, buf, strlen(buf), 0, (const struct sockaddr *)&clientaddr, sizeof(clientaddr));
}
close(socket_fd);
return 0;
}
老马何以识途 2017-10-18
  • 打赏
  • 举报
回复
你都没说具体出错信息,怎么帮你

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧