Java入门TCP客户端和服务器应用程序 2024.7.27 22:14

下面是一个完整的示例,展示如何使用 Java 的 Socket 和 ServerSocket 类编写一个简单的 TCP 客户端和服务器应用程序,以及一个简单的聊天应用程序。代码包括客户端和服务器的实现,能够通过 TCP 连接进行消息交换。

1. TCP 服务器程序

首先,我们将创建一个简单的 TCP 服务器,它监听特定端口并能够接收来自客户端的消息。

Server.java

package gpt;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
    private static final int port = 12345;//设置监听端口

    public static void main(String[] args) {
        System.out.println("服务器启动,等待客户端连接...");
        try(ServerSocket serverSocket = new ServerSocket(port)) {
         while (true)
         {
             Socket clientSocket = serverSocket.accept();
             System.out.println("客户端已连接:" + clientSocket.getInetAddress());

             //创建一个新的线程处理客户端请求
             new ClientHandler(clientSocket).start();
         }
        } catch (Exception e) {
            System.err.println("服务器异常: " + e.getMessage());
        }

    }

}
class ClientHandler extends Thread{
    private Socket clientSocket;

    public ClientHandler(Socket clientSocket) {
        this.clientSocket = clientSocket;
    }

    @Override
    public void run() {
        try(BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
            PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true)) {
            String inputlines;
            while((inputlines = in.readLine())!=null)
            {
                System.out.println("收到消息:" + inputlines);
                out.println(inputlines.toUpperCase());//发送响应
            }
        } catch (Exception e) {
            System.out.println("客户端处理异常" + e.getMessage());
        }
        finally {
            try {
                clientSocket.close();
            } catch (IOException e) {
                System.out.println("关闭异常连接" + e.getMessage());
            }
        }
    }
}

2. TCP 客户端程序

然后,我们将创建一个简单的 TCP 客户端,它连接到服务器并能够发送消息。

Client.java

package gpt;

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

public class Client {
    private static final String SERVER_ADDRESS = "localhost"; //服务器地址
    private static final int SERVER_PORT = 12345; //服务器端口

    public static void main(String[] args) {
        try (Socket socket = new Socket(SERVER_ADDRESS, SERVER_PORT);
             PrintWriter out = new PrintWriter(socket.getOutputStream(),true);
             BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
             Scanner sc = new Scanner(System.in)) {

            System.out.println("已连接到服务器,你可以开始聊天");

            //新线程用于接收服务器消息
            new Thread(() -> {
                    try {
                        String severMessage;
                         while((severMessage = in.readLine())!=null)
                         {
                             System.out.println("服务器:" + severMessage);
                         }
                    } catch (Exception e) {
                        System.out.println("接收消息时出错" + e.getMessage());
                    }
                }

            ).start();

            //主线程用于发送信息
            String userInput;
            while(true)
            {
                userInput = sc.nextLine();
                if(userInput.equalsIgnoreCase("exit"))
                {
                    break;
                }
                out.println(userInput);//发送信息
            }
        }

        catch (Exception e)
        {
            System.err.println("连接服务器时出现异常: " + e.getMessage());
        }
    }
}

3. 使用示例

  • 1.编译代码:
    使用 javac 编译 Server.java 和 Client.java 文件。

  • 2.运行服务器:首先启动服务器:java Server

  • 3.你应该会看到输出“服务器启动,等待客户端连接…”。

  • 4.运行客户端:java Client
    你可以输入任意消息,然后按回车键发送到服务器。服务器将以大写形式回复。

  • 5.结束会话:
    在客户端输入 exit 以关闭客户端程序。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您提供一个简单的TCP多线程聊天程序服务器的示例代码,可以响应客户请求。以下是代码: ```python import socket import threading # 服务器IP和口 SERVER_HOST = '192.168.1.1' SERVER_PORT = 8888 # 最大客户连接数 MAX_CLIENTS = 10 # 存储所有客户的连接对象 clients = [] # 创建TCP服务器套接字 server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # 绑定服务器IP和口 server_socket.bind((SERVER_HOST, SERVER_PORT)) # 设置服务器监听 server_socket.listen(MAX_CLIENTS) print(f'Server started on {SERVER_HOST}:{SERVER_PORT}') def handle_client(client_socket, client_address): """ 处理客户请求的函数 """ while True: try: # 接收客户消息 message = client_socket.recv(1024).decode() if not message: # 客户断开连接 print(f'{client_address} disconnected') clients.remove(client_socket) client_socket.close() break else: # 向所有客户广播消息 for c in clients: if c != client_socket: c.sendall(message.encode()) except: # 发生异常,客户断开连接 print(f'{client_address} disconnected') clients.remove(client_socket) client_socket.close() break while True: try: # 等待客户连接请求 client_socket, client_address = server_socket.accept() print(f'{client_address} connected') # 将客户连接对象存储到列表中 clients.append(client_socket) # 启动新的线程处理客户请求 client_thread = threading.Thread(target=handle_client, args=(client_socket, client_address)) client_thread.start() except: # 服务器发生异常 print('Server error') break # 关闭服务器套接字 server_socket.close() ``` 在上述代码中,我们使用了 `socket` 模块创建了一个 TCP 服务器套接字,并将其绑定到指定的 IP 地址和口上。然后,我们使用 `listen` 方法开始监听客户连接请求,同时创建一个空列表来存储所有客户连接对象。 在 `handle_client` 函数中,我们使用一个死循环来不断接收客户发送的消息,并将其广播给所有其他客户。如果客户断开连接,我们将其连接对象从列表中删除,并关闭连接对象。 最后,在主循环中,我们使用 `accept` 方法等待客户连接请求,并为每个新连接启动一个新的线程来处理客户请求。如果服务器发生异常,我们将退出主循环,并关闭服务器套接字。 希望这个简单的示例程序能帮助到您。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值