实例快速上手UDP和TCP的使用

TCP和UDP两个协议在Java通信编程中是如何被使用的

UDP协议与TCP协议之间的区别不再分析,主要是分析一下这两个协议在Java通信编程中是如何被使用的。
首先介绍TCP,对于TCP,Java语言为它提供了良好的支持。建立TCP通信,首先需要构建服务器,并且得
到服务器的IP和端口号。
TCP协议下的Socket类:
java.net.Socket类代表客户端连接
java.net.ServerSocket类代表服务器端连接
Server:ServerSocket ss = new ServerSocket(5000); //创建服务器端的socket对象
              Socket socket = ss.accept(); //监听连接
Client:  Socket socket = new Socket ("xxx.xxx.xxx.xxx", 5000); //创建客户端的Socket对象,xxx.xxx.xxx.xxx代表服
              务器的IP
构建输入输出:
输入:InputStream is = socket.getInputStream(); //输入流,代表接收到的信息
            is.read(buffer);
输出:OutputStream os = socket socket.getOutputStream(); //输出流,代表发送出去的信息
            os.write("Welcome".getBytes()); //以字节传输
关闭资源:
is.close();
os.close();
socket.close();
具体实例:使用TCP/IP的套接字(Socket)进行通信 


接下来介绍一下UDP
UDP建立连接的方式与TCP的方式不同,它只需要建立一个连接对象即可,不需要指定服务器的IP和端口号。
UDP协议下的Socket类:
java.net.DatagramSocket类既可以实现客户端连接,也可以实现服务器端连接。
java.net.DatagramPacket类实现对于传输的数据封装。在UDP协议下,无论是需要发送的数据还是需要接收的数
据都需要被处理成DatagramPacket类型的对象。
DatagramSocket ds = new DatagramScoket(); //建立连接, 如果发送端和接收端需要通信,那么在建立连接时需要监
听端口:DatagramSocket ds = new DatagramScoket(10010); InetAddress senderIP = revDp.getAddress(); int senderPort=rev
Dp.getPort(); //获得发送端的IP和端口号
构建输入输出
输出:
byte[] b = "Hello".getBytes();
InetAddress server = InetAddress.getByName("xxx.xxx.xxx.xxx"); //xxx.xxx.xxx.xxx为接收方的IP
DatagramPacket sendDp = new DatagramPacket(b,b.length,server,port); //port为接收方的端口号10010
ds.send(sendDp);
输入:
byte[] data = new byte[1024];
DatagramPacket revDp = new DatagramPacket(data, data.length);
ds.receive(revDp);
关闭资源:
ds.close()

TCP

客户端:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

public class MyClient {

    public static void main(String[] args) throws Exception{
        
        Socket socket = null;
        BufferedReader in = null;
        PrintWriter out = null;
        
        BufferedReader input = null;
        // 请求指定ip和端口号的服务器
        socket = new Socket("127.0.0.1",3333);
        
        while(true){

            in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            
            out = new PrintWriter(socket.getOutputStream(), true);
            // 接收控制台的输入
            input = new BufferedReader(new InputStreamReader(System.in));
            // out.println("this is client info!");
            String info = input.readLine();
            
            out.println(info);
            
            String str = in.readLine();
            
            System.out.println("客户端显示--》服务器的信息:" + str);
        }
        //in.close();
        //out.close();
    }

}

服务端:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class MyServices {

    public static void main(String[] args) throws Exception{
        ServerSocket ss = null;
        Socket socket = null;
        BufferedReader in = null;
        PrintWriter out = null;
        BufferedReader input = null;
        
        // 监听3333端口
        ss = new ServerSocket(3333);
        // 等待接收客户端的请求
        socket = ss.accept();
        while(true){
            // 获取连接对象的输入流
            in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            // 获取客户端的输入信息
            String str = in.readLine();
            
            input = new BufferedReader(new InputStreamReader(System.in));
            
            System.out.println("服务器显示-->客户端输入数据:" + str);
            
            out = new PrintWriter(socket.getOutputStream(),true);
            // 将数据输出到客户端
            // out.println("hehe");
            String info = input.readLine();
            
            out.println(info);
        }
//        in.close();
//        out.flush();
//        out.close();
    }

}

UDP
客户端:
import java.net.DatagramPacket; import java.net.DatagramSocket; public class UDPClient { public static void main(String[] args) throws Exception { DatagramSocket ds = null; DatagramPacket dp = null; byte[] buf = new byte[1024]; ds = new DatagramSocket(3333); dp = new DatagramPacket(buf, 1024); // 接收数据,放入数据报 ds.receive(dp); // 从数据报中取出数据,这步很关键呦. String info = new String(dp.getData(),0, dp.getLength()); System.out.println("接收到的信息是:" + info); } } 服务端: import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; public class UDPServer { public static void main(String[] args) throws Exception { DatagramSocket ds = null; DatagramPacket dp = null; // 构建发送对象 ds = new DatagramSocket(); // 将数据打包-->打成数据报 String info = "hello world!"; dp = new DatagramPacket(info.getBytes(), info.length(), InetAddress.getByName("localhost"),3333); // 发出数据报 ds.send(dp); } }
原文地址:https://www.cnblogs.com/ltb6w/p/8976320.html