Java网络编程Demo(一)多线程的TCP网络程序

本文介绍了一个简单的TCP服务端与客户端程序的设计与实现。服务端采用多线程方式处理多个客户端连接请求,客户端则负责发送请求并接收服务端响应。通过示例代码展示了如何使用Java实现这一过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Demo_01.java

package TCP;

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

public class Demo_01 {
    public static void main(String[] args) throws Exception {
        new TCPServer().listen();
    }
}

// TCP服务端
class TCPServer {
    private static final int PORT = 10000;

    public void listen() throws Exception {
        ServerSocket serverSocket = new ServerSocket(PORT);

        // 使用while循环不停地接收客户端发送的请求, 可允许多个用户访问同一个服务器
        while (true) {
            final Socket client = serverSocket.accept();

            new Thread() {
                public void run() {
                    // 使用"带资源的try"构造, 可对try块参数表中的所有AutoCloseable对象自动调用close()
                    try (OutputStream os = client.getOutputStream()) {
                        System.out.println("开始与客户端交互数据...");
                        os.write(("与服务端交互数据成功...").getBytes());
                        Thread.sleep(5000);
                        System.out.println("结束与客户端交互数据...");
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                };
            }.start();
        }
    }
}

Demo_02.java

package TCP;

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

public class Demo_02 {
    public static void main(String[] args) throws Exception {
        new TCPClient().connect();
    }
}

// TCP客户端
class TCPClient {
    private static final int PORT = 10000;  // 服务器的端口号

    public void connect() throws Exception {
        Socket client = new Socket(InetAddress.getLocalHost(), PORT);
        client.setSoTimeout(10000);     // 设置超时

        // 使用"带资源的try"构造, 可对try块参数表中的所有AutoCloseable对象自动调用close()
        try (InputStream is = client.getInputStream()) {
            byte[] buf = new byte[1024];
            int len = is.read(buf);
            System.out.println(new String(buf, 0, len));
        }
    }
}

运行结果

  • Demo_01.java
    这里写图片描述
  • Demo_02.java
    这里写图片描述

总结

为了验证服务器端程序(Demo_01.java)是否实现了多线程,首先运行服务器端程序(Demo_01.java),之后运行三个客户端程序(Demo_02.java),当运行第一个客户端程序时,服务器端马上就进行数据处理,打印出“开始与客户端交互数据…”,再运行第二个和第三个客户端程序,会发现服务器端也立刻作出回应,两个客户端会话结束后分别打印各自结束信息。这说明通过多线程的方式,可以实现多个用户对同一个服务器端程序的访问。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值