导航:首页 > 配服务器 > c如何访问服务器接口

c如何访问服务器接口

发布时间:2022-08-27 06:00:37

linux环境下,c语言怎么读取WEB服务器的80端口上页面的内容

已知url ,host, port;

int 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)..............

⑵ 客户机访问服务器是访问远程接口的方法,还是直接访问远程接口的实例方法

java 远程处理
Java远程方法调用(RMI)提供了Java程序语言的远程通讯功能,这种特性使客户机上运行的程序可以调用远程服务器上的对象,使Java编程人员能够在网络环境中分布操作。
创建一个简单的Java分布式远程方法调用程序可以按以下几个步骤操作,

一、定义远程接口:
在 Java 中,远程对象是实现远程接口的类的实例, 远程接口声明每个要远程调用的方法。在需要创建一个远程对象的时候,我们通过传递一个接口来隐藏基层的实施细节,客户通过接口句柄发送消息即可。
远程接口具有如下特点:
1) 远程接口必须为public属性。如果不这样,除非客户端与远程接口在同一个包内,否则 当试图装入实现该远程接口的远程对象时,调用会得到错误结果。
2) 远程接口必须扩展接口java.rmi.Remote。
3) 除与应用程序本身特定的例外之外,远程接口中的每个方法都必须在自己的throws从句中 声明java.rmi.RemoteException。(或 RemoteException 的父类)。
4) 作为参数或返回值传递的一个远程对象(不管是直接,还是本地对象中嵌入)必须声明为远 程接口,而不应声明为实施类。
下面是远程接口的定义
[java] view plain
package test;
import java.rmi.Remote;
import java.rmi.RemoteException;
import java.math.BigInteger;

public interface Fib extends Remote {
public int getFib(int n) throws RemoteException;
// public BigInteger getFib(BigInteger n) throws RemoteException;
}
二、实现远程接口:
远程对象实现类必须扩展远程对象java.rmi.UnicastRemoteObject类,并实现所定义的远程接口。远程对象的实现类中包含实现每个远程接口所指定的远程方法的代码。这个类也可以含有附加的方法,但客户只能使用远程接口中的方法。因为客户是指向接口的一个句柄,而不是它的哪个类。必须为远程对象定义构造函数,即使只准备定义一个默认构造函数,用它调用基础类构造函数。因为基础类构造函数可能会抛出 java.rmi.RemoteException,所以即使别无它用必须抛出java.rmi.RemoteException例外。
以下是远程对象实现类的声明:
[java] view plain
package test;
import java.math.BigInteger;
import java.rmi.*;
import java.rmi.server.UnicastRemoteObject;

public class FibImp extends UnicastRemoteObject implements Fib {
public FibImp() throws RemoteException {
super();
}
public int getFib(int n) throws RemoteException {
return n+2;
}

}
三、编写服务器类:
包含 main 方法的类可以是实现类自身,也可以完全是另一个类。下面通过RmiSampleServer 来创建一个远程对象的实例,并通过java.rmi.registry.LocateRegistry类的createRegistry 方法从指定端口号启动注册服务程序,也可以通过执行 rmiregistry 命令启动注册服务程序,注册服务程序的缺省运行端口为 1099。必须将远程对象名字绑定到对远程对象的引用上: Naming.rebind("//localhost:8808/SAMPLE-SERVER" , Server);
以下是服务器类的声明:
[java] view plain
package test;
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
public class FibonacciServer {
/**
* @param args
*/
public static void main(String[] args) {
try {
LocateRegistry.createRegistry(8804);
FibImp f = new FibImp();

// 注册到 registry 中
Naming.rebind("//localhost:8804/SAMPLE-SERVER", f);
System.out.println("fib server ready");

} catch (RemoteException re) {
System.out.println("Exception in FibonacciImpl.main: " + re);
} catch (MalformedURLException e) {
System.out.println("MalformedURLException " + e);
}
}
}
四、编写使用远程服务的客户机类:
客户机类的主要功能有两个,一是通过Naming.lookup方法来构造注册服务程序 stub 程序实例,二是调用服务器远程对象上的远程方法。
以下是客户端类的声明:
[java] view plain
package testClient;

