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

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 socket 通信 tcp