Java网络编程中的TCP,UDP通信方式详解
2016-08-04 17:27
891 查看
Java网络编程中的TCP,UDP通信方式详解
1. TCP方式与UDP方式的区别。
2. TCP方式所使用的方法:Socket,ServerSocket以及服务端与客户端通信实例。
3. UDP方式所使用的方法:DatagramSocket,DatagramPacket以及服务端与客户端通信实例。
一:TCP方式与UDP方式的区别。
在了解TCP与UDP通信的区别之前,先看一下计算机网络通信结构:
由上图可以看出TCP和UDP都是处于网络通信中的传输层。两台不同的计算机的不同进程是通过IP地址和端口号来实现通信的,IP地址可以找到网络中唯一的一台计算机,而端口号是计算机上的某个进程的唯一标识。
因此不管是通过TCP方式还是通过UDP方式都必须得通过Socket来进行通信。TCP提供的是可靠的通过握手协议建立的通信,而UDP提供的是不可靠的,通过数据报来通信。所以UDP通信方式中才有DatagramPacket,和DatagramSocket。
因为TCP是通过握手方式来进行连接的所以通信结束之后还要进行释放操作。
二:TCP方式所使用的方法:Socket,ServerSocket以及服务端与客户端通信实例。
@Test
public void client() throws Exception { Socket socket = new Socket(InetAddress.getLocalHost(), 8090); // InetAddress.getLocalHost()为客户端请求连接的主机号,此处设置为本地主机,服务进程的端口号是8090 // 主机号和端口号唯一确定了唯一主机上面的唯一进程。 OutputStream os = socket.getOutputStream(); // socket.getOutputStream()获得输出流,通过输出流像主机发送数据。 os.write("黑猫呼叫白猫收到请回复!".getBytes()); socket.shutdownOutput(); // 关闭数据输出,如果不关闭的话服务端并不知道数据传输已经结束还会一直等待。 InputStream is = socket.getInputStream(); int len = 0; byte[] b = new byte[1024]; while ((len = is.read(b)) != -1) { String str = new String(b, 0, len); System.out.println(str); } is.close(); os.close(); socket.close(); }
@Test public void server() throws Exception { ServerSocket ss = new ServerSocket(8090); // 给服务端一个端口号8090使得客户端可以连接。 Socket socket = ss.accept(); // 接受客户端的连接 InputStream is = socket.getInputStream(); // 获得客户端的输入流 int len = 0; byte[] b = new byte[1024]; while ((len = is.read(b)) != -1) { String str = new String(b, 0, len); System.out.println(str); } OutputStream os = socket.getOutputStream(); // 通过输出流向客户端发送数据。 os.write("黑猫这里是白猫,我已收到你的呼叫!".getBytes()); os.close(); // socket.shutdownOutput(); is.close(); socket.close(); ss.close(); }
三:UDP方式所使用的方法:DatagramSocket,DatagramPacket以及服务端与客户端通信实例。
@Test public void send() throws Exception { DatagramSocket ds=new DatagramSocket(); byte[] b="我爱你祖国!".getBytes(); DatagramPacket packet=new DatagramPacket(b, 0, b.length, InetAddress.getByName("127.0.0.1"),8090); ds.send(packet); ds.close(); } @Test public void receive() throws Exception { DatagramSocket d=new DatagramSocket(8090); byte[] b=new byte[1024]; DatagramPacket packet=new DatagramPacket(b, 0, b.length); d.receive(packet); String str=new String(packet.getData(),0,packet.getLength()); System.out.println(":"+str); d.close(); }
相关文章推荐
- 【java面试系列之网络编程】TCP和UDP的区别、TCP协议的三次握手和四次挥手、TCP协议的通信状态、网络编程时的同步、异步、阻塞、非阻塞、进程间的通信方式、TCP的流量控制和拥塞控制
- Java中的TCP/UDP网络通信编程
- java网络编程(一) socket方式TCP和Datagram的UDP
- Java基础---Java---网络编程---TCP、UDP、UDP-键盘录入方式数据、Socket、TCP复制文件、UDP-聊天
- Java中的TCP/UDP网络通信编程
- Java中的TCP/UDP网络通信编程
- java中的网络编程详解 TCP 和UDP
- Java中的TCP/UDP网络通信编程
- Java学习疑惑(7)----网络编程, 详解TCP与UDP两者之间的共同点和差异
- Java TCP/UDP网络通信编程
- Java基础---Java---网络编程---TCP、UDP、UDP-键盘录入方式数据、Socket、TCP复制文件、UDP-聊天
- Java网络编程(基于TCP和UDP的通信实现)
- Java中的TCP/UDP网络通信编程
- 【网络编程】——UDP和TCP通信方式
- Java中的TCP/UDP网络通信编程
- 【网络编程】——UDP和TCP通信方式
- java 网络编程 Tcp和UDP 的使用
- Java中网络通信编程之TCP通信
- RMI网络编程开发之一 JAVA“进程间”通信方式
- Java中网络通信编程之UDP通信