import test.Fib;
import java.math.BigInteger;
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
public class FibClient {
/**
* @param args
*/
public static void main(String[] args) {
String url = "//localhost:8804/SAMPLE-SERVER";
try {

Fib calc = (Fib) Naming.lookup(url);
for (int i = 0; i < 10; ++i) {
int f = calc.getFib(i);
System.out.println(f);
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
} catch (NotBoundException e) {
e.printStackTrace();
}
}
}

⑶ 一局域网如何通过路由器访问与另外一局域网相连的服务器

让c线路上的电脑访问服务器的方法有很多,但是只能修改b、c路由器的配置可能就要费些事。
如果不能修改服务器和三层交换机的配置,服务器上又没有指向c网的路由配置,那就只能在c网路由器上配置服务器的路由指向b网路由器,然后在b网路由器上配置地址转换,将c网络的地址转换成b网络地址,应该就可以解决上面的问题了。
还有,b网和c网之间还要先配置互相访问,可以采取在 b、c路由器上增加互联子接口的方式配置互相访问。

⑷ (用C语言实现)客户端如何通过socket调用服务器函数

socket是用来和服务器通信的,无法直接调用服务器函数。
要实现功能,可以和服务器约定协议。
比如,在与服务器通信连接后,发送一系列标识符,最后加一个函数id,表示要求服务器调用约定的某一个函数。
服务器在接收到后,执行对应的函数,将结果返回给客户端即可。

⑸ 用c/s做的客户端怎么访问服务器

可以通过直接访问服务器端数据库完成。不过在访问的过程中,为了安全考虑。可以先将客户端发送的数据转码或者加密。然后到服务器端后解密或者再转码。管理员可以通过B/S程序完成查看功能。C/S和B/S用同一个库就可以了。如果连的是外网,就要考虑很多安全因素。

⑹ C语言编写客户端如何连接有道词典服务器

socket连接http api发送数据。

调用API需要向接口发送以下字段来访问服务:

字段名 类型 含义 必填 备注

q text 要翻译的文本 True 必须是UTF-8编码

from text 源语言 True 语言列表 (可设置为auto)

to text 目标语言 True 语言列表 (可设置为auto)

appKey text 应用 ID True 可在 应用管理 查看

salt text 随机数 True

sign text 签名,通过md5(appKey+q+salt+应用密钥)生成 True appKey+q+salt+应用密钥的MD5值

ext 翻译结果音频格式,支持mp3 false mp3

voice 翻译结果发音选择,0为女声,1为男声,默认为女声 false 0

⑺ vb中c/s程序,客户端怎样访问服务器端数据库

在服务端做数据库访问的接口并且实现接口,然后在客户端调用这个接口就可以了,。。

如果是基于互联网的分布式应用也可以用"WebServices+VB"实现

去"微软学生中心"网站下载"Web Service开发入门"视频课件看看,挺简单的

http://www.msuniversity.e.cn/default.aspx

⑻ C/S程序怎么在后台调用服务器的WebService

1、新建一个文本文件,把扩展名改成.vbs
2、右键点击这个vbs文件,在弹出的菜单中选择编辑
3、输入以下命令
Set ws = CreateObject("Wscript.Shell") ws.run "cmd /c test",vbhide
然后Ctrl+S保存
4、最后打开这个vbs文件即可
没有dos窗口,也没有任务栏图标,你也可以打开任务管理器在上面找到cmd.exe这就是你后台运行的批处理命令。
5、批量处理是一个ASCII文件,它包含一个或多个操作系统命令。批处理程序的文件名的扩展名是.cmd 或.bat。当您在命令提示中键入文件名,或者当从另一个程序运行批处理程序时,其命令将按顺序处理。批处理程序也被称为批处理文件,也称为批处理脚本,英文译为BATCH,批处理文件后缀BAT就取的前三个字母。

⑼ c语言访问服务器

lz要先知道什么是socket,它是TCP/IP协议的API。再上层是http udp之类传输报文协议。而什么是服务器,如你所说tomcat服务器,他是一个http(s)服务器。处理由客户发送的HTTP报文。并返回报文给客户。
简单来说,http就是socket的一个封装。所以c语言使用socket理所当然能访问任何服务器。至于使用什么格式,你可以看看HTTP报文格式。

阅读全文

与c如何访问服务器接口相关的资料

热点内容
linuxgenymotion 浏览:960
董车长app是干什么的 浏览:830
百度输入法双拼方案文件夹 浏览:380
cad中生成面的命令 浏览:758
clp在单片机中是什么意思 浏览:146
还珠格格韩国源码 浏览:892
linuxpostgresql配置 浏览:873
云服务器如何挂机赚钱 浏览:549
null是java关键字 浏览:688
看过读过听过是什么APP 浏览:834
java判断数据是否存在 浏览:15
一巴掌解压图片 浏览:976
自己搭建的服务器如何安全 浏览:753
miui源码公开 浏览:447
linuxbin是什么 浏览:332
php小项目留言板 浏览:955
得推论坛系统源码v24 浏览:67
android根据号码查询联系人 浏览:496
命令行ftp上传 浏览:338
大爷程序员 浏览:198