zoukankan      html  css  js  c++  java
  • 实例快速上手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); } }
  • 相关阅读:
    智能资产构建去中心化的资产管理系统
    以太坊—开放的智能合约完整解决方案
    去中心化的域名系统Namecoin
    bootstrap-内联文本元素-小号文本
    MySQL重新初始化安装数据库
    MySQL重新初始化安装数据库
    MySQL重新初始化安装数据库
    MySQL重新初始化安装数据库
    PHP模拟登录并获取数据
    PHP模拟登录并获取数据
  • 原文地址:https://www.cnblogs.com/ltb6w/p/8976320.html
Copyright © 2011-2022 走看看