网络编程基础(socket,httpurlconnection)
来源:互联网 发布:最优化理论与算法pdf 编辑:程序博客网 时间:2024/06/07 12:12
1.socket 需要 主机地址和端口
2.url 由主机地址端口号资源地址组成(端口号没有时默认为-1 通常设置成80,主机地址为域名时需要DNS解析服务器或者本地host)
3.二者协同合作 是在传输层
4.urlconnection 是在应用层
5.urlconnection 封装了协议和Socket. 所以请求头和响应头的自动封包拆包了。
6.Socket是在传输层所以头信息都会被读下来因为无法拆包。
7.ServerSocket 绑定的是本地的IP(内网IP)内网连接外网是可以的 。而其他外网想要连接这个内网需要在外网上做一个端口映射。
8.ServerSocket 参数中 除了端口,还有队列数,这里指的是可连接的客户端数目。由于ServerSocket 的accept()循环调用所以设置最大连接数。
9.url对象可以直接开流 openStream() 返回一个inputStream对象。 本质是先url连接后执行开流方法。用url这个方法可以直接读取网络资源。
10.urlConnection对象 是url openConnection()方法返回的。这个方法只是建立了对象并没有连接。执行connect()才是建立实际连接(可省!因为开流后会自动触发该方法)
11.GET和POST请求,头字段有默认设置可不用设置。都需要配合流进行操作。inputStream 默认设置是ture,而outputStream 默认设置是false.所以post请求一定要设置setDoOutpu(ture)。
12.HTTPURLConnection 有getResponsecode() 200说明连上了。 设置SetRequestMethod().其他的和urlConnnection很像。disconnect()用于关闭HTTP连接。
13 HTTPUrlConnection 更为灵活 因为是用流的方式对服务端进行请求的发送。而用HTTPClient 则要将参数按照指定的形式放进去
14HTTPClient 需要定义一个客户端 defaultHttpClient(); 对于POST方法而言 调用
setEntiy(UrlEncodedFormEntity entity(list<?extends NameValuePair> (BasicNameValuePair("key",)value)))各种参数要注意一层一层的参数。最后是键值对形式的数据。
显然这种方式不够灵活。
15使用httpClient 执行方法后获取httpResponse对象后也可以进行返回码的判断,内容的处理(返回流对象)要注意在finally块中关闭HTTP连接的方法是 if(client!=null)
client.getConnectionManager().shutdown()
最后粘上一段HttpUrlconnection获取返回信息的示例代码:
public class HttpUtils { public HttpUtils() { super(); } //通过传入接口 对收到的数据进行后续的操作。减少了程序之间的耦合性。 public void sendhttprequest(final String adress , final HttpCallbackListner listner) { //在参数中加fianl 是出于安全性考虑防止变量在方法内被修改发生不可知的事情。 new Thread(new Runnable() { @Override public void run() { HttpURLConnection connection=null; try { URL url=new URL(adress); connection=(HttpURLConnection)url.openConnection(); connection.setReadTimeout(8000); connection.setRequestMethod("GET"); //必须大写 InputStream inputStream=connection.getInputStream(); BufferedReader bfinputStream=new BufferedReader(new InputStreamReader(inputStream)); StringBuilder builder=new StringBuilder(); String line; while((line=bfinputStream.readLine())!=null){ builder.append(line); } if (listner!=null){ listner.onFinish(builder.toString()); } } catch (IOException e) { if(listner==null){ listner.onError(e); } e.printStackTrace(); if (connection!=null); connection.disconnect(); } } }).start(); }}
定义接口:
public interface HttpCallbackListner { void onFinish(String response); void onError(Exception e);}
附上socket 客户端测试:
public class Connectservice { Socket client=null; public Connectservice() { try { client=new Socket("115.159.42.189",18088); client.setSoTimeout(5000); } catch (Exception e) { e.printStackTrace(); } } /** * 发送数据到服务器socket * @param data 要发送数据 */ public void sentservice(String data) { try { OutputStream outputStream = client.getOutputStream();//写入服务器信息流 if(outputStream!=null){ //转换成字符流 BufferedWriter writer=new BufferedWriter(new OutputStreamWriter(outputStream)); //写入 writer.write(data); //发送 writer.flush(); //缓冲流刷新 outputStream.flush(); }else { } } catch (Exception e) { e.printStackTrace(); } } /** * 读取服务端socket数据方法 * @return 返回数据 */ public String receiveservice() { String content=null; try { InputStream inputStream = client.getInputStream(); if(inputStream!=null) { byte[] temp = new byte[1024 * 3]; int contents = inputStream.read(temp); content = new String(temp, 0, contents); } else { Log.d("连接失败","连接失败"); content="连接失败"; } } catch (IOException e) { e.printStackTrace(); } return content ; }
注意 服务端认为 关闭了流则断开连接 这里我们没有关闭流
另外发送数据注意flash!!
- 网络编程基础(socket,httpurlconnection)
- Android HttpURLConnection Socket Http (网络编程)
- Android HttpURLConnection Socket Http (网络编程) .
- Android HttpURLConnection Socket Http (网络编程)
- Socket网络编程基础
- socket网络编程基础
- SOCKET网络编程基础
- Socket网络编程基础
- 网络编程-socket基础
- socket网络编程基础
- socket网络编程基础
- socket网络编程基础
- 网络编程基础--Socket
- socket网络编程基础
- Socket网络编程基础
- 网络编程基础-socket基础
- socket网络编程基础(乒乓球原理)
- Java Socket网络编程基础
- Android Studio 快捷键
- java web学习笔记day2
- Python复习整理
- android内存分析工具- MAT的初识(1)
- 形象讲解Android中dpi,dp和px之间的关系(设计师如何与程序员沟通)
- 网络编程基础(socket,httpurlconnection)
- aclocal安装依赖的库
- 面向对象--get/set的调用(课堂)
- serialVersionUID的作用
- Leetcode-241.Different Ways to Add Parentheses
- 初级教程之 一 四种点击事件
- Android:TextView中的文本链接之--点击链接跳转总结(2种方法+2个实例应用)
- (一一〇)二维数组里找零最多的题目
- mysql 无法远程登陆解决办法