UDP通信

UDP是一种面向无连接的协议,在通信时发送端和接收端不用建立连接。

构造方法创建DatagramPacket对象

发送端一定要明确指出数据的目的地(ip地址和端口号)而接收端不需要明确知道数据的来源,只需要接收到数据即可。

DatagramSocket()

用于创建发送端的DatagramSocket对象

DatagramSocket(int port)

创建接收端的DatagramSocket对象

* 发送端

 * 1,创建DatagramPacket对象,封装数据接收的地址和端口

 * 2,创建DatagramSocket对象

* 3,调用DatagramSocket中的send方法,发送数据

 * 4关闭资源DatagramSocket

 

 * UDP接收端

 *

 * 1,创建DatagramSocket对象绑定端口号(要和发送端端口号一致)

 * 2,创建字节数组,接收发来的数据

 * 3,创建数据包对象DatagramPacket

 * 4,调用DatagramSocket对象方法receiveDatagramPacket dp)接收数据,数据放在数据包中

 * 5,拆包

 

 

package com.oracle.demo02;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;

import sun.print.resources.serviceui;

//客户端
public class TCPClient {

    public static void main(String[] args) throws IOException, IOException {
        Scanner sc=new Scanner(System.in);
        // 创建客户端对象,明确要连接的服务器所在的ip地址和端口号
        Socket socket=new Socket("127.0.0.1",9999);
        //获取字节输出流
        OutputStream fos=socket.getOutputStream();
        //向服务器写数据
        fos.write(sc.next().getBytes());
        
        //接收服务器响应
        //获取字节输入流
        InputStream fis=socket.getInputStream();
        byte[] bytes=new byte[1024];
        int len=fis.read(bytes);
        //获取ip地址
        String ip=socket.getInetAddress().getHostAddress();
        System.out.println("ip地址为:"+ip+",发送的内容为:"+new String(bytes,0,len));
        socket.close();
    }

}

 

package com.oracle.demo02;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

//服务器端
public class TCPserver {

    public static void main(String[] args) throws IOException {
        Scanner sc=new Scanner(System.in);
        // 创建服务器对象,明确端口号
        ServerSocket server=new ServerSocket(9999);
        //和客户端创建联系
        Socket socket=server.accept();
        //获取字节输入流
        InputStream fis=socket.getInputStream(); 
        byte[] bytes=new byte[1024];
        int len=fis.read(bytes);
        //获取客户端ip
        String ip=socket.getInetAddress().getHostAddress();
        System.out.println("ip地址为:"+ip+",发送的内容为:"+new String(bytes,0,len));
        //回复客户端
        //获取字节输出流
        OutputStream fos=socket.getOutputStream();
        fos.write(sc.next().getBytes());
        //释放资源
        server.close();
        
    }

}

 

原文地址:https://www.cnblogs.com/longmingyeyu/p/12790700.html