导航:首页 > IDC知识 > 安卓http服务器

安卓http服务器

发布时间:2020-10-24 10:16:47

1、Android服务器通信的几种方式详解

大 学学习网络基础的时候老师讲过,网络由下往上分为物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。通过初步的了解,我知道IP协议对应于网 络层,TCP协议对应于传输层,而HTTP协议对应于应用层,三者从本质上来说没有可比性,socket则是对TCP/IP协议的封装和应用(程序员层面 上)。也可以说,TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据。关于TCP/IP和 HTTP协议的关系,网络有一段比较容易理解的介绍: “我们在传输数据时,可以只使用(传输层)TCP/IP协议,但是那样的话,如果没有应用层,便无法识别数据内容,如果想要使传输的数据有意义,则必须使 用到应用层协议,应用层协议有很多,比如HTTP、FTP、TELNET等,也可以自己定义应用层协议。WEB使用HTTP协议作应用层协议,以封装 HTTP文本信息,然后使用TCP/IP做传输层协议将它发到网络上。”
而我们平时说的最多的socket是什么呢,实际上socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API), 通过Socket,我们才能使用TCP/IP协议。实际上,Socket跟TCP/IP协议没有必然的联系。Socket编程接口在设计的时候,就希望也 能适应其他的网络协议。所以说,Socket的出现只是使得程序员更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的抽象,从而形成了我们知道 的一些最基本的函数接口,比如create、listen、connect、accept、send、read和write等等。网络有一段关于 socket和TCP/IP协议关系的说法比较容易理解:“TCP/IP只是一个协议栈,就像操作系统的运行机制一样,必须要具体实现,同时还要提供对外 的操作接口。这个就像操作系统会提供标准的编程接口,比如win32编程接口一样,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是 Socket编程接口。”
关于TCP/IP协议的相关只是,用博大精深来讲我想也不为过,单单查一下网上关于此类只是的资料和书籍文献的数量就知道,这个我打算会买一些经典的书籍 (比如《TCP/IP详解:卷一、卷二、卷三》)进行学习,今天就先总结一些基于基于TCP/IP协议的应用和编程接口的知识,也就是刚才说了很多的 HTTP和Socket。
CSDN上有个比较形象的描述:HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。
实际上,传输层的TCP是基于网络层的IP协议的,而应用层的HTTP协议又是基于传输层的TCP协议的,而Socket本身不算是协议,就像上面所说,它只是提供了一个针对TCP或者UDP编程的接口。
下面是一些经常在笔试或者面试中碰到的重要的概念,特在此做摘抄和总结。
一。什么是TCP连接的三次握手
第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭 连接之前,TCP 连接都将被一直保持下去。断开连接时服务器和客户端均可以主动发起断开TCP连接的请求,断开过程需要经过“四次握手”(过程就不细写了,就是服务器和客 户端交互,最终确定断开)
二。利用Socket建立网络连接的步骤
建立Socket连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket ,另一个运行于服务器端,称为ServerSocket 。
套接字之间的连接过程分为三个步骤:服务器监听,客户端请求,连接确认。
1。服务器监听:服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态,等待客户端的连接请求。
2。客户端请求:指客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。
3。 连接确认:当服务器端套接字监听到或者说接收到客户端套接字的连接请求时,就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户 端,一旦客户端确认了此描述,双方就正式建立连接。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。
三。HTTP链接的特点
HTTP协议即超文本传送协议(Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用。
HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。
四。TCP和UDP的区别(考得最多。。快被考烂了我觉得- -\\)
1。 TCP是面向链接的,虽然说网络的不安全不稳定特性决定了多少次握手都不能保证连接的可靠性,但TCP的三次握手在最低限度上(实际上也很大程度上保证 了)保证了连接的可靠性;而UDP不是面向连接的,UDP传送数据前并不与对方建立连接,对接收到的数据也不发送确认信号,发送端不知道数据是否会正确接 收,当然也不用重发,所以说UDP是无连接的、不可靠的一种数据传输协议。
2。也正由于1所说的特点,使得UDP的开销更小数据传输速率更高,因为不必进行收发数据的确认,所以UDP的实时性更好。
知 道了TCP和UDP的区别,就不难理解为何采用TCP传输协议的MSN比采用UDP的QQ传输文件慢了,但并不能说QQ的通信是不安全的,因为程序员可以 手动对UDP的数据收发进行验证,比如发送方对每个数据包进行编号然后由接收方进行验证啊什么的,即使是这样,UDP因为在底层协议的封装上没有采用类似 TCP的“三次握手”而实现了TCP所无法达到的传输效率。

2、如何在 android 本地搭建一个 http 服务器

ApacheHttpCore是一个优秀的Http底层框架,支持构建服务器,支持构建客户端,所以专我们第一个版本选属择了Apache的HttpCore,因为Android弃用了ApacheHttpClient相关API,代码中会有弃用的警告,不过这一点大家不要担心,下面会给出解决方案。
http://blog.csdn.net/yanzhenjie1003/article/details/51661599

3、求高人指点, 如何在android<手机>上建立http服务器?

别折腾了,这个不现实。http服务器,搭建要是一系列的服务器组件和软件支持来实现的,手机只是别一个平台,想实现就得有这些软件,目前好像还没有支持手机平台的相关软件。

4、如何在安卓上搭建http服务器

转载 本文介绍如何在安卓手机上搭建http服务器,有时候我们会有这要的需求,那就是想在自己的安卓手机上搭建一个简单的http服务里,有人是想用来玩一玩,有人是想做点研究,还有人有其他的目的,那么我们该怎么在安卓上搭建一个http服务器呢,下面安卓后院 为大家收集整理的一个方法,希望能够帮到大家。

一、准备篇

1.将lmp.tar.bz2移动到SD卡根目录(/mnt/sdcard/)

2.安装安卓终端模拟器(TerminalEmulator.apk)

(注:lmp.tar.bz2文件可以在本站的安卓工具箱页面下下载)

二、安装篇

1.打开安卓终端模拟器

2.执行以下命令(root)

$ su

# cd /

# mount -o remount,rw /system

# tar xf /mnt/sdcard/lmp.tar.bz2

# mount -o remount,ro /system

# exit

$ exit

三、启动篇

1.打开安卓终端模拟器

2.执行以下命令(root)

$ su

# almp-start.sh

# exit

$ exit

三、关闭篇

1.打开安卓终端模拟器

2.执行以下命令(root)

$ su

# almp-stop.sh

# exit

$ exit

四、测试篇

1.打开网络浏览器(OperaMobile)

2.输入以下地址欣赏下您的almp环境吧

http://127.0.0.1/

http://127.0.0.1/fileadmin/

或者

http://localhost/

http://localhost/fileadmin/

*.部分浏览器不支持localhost的解析

五、mysql篇

1.mysql用户名为root

2.mysql默认密码为空

3.mysql用以下地址访问

127.0.0.1:3306

localhost:3306

4.推荐phpmyadmin管理您的mysql数据库

5.由于phpmyadmin更新频繁,请自己下载安装

6.phpmyadmin默认不支持空密码登陆,请自己修改phpmyadmin的配置文件

7.登陆phpmyadmin轻击修改密码为您的mysql超级用户root设置一个密码吧

六、注意篇

*.php-cgi由本人编译

1.手机需要有root权限

2.部分rom需要安装busybox

3.部分rom需要在命令前面加上busybox

4.本环境包中的部分资源来源于网络开源项目

5.用Re挂载/system分区为读写可跳过mount命令

6.执行终端命令时请忽略命令前的命令提示符$(#)

7.本环境包理论上应该工作在Arm5++的安卓手机上

5、如何在手机搭建http服务器

目前为止不可能实现。你要做服务器。那肯定得有各种各样的协议和组件,而手机的系统里面附带的都没有。所以手机目前是无法作为http服务器的。也包括其他类型的服务器。

6、如何在 android 本地搭建一个 http 服务器

这一阵感觉玩手机玩腻了,VPS也玩腻了,瞬间感觉啥都玩腻了。前几天闲着无聊,看到了手机上的超级终端,心想:安卓底层不也是Linux么?于是就用超级终端wget了一个文件,成功了!吼吼,于是下一个想法就是能不能在手机上搭建一个WEB环境??? 想到就开始各种搜,发现安卓使用的Linux并不属于任何发行版本,看来使用传统的建站方式不行了。继续搜索,发现谷歌商店里有一个集成lighttpd+php+mysql+phpmyadmin环境的APK,哈哈,这下好了。当然,如果只装上这个APK只能在本地测试,无法使用公网访问,所以,经过我各种搜,终于有了这一篇文章,毫不客气的说,这绝对是全网首发,至少不用让你再像我一样各种搜了。 现在的手机硬件已经很强大了,¥1999就能买到4核1.5G,2G内存的手机,这几乎能满足像我这样的小站的需求了。硬件有了,集成环境的APK也有了,就剩下公网访问了。 第一:需要一部安卓手机,至少600MHZ的CPU,256内存,手机需要ROOT,没有ROOT的话,不能使用80端口。 第二:下载我提供的集成环境的APK文件(这里)解压密码:,KSWEB在谷歌商店里是收费的,免费试用5天,我提供的这个文件为网友破解版,免费试用55年,够你折腾了。 第三:需要一个支持路由功能的路由器,以及一个花生壳账号。 1.首先在手机上安装APK,(如果手机里有什么防火墙之类的,请关闭,否则不能使用WIFI地址访问),然后点开KSWEB,首次开启,会解压缩文件,然后会提示重启,重启后,就能够看到mysql启动和相应信息了。 2.点options进入设置,然后勾选上root权限,这样就可以更改端口为80了。然后回到主界面,点phpmyadmin然后就会自动下载了。下载成功后,可以在手机浏览器里输入127.0.0.1,就可以看到相关信息。虽然版本有些老,但是相当简便啊亲…… 如果你只想在手机上测试,那么到这里就结束了。如果想让公网访问手机, 那么就需要使用DDNS(动态域名解析)来支持。 3.使用oray护照,登录花生壳,系统会自动分配给你一个免费域名,用这个域名来访问手机。登录你的路由器,点击“转发规则”,选择“虚拟服务器”,端口填写80,IP地址填写你手机WIFI的IP地址,保存,如图所示。 4.保存后,点击“动态DNS设置”,账号密码就是你oray的通行证,点登录,如果成功了,就会自动识别你的免费域名。如图所示,然后保存就行了。 这样的话,直接输入域名就可以访问到手机了,只要你的路由器不关闭,就可以一直使用了。下面是我的演示: 至此,你的手机就可以当成一个独立的VPS来使用了,建议使用闲置的手机来玩,它有以下几个好处:装13,够折腾,省电省资源,废物利用,数据更安全,便携,国内速度一流……还有,查域名的时候貌似是独立IP,这样百度会不会喜欢呢?

7、如何在 android 本地搭建一个 http 服务器

小鸟云服务器niaoyun实例创建好之后,您可以使用以下任意一种方式登录服务器:

远程桌面连接(,MSTSC):采用这种方式登录,请确保实例能访问公网。如果在创建实例时没有购买带宽,则不能使用远程桌面连接。

管理终端VNC:无论您在创建实例时是否购买了带宽,只要您本地有网页浏览器,都可以通过管理控制台的管理终端登录实例。

使用远程桌面连接(MSTSC)登录实例

打开开始菜单>远程桌面连接,或在开始菜单>搜索中输入mstsc。也可以使用快捷键Win+R来启动运行窗口,输入mstsc后回车启动远程桌面连接。

在远程桌面连接对话框中,输入实例的公网IP地址。单击显示选项。

输入用户名,如小鸟云默认为niaoyun。单击允许我保存凭据,然后单击连接。这样以后登录就不需要手动输入密码了。

8、Android通过OKhttp从服务器端获取数据

①简单的异步Get请求
第一步,创建OKHttpClient对象
第二步,创建Request请求
第三步,创建一个Call对象
第四步,将请求添加到调度中
不多说,直接上代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

//okHttp的基本使用 --- get方法
String url = "https://api.douban.com/v2/movie/top250?start=0&count=10";
//1,创建OKHttpClient对象
OkHttpClient mOkHttpClient = new OkHttpClient();
//2,创建一个Request
Request request = new Request.Builder().url(url).build();
//3,创建一个call对象
Call call = mOkHttpClient.newCall(request);
//4,将请求添加到调度中
call.enqueue(new Callback() {
@Override
public void onFailure(Request request, IOException e) {

}

@Override
public void onResponse(Response response) throws IOException {
if (response.isSuccessful()) {
final String message = response.body().string();
handler.post(new Runnable() {
@Override
public void run() {
tv_message.setText(message);
progressBar.setVisibility(View.GONE);
}
});

}
}

});

9、android使用http怎么向服务器获得数据并用json解析

写个适配器

下面是代码:

import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import javax.net.ssl.HttpsURLConnection;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import bean.CoureBean;

import tools.StreamHelper;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.annotation.VisibleForTesting;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Adapter;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.Switch;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {

private List<CoureBean> list = new ArrayList<CoureBean>();
private ListView lv;

private Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {

switch (msg.what) {
case 1:
String jsonString = msg.obj.toString();

converData(jsonString);
init();
break;

default:
break;
}
};
};

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv = (ListView) findViewById(R.id.lvImgList);
getJson();
}

// 绑定列表
private void converData(String jsonString) {
try {
JSONObject jOb = new JSONObject(jsonString);
JSONArray jArray = jOb.getJSONArray("Data");
for (int i = 0; i < jArray.length(); i++) {
JSONObject currentItem = jArray.getJSONObject(i);
CoureBean modelBean = new CoureBean();
modelBean.setName(currentItem.getString("name"));
modelBean.setImgUrl(currentItem.getString("picSmall"));
list.add(modelBean);

}

} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

// 获取json数据
private void getJson() {
new Thread() {
@Override
public void run() {
String strUrlString = "http://www.imooc.com/api/teacher?type=4&num=30";
try {
URL url = new URL(strUrlString);
HttpsURLConnection conn = (HttpsURLConnection) url
.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(5000);

int code = conn.getResponseCode();
if (code == 200) {
InputStream is = conn.getInputStream();
String jsonString = StreamHelper.readInputStream(is);
Message msg = new Message();
msg.what = 1;
msg.obj = jsonString;
handler.sendMessage(msg);

}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}.start();
}

class ViewHolder {
ImageView imPic;
TextView txtName;

}
private void init(){
ArrayAdapter adapter = new MyAdapter(this, R.layout.list_item, list);
lv.setAdapter(adapter);
}

/**
 * 自定义适配器(内部类)
 * 
 * @author
 * 
 */
class MyAdapter extends ArrayAdapter<CoureBean> {
private int resourceId;

// 构造函数
public MyAdapter(Context context, int resource, List<CoureBean> objects) {
super(context, resource, objects);
resourceId = resource;
}

@SuppressLint("ViewHolder")
@Override
public View getView(int position, View convertView, ViewGroup parent) {

View view;
ViewHolder viewHolder = new ViewHolder();

if (convertView == null) {
view = LayoutInflater.from(MainActivity.this).inflate(
resourceId, null);// 拿到当前行对象

// 拿到当前视图对象里面的名字叫tvPwdTitle的TextView对象
viewHolder.txtName = (TextView) view.findViewById(R.id.txtName);
viewHolder.imPic = (ImageView) view
.findViewById(R.id.imageView1);
view.setTag(viewHolder);

} else {
view = convertView;
}

// 拿到应该放在当前行上的数据
final CoureBean dataItem = getItem(position);
viewHolder = (ViewHolder) view.getTag();
viewHolder.txtName.setText(dataItem.getName());
return view;
}
}
}

与安卓http服务器相关的知识