免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2211 | 回复: 0
打印 上一主题 下一主题

[Android] android jni下的udp通讯(C/C++) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-03-26 17:20 |只看该作者 |倒序浏览
my原博文地址:
http://blog.sina.com.cn/s/blog_4868f98601017s5v.html

android jni下的udp通讯和linux几乎没什么两样, 要注意的是在udp接收的时候,通过netstat -an看到的
端口状态会显示为CLOSE, 这个是没有关系的!
不要被这个状况吓到。 我们就曾经在这个问题上很是纠结,结果发现端口是能正常接收的。

可以用这个示例程序:

#include <sys/socket.h>
#include <sys/types.h>
#include <linux/if_ether.h>
#include <arpa/inet.h>
#include <sys/stat.h>

#ifdef ANDROID
#include <android/log.h>
#define LOGI(format,...)  //__android_log_print(ANDROID_LOG_INFO ,"hello_hl","file[%s] line[%d] "format"",__FILE__, __LINE__ ,##__VA_ARGS__)
#define LOGE(format,...)  __android_log_print(ANDROID_LOG_ERROR,"hello_hl","file[%s] line[%d] "format"",__FILE__, __LINE__ ,##__VA_ARGS__)
#else
#include <stdio.h>
#define LOGI(format,...)  // printf("file[%s] line[%d] "format"\n",__FILE__, __LINE__ ,##__VA_ARGS__)
#define LOGE(format,...)  printf("file[%s] line[%d] "format"\n",__FILE__, __LINE__ ,##__VA_ARGS__)
#endif

#define LOCAL_RECV_PORT 9414  //本机的接收端口 就是一死

your_jni_function(){  //这个是你的测试jni函数  
int Recv_Sockfd;
struct sockaddr_in ser_addr;
int len_read_net;
unsigned char buffer[1024];

Recv_Sockfd=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
if(Recv_Sockfd <0 ){
LOGE(" open  socket fail!!!");
return NULL;
}
ser_addr.sin_family=AF_INET;
ser_addr.sin_addr.s_addr=htonl(INADDR_ANY);
ser_addr.sin_port=htons(LOCAL_RECV_PORT);
res = bind(Recv_Sockfd,(struct sockaddr*)&ser_addr,sizeof(struct sockaddr_in));
LOGE("bind res[%u] , sin_port[%u]", res, ser_addr.sin_port);

len_read_net = recvfrom(Recv_Sockfd,buffer, sizeof(buffer), 0, (struct sockaddr*)&recv_addr, &addrlen);
//可以再这里加打印看看接收的数据

}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP