之前说的存在小问题,是把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;
}