验证码: 看不清楚,换一张 查询 注册会员,免验证
  • {{ basic.site_slogan }}
  • 打开微信扫一扫,
    您还可以在这里找到我们哟

    关注我们

Java网络连接如何建立

阅读:796 来源:乙速云 作者:代码code

Java网络连接如何建立

在 Java 中建立网络连接,通常取决于你使用的网络协议。最常见的是 TCP(如 HTTP、Socket)UDP。下面按常见场景给你一个清晰、实用的说明。


一、使用 java.net.Socket 建立 TCP 连接(最基础)

1️⃣ 客户端建立连接

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

public class Client {
    public static void main(String[] args) {
        try {
            // 建立 TCP 连接
            Socket socket = new Socket("localhost", 8080);

            // 发送数据
            OutputStream os = socket.getOutputStream();
            PrintWriter writer = new PrintWriter(os, true);
            writer.println("Hello Server");

            // 接收数据
            InputStream is = socket.getInputStream();
            BufferedReader reader =
                    new BufferedReader(new InputStreamReader(is));
            String response = reader.readLine();
            System.out.println("服务端返回:" + response);

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

2️⃣ 服务端监听连接

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

public class Server {
    public static void main(String[] args) {
        try {
            ServerSocket serverSocket = new ServerSocket(8080);
            System.out.println("服务器启动,等待连接...");

            Socket socket = serverSocket.accept(); // 阻塞等待连接
            System.out.println("客户端已连接");

            BufferedReader reader =
                    new BufferedReader(new InputStreamReader(socket.getInputStream()));
            String msg = reader.readLine();
            System.out.println("收到消息:" + msg);

            PrintWriter writer =
                    new PrintWriter(socket.getOutputStream(), true);
            writer.println("你好,客户端");

            socket.close();
            serverSocket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

流程总结:

客户端 Socket → 连接 → 服务端 ServerSocket.accept()

二、HTTP 网络连接(最常见)

方式一:使用 HttpURLConnection(JDK 自带)

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

public class HttpExample {
    public static void main(String[] args) throws Exception {
        URL url = new URL("https://www.example.com");
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();

        conn.setRequestMethod("GET");

        BufferedReader reader =
                new BufferedReader(new InputStreamReader(conn.getInputStream()));
        String line;
        while ((line = reader.readLine()) != null) {
            System.out.println(line);
        }
        conn.disconnect();
    }
}

方式二:使用 Socket 手动实现 HTTP(理解原理)

Socket socket = new Socket("www.example.com", 80);
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
out.println("GET / HTTP/1.1");
out.println("Host: www.example.com");
out.println();

BufferedReader in = new BufferedReader(
        new InputStreamReader(socket.getInputStream()));
in.lines().forEach(System.out::println);

三、UDP 网络连接(无连接)

// 发送端
DatagramSocket socket = new DatagramSocket();
byte[] data = "Hello".getBytes();
DatagramPacket packet = new DatagramPacket(
        data, data.length, InetAddress.getByName("localhost"), 9999);
socket.send(packet);
socket.close();
// 接收端
DatagramSocket socket = new DatagramSocket(9999);
byte[] buf = new byte[1024];
DatagramPacket packet = new DatagramPacket(buf, buf.length);
socket.receive(packet);
System.out.println(new String(packet.getData(), 0, packet.getLength()));
socket.close();

四、现代方式(推荐)

✅ Java 11+ java.net.http.HttpClient

import java.net.http.*;
import java.net.URI;

public class HttpClientExample {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create("https://www.example.com"))
                .build();

        HttpResponse response =
                client.send(request, HttpResponse.BodyHandlers.ofString());

        System.out.println(response.body());
    }
}

五、常见注意点

问题 说明
端口占用 Address already in use
防火墙 连接超时
阻塞 accept()read()
编码 使用 InputStreamReader 指定 UTF-8

六、怎么选?

场景 推荐
聊天 / 游戏 Socket
访问网页 HttpClient
文件传输 Socket
实时广播 UDP

如果你愿意,我可以:

  • 帮你写一个 完整可运行的 Demo
  • TCP 三次握手在 Java 中的体现
  • 对比 BIO / NIO / Netty

你现在是 学习网络基础 还是 做项目

分享到:
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: hlamps#outlook.com (#换成@)。
相关文章
{{ v.title }}
{{ v.description||(cleanHtml(v.content)).substr(0,100)+'···' }}
你可能感兴趣
推荐阅读 更多>