一,TCP/IP协议通信
1,服务器端的socket
ServerSocket(int port) port是申请绑定的服务器端端口,取值范围是0~65535.ServerSocket(int port, int backlog) backlog是限制可以连入的客户端数量。ServerSocket(int port, int backlog, InetAddress localAddr) 在机器上存在多个ip地址的情况,localAddr负责指定一个进行绑定。ServerSocket类有一个 Socket accept() 方法用来接收客户端的请求。一般通过循环的方式
ServerSocket ss = new ServerS(2000)
while(true)
Socket s = ss.accept();
2, 客户端的socket
Socket(InetAddress/Strng remoteAddress, int port) 连接到ip为remoteAddress,端口为port的服务器端。Socket(InetAddress/String remoteAddress, int port, InetAddress localAddr, int localPort) 指定本地地址和端口的连接。
3,服务器端和客户端的通信
客户端new出socket对象后就和指定ip端口的服务器端连接起来了,服务器端就从accept()方法向下执行。
Socket类提供2个方法获取输入流和输出流:
InputStream getInputStream();
OutputStream getOutputStream();
获得这两个流以后就可以通过处理流进行处理了。
处理完可以用Socket类的close()方法关闭当前socket。
通常服务器端为每个客户端建立一个子线程,而客户端也建立一个线程用来接收数据,避免主线程堵塞。
二,用URL访问网络资源
URL代表一个网址,格式为:
protocol://host:port/path?query#ref
path?query#ref 整体是filename
1,URL类
String getProtocal(); String getHost String getPath(); String getPort() String getFile(); String getQuery();
URLConnection openConnection(); 返回的对象表示到URL所引用的远程对象的连接,它的相关方法用来向URL发送请求。
InputStream openStream();
2, URLConnction类
向URL发送请求的步骤如下:
1>通过URL实例的openConnection()方法返回一个URLConnection对象。
2>设置URLConnection的参数和普通请求属性。
可用通过如下方法设置请求头字段:
setAllowUserInteraction(); 【setDoInput(); setDoOutput();发送post请求必须设置这两个】 setIfModifiedSince(); setUseCaches();
可通过如下方法设置或增加通用的头字段:
setRequestProperty(String key, String value);
addRequestProperty(String key, String value);
3> 如果是GET方式的请求,那么调用该对象的connect()方法建立连接。如果是POST请求,则需要获取URLConnection实例对应的输出流来发送请求参数。
4>远程资源可用,可用访问远程资源投资端,或者通过输入流来获取数据。
可通过以下方法访问头字段的内容:
Object getContent():获取该URLConnection的内容0
String getHeaderField(String name):获取指定响应头字段的值。
由于某些头字段的值需要经常访问,java提供如下方法:
getContentEncoding(); getContentLength(); getContentType(); getData(); getExpiration(); getLastModified();
getInputStream(); getOutputStream();获取对应的输入输出流。注意,如果需要同时使用输入输出流,一定要先使用输出流,在使用输入流。
3,使用HTTP访问网络
HttpURLConnection是URLConnection的子类,除了继承URLConnection的方法外,增加了一些便于操作HTTP资源的便捷方法,如下:
int getResponseCode();获取服务器的响应代码。
String getResponseMessage(); 获取服务器的响应信息。
String getRequestMethod(); 获取发送请求的方法。
void setRequestMethod(String method): 设置发送请求的方法。
4,Apache HttpClient
为了更好的处理向web页面发送的请求,就要使用增强版的HttpURLConnection,也就是HttpClient。这个类主要用来发送请求、接收响应,以及管理HTTP连接。
步骤如下:
1>创建HttpClient对象
new DefaultHttpClient()
2>如果发送GET请求,就创建HttpGet对象;如果发送POST请求,就创建HttpPost对象。
New HttpGet(“http网址”); new HttpPost(“http”);
3>调用HttpGet或者HttpPost共同的setParams(HttpParams params)方法添加请求参数;如果是HttpPost对象,还可以通过setEntity(HttpEntity entity)方法设置参数。
4>调用HttpClient对象的HttpResponse execute(HttpUrlRequest request)发送请求。
5>调用HttpResponse对象的getAllHeaders()、getHeaders(String name)等方法可获取服务器的响应头;调用HttpResponse的getEntity()方法可获取HttpEntity对象,该对象包装了服务器的响应内容。程序可通过该对象的getContent()获取服务器的响应内容。
三,WebView
WebView就是一个普通的组件,可以用来浏览网页。在xml中配置和imageView类似。
在java中提供如下方法:
void loadUrl(String url);加载指定URL对应的网页。
void goBack(); void goForward();后退前进。
boolean zoomIn(); boolean zoonOut(); 放大缩小。
两个方法用于加载HTML代码:
loadData(String data, String mimeType, String encoding);
loadDataWithBaseURL(String baseUrl, String data, String mimeType, String encoding, String historyUrl);
data:HTML代码。MimeType:指定HTML代码的MIME类型,HTML可以指定为text/html。
encoding:指定HTML代码编码所用的字符集。比如GBK,UTF-8。
使用WebView中的JavaScript调用Android方法
步骤:
1>调用WebView关联的WebSettings的setJavaScriptEnabled(true)
Websettings getSettings();
2>调用WebView的addJavaScriptInterface(Object object, String name)方法将object对象暴露给JavaScript。
3>在JavaScript中可以通过调用name.方法名来调用object中的方法。