首先
java
中
public
class
testhello
{
static
{
system.loadlibrary("testhellos")
}
public
static
native
void
hello(string
msg)
public
native
void
getsysid()
public
native
string
getkeycode(string
sysid)
public
native
boolean
testkeycode(string
sysid,
string
keycode)
public
static
void
main(string[]
args)
{
//
hello("hello,kimm!")
testhello
t=
new
testhello()
t.getsysid()
}
}
用javac
testhello.java,
java
testhello,javah
-classpath
.
-verbose
testhello
。将生产的头文件用到c++
中的
heardfileds
中。然后在
sources
files
中实现
heardfieds
的方法。实现的方法,其实就是你要调用c++的方法、
#include <stdio.h>
char * xxx(char *all, char *target){
int i,j,k
static char t[80]
j = strlen(all)
k = strlen(target)
printf("j=%d k=%d\n",j,k)
for (i=0i<j-k-1i++){
if (strncmp(&all[i],target,k)==0) { sscanf( &all[i+k+1],"%s",t)
printf("t = %s\n",t)
break}
}
return t
}
main(){
char all[]="GET / HTTP/1.1 Accept-Language: zh-cn,zhq=0.8,en-usq=0.5,enq=0.3 Sec-WebSocket-Key: mHCYmHhGCn44x+g6quuzYg== Cache-Control: no-cache"
char txt[]="Sec-WebSocket-Key:"
char trs[80]
printf("%s",xxx(all,txt))
}
---------
注意 char all[]=" ...." ; 写在1行,或通过文件读入。
char txt[]="Sec-WebSocket-Key:" 字符串里的冒号不要漏掉,
若不写冒号,计算sscanf位置 时要再加1。sscanf( &all[i+k+2],"%s",t)
已知url ,host, portint s, size
struct sockaddr_in sin
struct hostent* phe
char cmd[256]
char msg_hdr[1000]
char* p
//准备http中GET 方法的请求。
sprintf(cmd,"GET %s\r\nHTTP/1.1\r\nHost:%s", url, host)
//创建socket
if((s=socket(PF_INET,SOCK_STREAM,0))<0)
return -1
//取得远程主机的IP地址,失败函数返回-1
if((phe = gethostbyname(host)) == NULL)
return -1
memset(&sin,0,sizeof(sin))
memcpy(&sin.sin_addr,phe->h_addr,sizeof(struct in_addr))
sin.sin_family=AF_INET
sin.sin_port=htons(pms->port)
//跟远程机器建立连接,失败函数返回-1
if(connect(s,(struct sockaddr*)&sin,sizeof(sin))==-1)
return -1
//发送GET请求
if(write(s,cmd,strlen(cmd))<0)
return 0
//从链接描述符(连接管道)中读取传送过来的数据
if(read(s, msg_hdr, 300)<0)
error
close(s)
//读到该文件的大小
if((p=strstr(msg_hdr,"Content-Length"))||(p=strstr(msg_hdr,"Content-length:")))
p+=16
else
error
//返回大小
size = atoi(p)
sprintf(cmd,"GET %s HTTP/1.1\r\nHost: %s\r\nAccept: */*\r\nPragma: no-cache\r\nCache-Control: no-cache\r\nConnection: close\r\nRange: bytes0-%d\r\n\r\n", url, host, size)
//创建套接口
if((s=socket(AF_INET,SOCK_STREAM,0))<0)
return 0
//取得远程主机的IP地址,失败返回0
if((phe = gethostbyname(host)) == NULL)
return 0
memset(&sin,0,sizeof(sin))
memcpy(&sin.sin_addr,phe->h_addr,sizeof(struct in_addr))
sin.sin_family=AF_INET
sin.sin_port=htons(port)
//建立连接
if(connect(s,(struct sockaddr*)&sin,sizeof(sin))==-1)
return 0
//发送读取请求
if(write(s,cmd,strlen(cmd))<0)
error
read(s, buf, BUFSIZE)..............