Java利用TCP协议实现客户端与服务器通信(附通信源码)

Java利用TCP协议实现客户端与服务器通信攻略

前言

在Java中实现TCP协议的客户端和服务器之间的通信,可以借助于Java中提供的Socket和ServerSocket类。其中,Socket类实现客户端的创建,ServerSocket类实现服务器的创建。本篇文档将详细讲解如何利用Java实现TCP协议的客户端与服务器之间的通信。

步骤

Java实现TCP协议的客户端与服务器之间的通信的步骤如下:

  1. 服务器端创建一个ServerSocket对象,并指定端口号;
  2. 服务器调用ServerSocket对象的accept()方法来监听客户端的连接请求;
  3. 客户端创建一个Socket对象,并指定服务器的IP地址和端口号;
  4. 客户端调用Socket对象的getInputStream()和getOutputStream()方法获取输入输出流,并利用它们来进行通信;
  5. 服务器调用accept()方法后,返回一个Socket对象,服务器可以通过Socket对象来接收客户端发送的数据;
  6. 客户端调用输出流的write()方法将数据发送给服务器;
  7. 服务器调用输入流的read()方法来读取数据。

下面通过示例来具体说明以上步骤。

示例1

服务器端代码如下:

public class TCPServer {
    public static void main(String[] args) throws IOException {
        ServerSocket ss = new ServerSocket(8888);
        Socket s = ss.accept();
        BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
        String str = br.readLine();
        System.out.println("客户端发送的数据为:" + str);
        ss.close();
    }
}

客户端代码如下:

public class TCPClient {
    public static void main(String[] args) throws IOException {
        Socket s = new Socket("localhost", 8888);
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
        bw.write("Hello, world!");
        bw.flush();
        s.close();
    }
}

以上代码可以实现客户端向服务器发送一条消息,并在服务器端将该消息输出。

示例2

服务器端代码如下:

public class TCPServer {
    public static void main(String[] args) throws IOException {
        ServerSocket ss = new ServerSocket(8888);
        while (true) {
            Socket s = ss.accept();
            new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
                        String str = br.readLine();
                        System.out.println("客户端发送的数据为:" + str);
                        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
                        bw.write("谢谢连接,再见!");
                        bw.flush();
                        s.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }).start();
        }
    }
}

客户端代码如下:

public class TCPClient {
    public static void main(String[] args) throws IOException {
        Socket s = new Socket("localhost", 8888);
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
        bw.write("Hello, world!");
        bw.flush();
        BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
        String str = br.readLine();
        System.out.println("服务器响应的数据为:" + str);
        s.close();
    }
}

以上代码可以实现客户端向服务器发送一条消息,服务器将该消息输出,并向客户端发送一条响应。客户端收到响应后将其输出。

结尾

以上就是Java实现TCP协议的客户端与服务器之间的通信攻略。通过以上示例,相信大家已经能够熟练掌握如何利用Java实现TCP协议的客户端与服务器之间的通信了。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java利用TCP协议实现客户端与服务器通信(附通信源码) - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • 下一代Bootstrap的5个特点 超酷炫!

    下一代Bootstrap的5个特点 超酷炫! Bootstrap是一个流行的前端开发框架,它提供了一套用于构建响应式和现代化网站的工具和组件。下一代Bootstrap(Bootstrap 5)带来了一些令人兴奋的新特点,让我们来详细了解一下: 1. 移除jQuery依赖 Bootstrap 5摒弃了对jQuery的依赖,这意味着你可以更轻松地集成Bootst…

    other 2023年9月6日
    00
  • linux中cd命令使用详解

    Linux中cd命令使用详解 cd命令是Linux中最常用的一个命令,它被用来改变当前工作目录。在本篇文章中,我们将提供关于cd命令使用的详细攻略。 基本用法 cd命令可以通过指定绝对路径或者相对路径来改变工作目录。下面是基本的用法: # 切换到根目录 cd / # 切换到当前用户的home目录 cd ~ # 切换到上级目录 cd .. # 切换到下级目录 …

    other 2023年6月27日
    00
  • php递归函数中使用return的注意事项

    当在PHP递归函数中使用return语句时,有几个重要的注意事项要记住,以确保递归函数的正确性和可靠性。 注意事项 当递归函数中使用return语句时,必须指定一个返回值。如果函数没有返回值,则必须使用return语句返回null或一个空值。 在递归函数中,return语句只能用于终止递归并返回最终的结果。如果在递归函数中不小心使用了return语句来终止过…

    other 2023年6月27日
    00
  • 一文教你如何封装安全的go

    下面我将详细讲解“一文教你如何封装安全的go”的完整攻略。 1. 封装安全的Go的必要性 在Go语言的设计中,有一条重要原则是封装,即尽可能隐藏具体实现细节,对外提供简洁易用的API,同时保证安全性。这是因为,在Go语言中,没有公有、私有之分,所有的变量和方法都是公有的。因此,如果不采取一定的封装措施,那么我们的代码就可能会被滥用或者攻击。 封装安全的Go代…

    other 2023年6月25日
    00
  • 详细解析let和const命令

    详细解析 let 和 const 命令 let 命令 let 命令用于声明一个块级作用域的变量。它与传统的 var 命令相比,具有更好的作用域控制和变量声明的语义。 语法 let variableName = initialValue; 示例说明 // 示例 1 let x = 10; if (true) { let x = 20; console.log(…

    other 2023年8月20日
    00
  • BurpSuite超详细安装和基础使用教程(已破解)

    下面是“BurpSuite超详细安装和基础使用教程(已破解)”的完整攻略。 BurpSuite是什么 BurpSuite是一款常用的Web渗透测试工具集,由英国的一家安全公司PortSwigger开发。BurpSuite拥有强大的代理服务器、扫描功能、漏洞利用工具和数据拦截以及过滤等多个模块。它非常适合对Web应用进行安全测试和渗透攻击模拟。 安装Burp …

    other 2023年6月27日
    00
  • ubuntuapt源配置

    Ubuntu APT源配置 Ubuntu作为一个流行的Linux发行版,使用APT软件包管理器自动安装和更新软件,而APT源是提供软件包的服务器。 查看APT源列表 Ubuntu的APT源配置文件位于/etc/apt/sources.list,可以使用以下命令查看当前的APT源列表: cat /etc/apt/sources.list 选择合适的APT源 选…

    其他 2023年3月28日
    00
  • C语言中static与sizeof查缺补漏篇

    C语言中static与sizeof查缺补漏篇 static关键字 在C语言中,static是一个关键字,用于声明静态变量和静态函数。静态变量和静态函数具有以下特点: 静态变量:静态变量在程序的整个生命周期内都存在,不会因为函数的调用而被销毁。它们在内存中的位置固定,只会被初始化一次。静态变量默认情况下具有文件作用域,即只能在声明它的文件中访问。 示例1:静态…

    other 2023年7月29日
    00
合作推广
合作推广
分享本页
返回顶部