在Java中使用TCP协议搭建一个简单的客户端

简介: 如何在Java中使用TCP协议搭建一个简单的客户端

好的,下面是一个简洁的示例,用于展示如何在Java中使用TCP协议搭建一个简单的客户端。我们会先创建一个简单的服务端,然后再创建一个客户端与之通讯。

 

步骤1:创建TCP服务端

 

首先,我们需要创建一个简单的TCP服务端来监听连接并处理来自客户端的数据请求。

 

```java
import java.io.*;
import java.net.*;
 
public class SimpleServer {
    public static void main(String[] args) {
        int port = 12345; // 服务端监听的端口号
        try (ServerSocket serverSocket = new ServerSocket(port)) {
            System.out.println("服务器启动,等待客户端连接...");
 
            while (true) {
                try (Socket socket = serverSocket.accept()) {
                    System.out.println("客户端连接成功:" + socket.getInetAddress());
 
                    BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                    PrintWriter output = new PrintWriter(socket.getOutputStream(), true);
 
                    String message;
                    while ((message = input.readLine()) != null) {
                        System.out.println("收到客户端消息:" + message);
                        output.println("服务器响应:" + message);
                    }
                } catch (IOException e) {
                    System.out.println("客户端连接异常:" + e.getMessage());
                }
            }
        } catch (IOException e) {
            System.err.println("无法启动服务器:" + e.getMessage());
        }
    }
}
```

 

步骤2:创建TCP客户端

 

接下来,我们创建一个简单的TCP客户端来连接并与服务端通讯。

 

```java
import java.io.*;
import java.net.*;
 
public class SimpleClient {
    public static void main(String[] args) {
        String hostname = "localhost"; // 服务端地址
        int port = 12345; // 服务端端口号
 
        try (Socket socket = new Socket(hostname, port)) {
            PrintWriter output = new PrintWriter(socket.getOutputStream(), true);
            BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            BufferedReader consoleInput = new BufferedReader(new InputStreamReader(System.in));
 
            System.out.println("已连接到服务器:" + socket.getInetAddress());
 
            String userInput;
            while (true) {
                System.out.print("输入消息:");
                userInput = consoleInput.readLine();
 
                if ("exit".equalsIgnoreCase(userInput)) {
                    break;
                }
 
                output.println(userInput);
                String response = input.readLine();
                System.out.println("服务器响应:" + response);
            }
        } catch (UnknownHostException e) {
            System.err.println("未知主机:" + hostname);
        } catch (IOException e) {
            System.err.println("I/O 错误:" + e.getMessage());
        }
    }
}
```

 

代码详解

 

服务端代码详解

 

1. **ServerSocket**: 创建一个`ServerSocket`对象,并绑定到指定的端口。

2. **accept()**: 这个方法会阻塞,直到有客户端连接进来。

3. **Socket**: 当有客户端连接时,`accept()`方法会返回一个`Socket`对象,通过这个对象可以与客户端进行通讯。

4. **BufferedReader 和 PrintWriter**: 使用这些流类来读取客户端发送的数据以及向客户端发送数据。

 

服务端会不断地等待新的客户端连接,并为每个连接创建一个新的`Socket`对象进行处理。

 

客户端代码详解

 

1. **Socket**: 创建一个`Socket`对象,并连接到指定的主机和端口。

2. **PrintWriter 和 BufferedReader**: 使用这些流类来发送数据到服务器和读取服务器的响应。

3. **控制台输入**: 通过`BufferedReader`读取用户输入,并将其发送到服务器。

 

客户端程序会读取用户输入,并将其发送到服务器,然后等待并打印服务器的响应。当用户输入“exit”时,客户端程序会退出。

 

运行步骤

 

1. **运行服务端**: 先编译并运行`SimpleServer`类。服务器会启动并等待客户端连接。

```sh
    javac SimpleServer.java
    java SimpleServer
    ```

 

2. **运行客户端**: 编译并运行`SimpleClient`类。客户端会连接到服务器,并可以与之通讯。

```sh
    javac SimpleClient.java
    java SimpleClient
    ```

 

3. **测试通讯**: 在客户端程序中输入消息并发送,可以看到服务端打印出相应的消息。输入“exit”可以断开连接并退出客户端程序。

 

