0120-网络编程
2016-01-20 15:44
309 查看
知识点
一,Android中利用网络编程与服务器交互的一般步骤:
1.使用POST或者GET请求方式向服务器提交数据2.接收返回回来的数据
(该数据是由服务器从数据库中获取并返回给客户端,格式一般为Json)
3.解析Json{”rt”:200,”标签”:”成功”}
Json数据是有JsonObject{}和JsonArray[]嵌套组成
{key:[{[k1:v1],[k2:v2]},{},{}]}
{“key1”:[{“k1”:”v1”},{“k2”:”v2”},{“k3”:”v3”}],”key2”:[{“k1”:”v1”},{“k2”:”v2”},{“k3”:”v3”},”key3”:[{“k1”:”v1”},{“k2”:”v2”},{“k3”:”v3”}]]}
二,Java,Android中常用的网络类
UDP,TCP,URL,URLConnection,HttpUrlConnection,HttpClient三,网络通讯的三大要素
1.IP地址:设备的标识192.168.10.253(物理地址)2.端口号:标识不同的进程 整数 范围:0~65535(逻辑地址)
3.传输协议:UDP,TCP通讯所需要符合的规则
四,UDP
1.不需要建立连接,速度快,不安全2.发送者只管发,如果没有人接收则丢失,一般用于在线视频
3.需要将数据和目标地址封装在同一个数据包中 一并发送
4.最大64K
五,TCP
1.需要建立连接(三次握手),速度慢,可靠2.一般用于下载,聊天
3.数据大小没有限制
InetAddress类封装了获取IP地址,端口号,主机名等功能。
package inetaddress; import java.net.InetAddress; public class Main { public static void main(String[] args) throws Exception { InetAddress address = InetAddress.getByName("www.qq.com"); System.out.println(address); System.out.println(address.getHostName()); System.out.println(address.getHostAddress()); InetAddress[] addresses = InetAddress.getAllByName("www.qq.com"); for (InetAddress inetAddress : addresses) { System.out.println(inetAddress); } } }
UDP
接收端
package udp; import java.net.DatagramPacket; import java.net.DatagramSocket; public class 接收端 { // DatagramPacket数据包 DatagramSocket接收端/发送端 public static void main(String[] args) throws Exception{ //创建接收端 需要自己的端口号 DatagramSocket ds = new DatagramSocket(12345); //缓冲区 byte[] b = new byte[1024]; DatagramPacket dp = new DatagramPacket(b, b.length); while(true){ //接收数据包 在接收到数据之前 一直处于阻塞状态 ds.receive(dp); //dp.getLength()表示有效长度 String msg = new String(dp.getData(),0,dp.getLength()); System.out.println(msg); // System.out.println(b); // System.out.println(b==dp.getData()); if (msg.equals("呵呵")) { ds.close(); break; } } } }
发送端
package udp; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; public class 发送端 { public static void main(String[] args) throws Exception { /* * UDP发送数据的对象 发送数据不需要IP和端口号 因为目标地址和数据封装在了数据包中 */ DatagramSocket ds = new DatagramSocket(); byte b[] = "呵呵".getBytes(); DatagramPacket dp = new DatagramPacket(b, b.length, InetAddress.getLocalHost(), 12345); ds.send(dp); ds.close(); } }
TCP
package tcp; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.Scanner; public class Server { // ServerSocket服务端 Socket客户端 public static void main(String[] args) throws Exception { ServerSocket ss = new ServerSocket(1234); // 利用服务端接收一个客户端对象 此时系统处于阻塞状态 final Socket s = ss.accept(); new Thread() { public void run() { BufferedReader br; try { br = new BufferedReader(new InputStreamReader( s.getInputStream())); String msg; while ((msg = br.readLine()) != null) { System.out.println(msg); } } catch (Exception e) { } }; }.start(); PrintWriter pw = new PrintWriter(s.getOutputStream(), true); Scanner sc = new Scanner(System.in); String msg; while ((msg = sc.next()) != null) { pw.println(msg); } } }
发送端
package tcp; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.InetAddress; import java.net.Socket; import java.util.Scanner; public class Client { public static void main(String[] args) throws Exception { //该端口号1234为服务端的port final Socket s = new Socket(InetAddress.getLocalHost(), 1234); new Thread() { public void run() { BufferedReader br; try { br = new BufferedReader(new InputStreamReader( s.getInputStream())); String msg; while ((msg = br.readLine()) != null) { System.out.println(msg); } } catch (Exception e) { } }; }.start(); PrintWriter pw = new PrintWriter(s.getOutputStream(), true); Scanner sc = new Scanner(System.in); String msg; while ((msg = sc.next()) != null) { pw.println(msg); } } }
相关文章推荐
- Linux网络编程:原始套接字的魔力【下】
- Linux网络编程:原始套接字的魔力【上】
- Ubuntu Nginx下配置网站ssl实现https访问
- Ubuntu Nginx下配置网站ssl实现https访问
- HTTP协议详解
- iOS应用架构谈(三):网络层设计方案
- android网络编程 四(android-async-http)
- Android实时监听网络状态
- http 安全验证
- 图片的三级缓存策略(内存LruCache+磁盘DiskLruCache+网络Volley)
- ASIHTTPRequest开源类项目导入问题及解决方法
- HTTPS那些事(一)HTTPS原理
- cisco iou配合GNS3连接真实网络或虚拟主机
- 好的网络诗文
- 基于Windows的 wininet 网络库 写的访问服务器接口的函数
- HTTPS与SSL
- OSI模型与TCP/IP协议族
- 发送HTTP请求 -- HttpClientUtil
- Windows 无法自动将 IP 协议堆栈绑定到网络适配器。解
- 网络软中断与NAPI函数分析