java数据传输
网络编程
-
网络编程概念
计算机网络
是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,
在网络操作系统,网络管理软件及网络通信协议的管理和协调下,
实现资源共享和信息传递的计算机系统。
网络编程
就是用来实现网络互连的不同计算机上运行的程序间可以进行数据交换 -
网络编程三要素
1.IP地址:InetAddress: 网络中设备的标识,不易记忆,可用主机名
2.端口号: 用于标识进程的逻辑地址,不同进程的标识
3.传输协议: 通讯的规则常见协议:TCP,UDP -
两种协议传输
UDP
将数据源和目的封装成数据包中,不需要建立连接;
每个数据报的大小在限制在64k;
因无连接,是不可靠协议;
不需要建立连接,速度快
TCP
建立连接,形成传输数据的通道;
在连接中进行大数据量传输;
需要连接所以是可靠协议;
必须建立连接,效率会稍低
UDP协议传输
- 接收端
public class UDPServer {
public static void main(String[] args) throws IOException {
//创建数据报套接字并将其绑定到本地主机上的指定端口。
//创建服务端的Socket 并向外暴露端口
DatagramSocket ds = new DatagramSocket(6666);
//创建一个数据报包
//DatagramPacket( byte[] buf, int length)
//构造 DatagramPacket,用来接收长度为 length 的数据包。
byte[] bytes = new byte[1024];
DatagramPacket datagramPacket = new DatagramPacket(bytes, bytes.length);
System.out.println("服务端已经开启....");
//接收数据
ds.receive(datagramPacket);//阻塞式方法
//从数据报包里面取出数据
byte[] data = datagramPacket.getData();
int length = datagramPacket.getLength();//取出数据的实际长度
String s = new String(data, 0, length);
System.out.println(s);
//释放资源
ds.close();
}
}
- 发送端
public class UDPClient {
public static void main(String[] args) throws IOException {
//1.创建客户端的Socket
DatagramSocket ds = new DatagramSocket();
//2.发送:知道对方ip 端口
//DatagramPacket 数据报包,
//DatagramPacket( byte[] buf, int length, InetAddress address,int port)
//构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。
byte[] bytes = "UPD你好!我来了".getBytes();
InetAddress byName = InetAddress.getByName("192.168.11.123");
DatagramPacket datagramPacket = new DatagramPacket(bytes, bytes.length, byName, 6666);
ds.send(datagramPacket);
//3.释放资源
ds.close();
}
}
TCP传输
-
接收端
public class TCPServer { public static void main(String[] args) throws IOException { //ServerSocket( int port) //创建绑定到特定端口的服务器套接字。 ServerSocket ss = new ServerSocket(8888);//暴露端口号 //侦听 客户端的连接 System.out.println("服务器已经开启,等待连接..."); //一旦有客户端连接上来,就返回该套接字 //侦听并接受到此套接字的连接。此方法在连接传入之前一直阻塞。 Socket sk = ss.accept();//阻塞式方法,会阻塞在这里,等待客户端的连接 InputStream in = sk.getInputStream(); byte[] bytes = new byte[1024]; int len = in.read(bytes); String s = new String(bytes, 0, len); System.out.println(s); //释放资源 ss.close(); } }
-
发送端
public class TCPClient {
public static void main(String[] args) throws IOException {
//参1,服务的的IP 参数2:服务端 端口
Socket socket = new Socket("192.168.11.123", 8888);
//发送数据
//获取通道中的流
OutputStream out = socket.getOutputStream();
out.write("你好TCP服务端,我来了".getBytes());
//释放资源
socket.close();
}
}