通过上述步骤,你可以搭建一个简单的基于TCP协议的客户端和服务端模型。这是网络编程的基础,通过这种方式,你可以实现更加复杂的网络应用程序。

目录
相关文章
|
18小时前
|
JSON NoSQL Java
redis的java客户端的使用(Jedis、SpringDataRedis、SpringBoot整合redis、redisTemplate序列化及stringRedisTemplate序列化)
这篇文章介绍了在Java中使用Redis客户端的几种方法,包括Jedis、SpringDataRedis和SpringBoot整合Redis的操作。文章详细解释了Jedis的基本使用步骤,Jedis连接池的创建和使用,以及在SpringBoot项目中如何配置和使用RedisTemplate和StringRedisTemplate。此外,还探讨了RedisTemplate序列化的两种实践方案,包括默认的JDK序列化和自定义的JSON序列化,以及StringRedisTemplate的使用,它要求键和值都必须是String类型。
redis的java客户端的使用(Jedis、SpringDataRedis、SpringBoot整合redis、redisTemplate序列化及stringRedisTemplate序列化)
|
1月前
|
消息中间件 Java Kafka
【Azure 事件中心】在微软云中国区 (Mooncake) 上实验以Apache Kafka协议方式发送/接受Event Hubs消息 (Java版)
【Azure 事件中心】在微软云中国区 (Mooncake) 上实验以Apache Kafka协议方式发送/接受Event Hubs消息 (Java版)
|
1月前
|
Java
Java使用FileInputStream&&FileOutputStream模拟客户端向服务器端上传文件(单线程)
Java使用FileInputStream&&FileOutputStream模拟客户端向服务器端上传文件(单线程)
60 1
|
2月前
|
缓存 网络协议 算法
(二)Java网络编程之爆肝HTTP、HTTPS、TLS协议及对称与非对称加密原理!
作为一名程序员,尤其是Java程序员,那必须得了解并掌握HTTP/HTTPS相关知识。因为在如今计算机网络通信中,HTTP协议的作用功不可没,无论是日常上网追剧、冲���、亦或是接口开发、调用等,必然存在HTTP的“影子”在内。尤其对于WEB开发者而言,HTTP几乎是每天会打交道的东西。
68 10
|
2月前
|
消息中间件 Java Kafka
Java 客户端访问kafka
Java 客户端访问kafka
35 9
|
1月前
|
Java
Java模拟文件发送给服务器,服务器将文件转发给其他用户,并保存到服务器本地,其他用户可以接收,并保存到本地磁盘,支持各种文件格式,并解决通信中服务器怎么区分客户端发来的文件类型
Java模拟文件发送给服务器,服务器将文件转发给其他用户,并保存到服务器本地,其他用户可以接收,并保存到本地磁盘,支持各种文件格式,并解决通信中服务器怎么区分客户端发来的文件类型
|
2月前
|
网络协议 Java 数据处理
(一)Java网络编程之计网基础、TCP-IP协议簇、TCP、UDP协议及腾讯QQ通信原理综述
就目前而言,多数网络编程的系列的文章都在围绕着计算机网络体系进行阐述,但其中太多理论概念,对于大部分开发者而言,用途甚微。因此,在本系列中则会以实际开发者的工作为核心,从Java程序员的角度出发,详细解读Java的网络编程核心内容。
|
2月前
|
网络协议 Java
如何在Java中使用Socket编程实现TCP连接?
在Java中,通过Socket编程实现TCP连接非常常见。以下演示了基本的TCP通信流程,可根据具体需求进行扩展。
115 0
|
2月前
|
Java 数据格式
Java面试题:简述Java Socket编程的基本流程,包括客户端和服务器的创建与通信。
Java面试题:简述Java Socket编程的基本流程,包括客户端和服务器的创建与通信。
40 0
|
2月前
|
JSON NoSQL Java
Redis18的Java客户端-StringRedisTemplate,序列化存在的问题,使用StringRedisTemplate解决序列化的方法
Redis18的Java客户端-StringRedisTemplate,序列化存在的问题,使用StringRedisTemplate解决序列化的方法