网络编程:就是用来实现网络互连的不同计算机上运行的程序间可以进行数据交换。
网络编程通常分为UDP和TCP编程。
一、UDP
特点:1.将数据及源和目的封装成数据包,不需要连接。
2.每个数据报的大小限制在64K内。
3.因为无连接,是不可靠的协议。
4.不需要建立连接,速度快。
UDP的传输需要客户端和服务端,而且要首先启动服务端。
UDP客户端:
1.建立UDP的socket服务。
2.将要发送的数据封装到数据包中。
3.通过UDP的socket服务将数据包发送出去。
4.关闭socket服务。
public class UDPClient {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
//1.建立UDPsocket服务
DatagramSocket ds = new DatagramSocket();
//2.将要发送的数据封装到数据包中
byte[] b = "hello".getBytes();
String localHost = "";
DatagramPacket dp = new DatagramPacket(b, b.length,InetAddress.getByName(localHost ),10000);
//3.将数据包发送出去
ds.send(dp);
//4.关闭socket
ds.close();
}
}
UDP服务端:
1.建立UDP socket服务,因为是要接受数据,必须要明确一个端口号。
2.创建数据包,用于存储接收到的数据,方便数据包对象的方法解析这些数据。
3.使用socket服务的receive方法将接收的数据存储到数据包中。
4.通过数据包的方法解析数据包中的数据。
5.关闭资源
public class UDPServer {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
//1.建立socket服务,并指定端口
DatagramSocket ds = new DatagramSocket(10000);
//2.创建数据包用于接收数据
byte[] b = new byte[1024];
DatagramPacket dp = new DatagramPacket(b, b.length);
//3.使用receive方法将接收的数据存储到数据包中
ds.receive(dp);
//4.通过数据包的方法解析数据包中的数据
String ip = dp.getAddress().getHostAddress();
int port = dp.getPort();
String data = new String(dp.getData());
System.out.println(ip+":"+port+":"+data
ds.close();
}
}
UDP快速,无连接的特点,使它成为聊天通信锁使用的技术。
二、TCP
特点:1.建立连接,形成数据的传输通道,同时明确目的主机。
2.在连接中进行大数据量传输。
3.通过三次握手完成连接,是可靠协议。
4.必须建立连接,效率会稍低。
TCP客户端:
1.创建TCP客户端socket服务。
2.如果连接建立成功,说明数据传输通道已经建立,该通道就是socket流。
3.使用输出流,将数据写出。
4.关闭资源。
public class TCPClient {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
//1.建立socket服务,并指明目的主机
Socket s = new Socket(InetAddress.getLocalHost().getHostAddress(),10000);
//2.建立连接通道,获取socket流中的输出流
OutputStream out = s.getOutputStream();
//3.使用输出流将数据写出
out.write("hello".getBytes());
//4.关闭资源
s.close();
}
}
TCP服务端:
1.创建服务端socket服务。
2.通过服务端对外提供的一个端口,获取客户端对象。
3.通过客户端对象获取socket流读取客户端发来的数据,并打印在控制台上。
4.关闭资源。
public class TCPServer {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
//1.创建服务端socket服务
ServerSocket ss = new ServerSocket(10000);
//2.通过服务端对外提供的一个端口,获取客户端对象。
Socket s = ss.accept();
String ip = s.getInetAddress().getHostAddress();
//3.通过socket对象获取输入流
InputStream in = s.getInputStream();
byte[] b = new byte[1024];
int len = in.read(b);
String data = new String(b,0,len);
//4.将获得的数据打印在控制台上
System.out.println(ip+":"+data);
//5.关闭资源
s.close();
ss.close();
}
}
可以看到,同样的,客户端与服务端是两个独立的程序,要先启动服务端。