Java网络编程 TCP和UDP使用示例

UDP :传输之间不需要建立连接,不可靠的传输协议。传输快,只能传输64k。

TCP:传输之间需要建立连接,可靠的传输协议.需要建立连接,效率低.可以无限量传输,http是基于tcp实现的.


运行时都应先运行服务器(服务器是提供服务的机器,ip和端口是固定的,一般情况下不会关机,时刻响应请求)。

常见的服务器软件有Aapche 的 Tomcat,IIS(MS),Nginx(负载均衡)。

TCP示例:

public static void main(String[] args) throws IOException {
        System.out.println("这是服务端");
        ServerSocket serverSocket = new ServerSocket(6789);
        //客户端socket
        Socket socket = serverSocket.accept();

        //读数据
        InputStream inputStream = socket.getInputStream();
        byte bytes[] = new byte[1024];
        inputStream.read(bytes);
        System.out.println("收到客户端:"+ new String(bytes));
        //将数据转成大写
        String result = new String(bytes).toUpperCase();

        //输出流,发送信息
        OutputStream outputStream = socket.getOutputStream();
        outputStream.write(result.getBytes());

    }
}

public class ClientDemo {
    public static void main(String[] args) throws IOException {
       System.out.println("这是客户端");
        //Socket(String host, int port)
        Socket socket = new Socket("192.168.107.17", 6789);

        //输出流,发送信息
        OutputStream outputStream = socket.getOutputStream();
        outputStream.write("abcd".getBytes());

        //输入流,读取信息
        InputStream inputStream = socket.getInputStream();
        byte bytes[] = new byte[1024];
        inputStream.read(bytes);
        System.out.println(new String(bytes));

    }
}


UDP示例 :

public class SendDemo {

    public static void main(String[] args) throws IOException {
        System.out.printf("这是发送端");
        Scanner sc = new Scanner(System.in);

        for (int i = 0; i <10 ; i++) {
            System.out.println("发送:");
            String msg = sc.next();
            byte[] msgs = msg.getBytes();

            DatagramSocket datagramSocket = new DatagramSocket();
            //IP 地址  cmd 中  ipconfig 可查询到IP地址 
            InetAddress ip = InetAddress.getByName("你的IP地址");
            
            DatagramPacket packet = new DatagramPacket(msgs,msgs.length,ip,8888);//端口号

            datagramSocket.send(packet);
        }
    }
}

public static void main(String[] args) throws IOException {

    System.out.println("这是接收端:");
    DatagramSocket datagramSocket1=new DatagramSocket(8888); 
   //端口号可更改但要和服务端的一致 1024之前的不要使用 系统会用到如果你的是1024之前的可能会被替换掉

    for (int i = 0; i < 10; i++) {
        byte[] msg = new byte[1024];
        DatagramPacket datagramPacket=new DatagramPacket(msg,msg.length);
        datagramSocket1.receive(datagramPacket);
        String result = new String(msg, 0, msg.length);

        System.out.println("发送者ip:"+datagramPacket.getAddress().getHostAddress());
        System.out.println(" 接收到:"+result);
    }

猜你喜欢

转载自blog.csdn.net/zyz0225/article/details/80187853
今日推荐