java实现基于TCP协议网络socket编程(C/S通信)

Java实现基于TCP协议网络Socket编程(C/S通信)攻略

什么是网络Socket编程?

网络socket编程就是通过Socket通信,在网络上完成通讯的过程。Socket通信是C/S架构中最常见和最为常用的一种通信方式。Socket通信要求通信的双方都存在一个程序,其中一个程序必须扮演客户端的角色,而另一个程序则扮演服务器的角色,客户端请求连接,服务器端等待连接请求并接受连接。Socket通信提供了一种底层的通信接口,使得程序员可以通过这种接口实现各种数据交互的模式。

何时需要网络Socket编程?

当需要在两个运行在不同计算机上的程序之间进行通信时,我们就可以使用网络Socket编程实现它。比如说,在互联网上,一个浏览器和一个Web服务器之间的通信,就是基于网络Socket编程实现的。

如何在Java中实现基于TCP协议网络Socket编程?

TCP协议提供可靠的、面向连接的数据传输服务,因此,要实现TCP连接,需要分为客户端和服务器端两种角色。

客户端实现

客户端首先要建立与服务器之间的连接,连接成功后,就可以进行数据的发送和接收了。以下是一个简单的Java客户端程序示例:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;

public class MyClient {
    public static void main(String[] args) {
        try {
            //创建一个Socket对象,指定连接的服务器和端口
            Socket socket = new Socket("127.0.0.1", 8888);
            //获取输出流,向服务器发送数据
            PrintWriter printWriter = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));
            printWriter.println("Hello,Server!");
            printWriter.flush();
            //获取输入流,从服务器接收数据
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            String message = bufferedReader.readLine();
            System.out.println("Server: " + message);
            //关闭所有流
            printWriter.close();
            bufferedReader.close();
            socket.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

服务器端实现

对于服务器端,它的主要任务是监听客户端的连接请求,并对客户端发起的请求进行处理。服务器端程序如下:

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

public class MyServer {
    public static void main(String[] args) {
        try {
            //创建一个ServerSocket对象,指定服务器的监听端口
            ServerSocket serverSocket = new ServerSocket(8888);
            System.out.println("Server started, listening on port " + 8888);
            while (true) {
                //服务器等待客户端连接
                Socket socket = serverSocket.accept();
                System.out.println("Client " + socket.getInetAddress() + " connected!");
                //获取输入流,从客户端接收数据
                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                String message = bufferedReader.readLine();
                System.out.println("Client: " + message);
                //获取输出流,向客户端发送数据
                PrintWriter printWriter = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));
                printWriter.println("Hello,Client!");
                printWriter.flush();
                //关闭所有流
                bufferedReader.close();
                printWriter.close();
                socket.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

示例说明

以上两个程序分别是TCP连接的客户端和服务器端实现,它们分别运行在不同计算机上,当客户端运行时,它会向指定的服务器建立连接,并向服务器发送一条消息;服务器端则监听指定端口的连接请求,并对接收到的消息进行处理,并向客户端发送一条消息。

在这个过程中,通过使用Socket、ServerSocket、 BufferedReader、PrintWriter等Java提供的类,我们轻易地实现了TCP连接,完成了两台计算机之间的通讯。从这个例子中我们可以看出,Java的网络编程可以帮助我们轻松地实现各种通讯方式。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java实现基于TCP协议网络socket编程(C/S通信) - Python技术站

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

相关文章

  • C语言菜鸟基础教程之加法

    C语言菜鸟基础教程之加法 前言 加法作为数学中最基本的运算之一,在C语言中也有着非常重要的地位。本篇教程将为大家介绍C语言中的加法运算,帮助大家从零开始了解C语言中的加法运算。 加法的定义 在C语言中,加法运算使用+符号进行表示。它可以对两个数值型数据进行加法运算,并返回一个新的结果。 加法的基本用法 在C语言中,使用加法运算非常简单。只需要按照以下步骤即可…

    other 2023年6月27日
    00
  • Python logging日志模块 配置文件方式

    下面是关于Python logging日志模块配置文件方式的完整攻略: 1. logging模块简介 Python中的logging模块提供了一个灵活而高度可定制化的日志系统,可以记录代码运行时的详细信息,方便开发人员进行调试。logging模块支持不同的日志级别,可以随时更改日志级别,还可以同时向多个输出目标记录日志信息。 logging模块提供了两种使用…

    other 2023年6月25日
    00
  • Java中的权限修饰符(protected)示例详解

    以下是关于“Java中的权限修饰符(protected)示例详解”的完整攻略: 什么是权限修饰符? 在 Java 中,权限修饰符用于限制类、属性、方法和构造函数的访问范围。Java 有四种权限修饰符:public、protected、private 和默认的。 其中,protected 权限修饰符是指声明的属性或方法可以在同一包中的任何其他类以及不同包中的子…

    other 2023年6月26日
    00
  • python执行命令行

    以下是Python执行命令行的攻略,包含两个示例: 方法一:使用os模块 Python的os模块提供了执行命令行的功能。以下是一个使用os模块的示例: import os # 执行命令行 os.system("ls -l") 在这个示例中,我们使用os.system()函数执行了一个命令行命令“ls -l”,该命令会列出当前目录下的文件文…

    other 2023年5月6日
    00
  • 淘宝直播严选精选佣金结算优先级规则

    淘宝直播严选精选佣金结算优先级规则攻略 1. 背景介绍 在淘宝直播中,严选精选是一种特殊类型的佣金结算方式。严选精选的商品通常由淘宝直播的作者进行推荐,并且具有更高的佣金比例。然而,在进行严选精选佣金结算时,存在一些优先级规则,本攻略将详细讲解这些规则。 2. 严选精选佣金结算优先级规则 2.1. 直播间内商品推荐顺序优先级 在同一个直播间内,存在多个严选精…

    other 2023年6月28日
    00
  • C++性能剖析教程之switch语句

    C++性能剖析教程之switch语句 在C++中,switch语句是一种非常常见的控制语句,它通常用于分支选择性的流程控制。但是,由于switch语句的实现方式不同于其他一些流程控制语句,其性能可能会受到影响。因此,在需要优化程序性能时,我们需要了解如何使用和优化switch语句。 switch语句的基本用法 switch语句通常用于在多个选项中进行选择。其…

    other 2023年6月26日
    00
  • Springboot项目Aop与拦截器与过滤器横向对比

    当然!下面是关于\”Spring Boot项目AOP与拦截器与过滤器横向对比\”的完整攻略,包含两个示例说明。 … … … … 示例1:AOP的使用 @Aspect @Component public class LoggingAspect { @Before(\"execution(* com.example.demo.servi…

    other 2023年8月20日
    00
  • js实现锚点定位

    使用JavaScript实现锚点定位 在网页制作过程中,锚点定位是一个非常重要且常用的功能。通过锚点定位,用户只需要单击页面上的链接,就可以直接跳转到页面的特定位置,提升了用户的交互体验。本文将介绍如何使用JavaScript实现锚点定位。 HTML页面的锚点设置 在HTML中,通过在页面中添加锚点来实现锚点定位。锚点即通过id属性指定的HTML元素。例如:…

    其他 2023年3月28日
    00
合作推广
合作推广
分享本页
返回顶部