android ndk网络请求,NDK开发:Socket通过Http协议议访问Server

之前说的存在小问题,是把memset参数位置写错了。呵呵(fuck you)。

#include "com_example_ndktest_MyNdk.h"

#include "android/log.h"

#include

#include

#include

#include

#include

#include

JNIEXPORT jstring JNICALL

Java_com_example_ndktest_MyNdk_hello(JNIEnv *pEnv, jobject

pThis){

__android_log_write(ANDROID_LOG_INFO,

"liang","劲哥...\n");

return (*pEnv)->NewStringUTF(pEnv,"hello this

msg from ndk");

}

JNIEXPORT jstring JNICALL

Java_com_example_ndktest_MyNdk_socket

(JNIEnv *pEnv, jobject pThis, jstring pUrl,

jstring pHead){

char *host ="192.168.0.66";

char *url = "http://192.168.0.66";

int port = 80;

int socket_handle = socket(AF_INET,SOCK_STREAM,0);

if(socket_handle<0){

__android_log_print(ANDROID_LOG_INFO,"liang","建立socket()出错...%s\n",strerror(errno));

}else{

__android_log_write(ANDROID_LOG_INFO,"liang","建立socket()成功...\n");

struct sockaddr_in loc_addr;//本机地址

loc_addr.sin_family = AF_INET;//协议

loc_addr.sin_addr.s_addr = htons(INADDR_ANY);

loc_addr.sin_port = htons(INADDR_ANY);

if(bind(socket_handle , &loc_addr ,

sizeof(struct sockaddr_in))<0){

__android_log_print(ANDROID_LOG_INFO,"liang","bind()出错...%s\n",strerror(errno));

}else{

__android_log_write(ANDROID_LOG_INFO,"liang","bind()成功...\n");

struct sockaddr_in serv_add;//服务器地址

serv_add.sin_family = AF_INET;

serv_add.sin_addr.s_addr = inet_addr("192.168.0.66");

serv_add.sin_port = htons(80);

if(connect(socket_handle,&serv_add,sizeof(struct

sockaddr_in))<0){

__android_log_print(ANDROID_LOG_INFO,"liang","connect()出错...%s\n",strerror(errno));

}else{

__android_log_write(ANDROID_LOG_INFO,"liang","connect()成功...\n");

char *head = "GET

http://192.168.0.66/HttpServer/GetTest.php?name=lang&age=20

HTTP/1.1\r\n"

"Host:192.168.0.66:80\r\n\r\n";

if(send(socket_handle,head,strlen(head),0)<0){

//发送头部

__android_log_print(ANDROID_LOG_INFO,"liang","send()出错...%s\n",strerror(errno));

}else{

__android_log_write(ANDROID_LOG_INFO,"liang","send()成功...\n");

char *result = (char*)malloc(sizeof(char));

char *temp_result = (char*)malloc(sizeof(char));;

int SIZE = sizeof(char) * 1024;

char *cache = (char*)malloc(SIZE);

int len = 0;

memset(result,0x00,sizeof(char));

memset(temp_result,0x00,sizeof(char));

memset(cache,0x00,SIZE);

while((len=recv(socket_handle,cache,SIZE,0))>0){//读服务器信息

int tempLen = sizeof(char) * strlen(result) + 1;

free(temp_result);

temp_result = (char*)malloc(tempLen);

memset(temp_result,0x00,tempLen);

strcpy(temp_result,result);

free(result);

tempLen += strlen(cache);

result = (char*)malloc(tempLen);

memset(result,0x00,tempLen);

strcpy(result,temp_result);

strcat(result,cache);

memset(cache,0x00,SIZE);

}

__android_log_print(ANDROID_LOG_INFO,"liang","服务器:%s\n",result);

if(result!=NULL)

free(result);

if(temp_result!=NULL)

free(temp_result);

if(cache!=NULL)

free(cache);

}

}

close(socket_handle);

}

}

return NULL;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值