您的位置:首页 > 理论基础 > 计算机网络

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);
}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: