温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Java网络连接如何建立

发布时间:2026-07-18 10:22:30 来源:亿速云 阅读:104 作者:小樊 栏目:编程语言

在 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<String> 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

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

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手