社区
C语言
帖子详情
C语言udp服务器接收BC95模块发送的十六进制数据
qq_34566140
2017-10-18 11:10:25
通过编写的udp服务器,通过socket调试工具发送十六进制数据,接收到的数据正常,但是通过开发板BC95模块发送的数据接收出错,我是直接通过unsigned char数组来接收数据的,想问问是什么原因
...全文
462
4
打赏
收藏
C语言udp服务器接收BC95模块发送的十六进制数据
通过编写的udp服务器,通过socket调试工具发送十六进制数据,接收到的数据正常,但是通过开发板BC95模块发送的数据接收出错,我是直接通过unsigned char数组来接收数据的,想问问是什么原因
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
你都没说具体出错信息,怎么帮你
NBIOT(BC35、BC26、BC28) AT指令通过HTTP连接onenet平台
发送
温湿度GPS定位,HTTP协议请求详解
HTTP简介 超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和
接收
HTML页面的方法。1960年美国人Ted Nelson构思了一种通过计算机处理文本信息的方法,并称之为超文本(hypertext),这成为了HTTP超文本传输协议标准架构的发展...
C/C++笔试题(很多)
微软亚洲技术中心的面试题!!! 1.进程和线程的差别。 线程是指进程内的一个执行单元,也是进程内的可调度实体. 与进程的区别: (1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位 (2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行 (3)拥有资源:进程是拥有资源的独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源. (4
Linux系统管理常用命令
1. 时间date 1)显示当前时间: date .//Wed Jul 29 11:05:11 CST 2009 2)date修改时间:date -s date 修改时间2007-08-29 14:41 date -s 14:36:30 //时间为14点36分30秒 date 082914362007 //时间为08月29日14点36分2007年 date 082914...
软件设计师知识体系归纳总结
软件设计师知识体系归纳总结 历年考点 上午题 下午题 第一章 计算机组成原理及体系结构 1.
数据
的表示 1.1进制转换 (1) R进制转十进制 (2) 十进制转R进制 (3) 二进制 八进制
十六进制
的转换 2.原码 反码 补码 移码 2.1相互关系 原码->反码->补码->移码 原码:原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值. 第一位是符号位. 因为第一位是符号位, 所以8位二进制数的取值范围就是: [1111 1111 , 0111 1111]
Linux高并发
服务器
开发
参考链接:https://www.ceyewan.top/p/eb71853c.html 一、Linux系统编程入门 1.1 GCC工作流程 gcc .c文件名 -o 输出文件名g++ .cpp文件名 -o 输出文件名生成可执行文件 1.2静态库 提前编写好的,编译的时候需要加到main的编译文件中去 1.2.1命名规则: linux: libxxx.alib: 前缀(固定)xxx:库的名字(自己取).a:后缀(固定)windows: libxxx.lib 1.2.2静态库制作: gcc获得
C语言
69,371
社区成员
243,082
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章