在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协议的客户端和服务端模型。这是网络编程的基础,通过这种方式,你可以实现更加复杂的网络应用程序。

目录
相关文章
|
9天前
|
Java 数据格式
Java面试题:简述Java Socket编程的基本流程,包括客户端和服务器的创建与通信。
Java面试题:简述Java Socket编程的基本流程,包括客户端和服务器的创建与通信。
14 0
|
15天前
|
JSON NoSQL Java
Redis18的Java客户端-StringRedisTemplate,序列化存在的问题,使用StringRedisTemplate解决序列化的方法
Redis18的Java客户端-StringRedisTemplate,序列化存在的问题,使用StringRedisTemplate解决序列化的方法
|
15天前
|
JSON NoSQL Java
Redis17----Redis的java客户端-RedisTemplte的RedisSerializer,赋值的是虎哥,而取出来的是ROSE的原因,使用keys
Redis17----Redis的java客户端-RedisTemplte的RedisSerializer,赋值的是虎哥,而取出来的是ROSE的原因,使用keys
|
15天前
|
NoSQL Java Redis
Redis15-Redis的java客户端,认识SpringDataRedis
Redis15-Redis的java客户端,认识SpringDataRedis
|
15天前
|
Java Redis 数据安全/隐私保护
Redis14----Redis的java客户端-jedis的连接池,jedis本身是线程不安全的,并且频繁的创建和销毁连接会有性能损耗,最好用jedis连接池代替jedis,配置端口,密码
Redis14----Redis的java客户端-jedis的连接池,jedis本身是线程不安全的,并且频繁的创建和销毁连接会有性能损耗,最好用jedis连接池代替jedis,配置端口,密码
|
15天前
|
Java Redis 数据安全/隐私保护
Redis13的Java客户端-Jedis快速入门,建立连接的写法,ip地址,设置密码密码,选择库的写法
Redis13的Java客户端-Jedis快速入门,建立连接的写法,ip地址,设置密码密码,选择库的写法
|
15天前
|
安全 NoSQL Java
网络安全-----Redis12的Java客户端----客户端对比12,Jedis介绍,使用简单安全性不足,lettuce(官方默认)是基于Netty,支持同步,异步和响应式,并且线程是安全的,支持R
网络安全-----Redis12的Java客户端----客户端对比12,Jedis介绍,使用简单安全性不足,lettuce(官方默认)是基于Netty,支持同步,异步和响应式,并且线程是安全的,支持R
|
21天前
|
缓存 NoSQL Java
Redis系列学习文章分享---第四篇(Redis快速入门之Java客户端--商户查询缓存+更新+双写一致+穿透+雪崩+击穿+工具封装)
Redis系列学习文章分享---第四篇(Redis快速入门之Java客户端--商户查询缓存+更新+双写一致+穿透+雪崩+击穿+工具封装)
26 0
|
21天前
|
存储 NoSQL Java
Redis系列学习文章分享---第三篇(Redis快速入门之Java客户端--短信登录+session+验证码+拦截器+登录刷新)
Redis系列学习文章分享---第三篇(Redis快速入门之Java客户端--短信登录+session+验证码+拦截器+登录刷新)
29 0
|
21天前
|
存储 NoSQL Java
Redis系列学习文章分享---第二篇(Redis快速入门之Java客户端--Jedis+连接池+SpringDataRedis+RedisTemplate+RedisSerializer+Hash)
Redis系列学习文章分享---第二篇(Redis快速入门之Java客户端--Jedis+连接池+SpringDataRedis+RedisTemplate+RedisSerializer+Hash)
27 0