Java Socket编程简单案例【TCP与UDP】

Java Socket编程简单案例【TCP与UDP】

1.TCP

服务器端:

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
    
    
    public static void main(String[] args) {
    
    
        try {
    
    
            // 1.服务器建立通信ServerSocket
            ServerSocket ss = new ServerSocket(9999);
            System.out.println("启动服务器....");

            // 2.服务器建立Socket接收客户端连接
            Socket s = ss.accept();
            System.out.println("客户端:"+s.getInetAddress().getHostAddress() + "已连接到服务器");

            // 3.建立IO输入流读取客户端发送的数据
            BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
            String mess = br.readLine();
            System.out.println("客户端: " + mess);

            // 4.建立IO输出流向客户端发送数据消息
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
            bw.write( "【服务器端】发送消息\n");
            bw.flush();
        } catch (IOException e) {
    
    
            e.printStackTrace();
        }
    }
}

客户端:

import java.io.*;
import java.net.Socket;

public class Client {
    
    
    public static void main(String[] args) {
    
    
        try {
    
    

            // 创建Socket通信,设置通信服务器的IP和Port
            Socket socket = new Socket("127.0.0.1", 9999);

            // 建立IO输出流向服务器发送数据消息
            InputStream is = socket.getInputStream();
            OutputStream os = socket.getOutputStream();

            // 数据发送流,注意bw.write()中的数据要加 \n,否则Server会一直等待
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));
            bw.write("发送消息【客户端】\n");
            bw.flush();

            // 数据接收留
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            String mess = br.readLine();
            System.out.println("服务器: " + mess);

        } catch (IOException e) {
    
    
            e.printStackTrace();
        }
    }
}

运行结果:【先运行服务器代码,然后运行客户端代码】
在这里插入图片描述
在这里插入图片描述

2.UDP

服务器端:

import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class UdpServer {
    
    
    public static void main(String[] args) {
    
    

        try {
    
    
            // 创建要接收的报文的存储对象
            byte[] bytes = new byte[1024];
            DatagramPacket packet = new DatagramPacket(bytes, bytes.length);

            // 创建服务器端socket
            DatagramSocket socket = new DatagramSocket(9991);
            System.out.println("udp server 启动...");

            // 接收消息,如果未收到消息会一直阻塞
            socket.receive(packet);
            String mess = new String(packet.getData(), 0, packet.getLength());
            System.out.println(packet.getLength());
            System.out.println(mess);
        } catch (Exception e) {
    
    
            e.printStackTrace();
        }
    }
}

客户端:

import java.io.IOException;
import java.net.*;

public class UdpClient {
    
    
    public static void main(String[] args) {
    
    
        String mess = "udp message from client";

        try {
    
    
            // 获取IP地址对象
            InetAddress address = InetAddress.getByName("127.0.0.1");

            // 创建packet包对象,封装要发送的包数据和服务器地址和端口号
            DatagramPacket packet = new DatagramPacket(mess.getBytes(), mess.getBytes().length, address, 9991);

            // 创建socket对象
            DatagramSocket socket = new DatagramSocket();

            // 发送数据
            socket.send(packet);

            socket.close();

        } catch (IOException e) {
    
    
            e.printStackTrace();
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_36944952/article/details/125406771