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日

相关文章

  • RHE5服务器管理之搭建FTP服务器步骤分享[图]

    下面是详细的“RHE5服务器管理之搭建FTP服务器步骤分享[图]”攻略。 简介 本篇攻略旨在分享如何在RHE5上搭建FTP服务器。FTP(File Transfer Protocol)即文件传输协议,是一种用于将文件传输到Internet网络上的协议。 准备工作 在开始之前,我们首先需要准备以下工作: 一台已安装RHE5系统的Linux服务器; 确保系统中已…

    other 2023年6月27日
    00
  • WPF实现基础控件之托盘的示例代码

    下面是WPF实现托盘的完整攻略: 一、前期准备 在开始编写代码之前,首先需要在项目中添加两个NuGet包: Hardcodet.NotifyIcon.Wpf(用于实现托盘功能) System.Windows.Interactivity.Wpf(用于方便地实现交互行为,如点击托盘图标时打开窗口) 这两个包的添加方式可以通过NuGet包管理器或在项目文件中手动添…

    other 2023年6月27日
    00
  • win10和win7下java开发环境配置教程

    Win10和Win7下Java开发环境配置教程 本篇攻略主要介绍在Win10和Win7两个操作系统下,如何配置Java开发环境。本文所使用的Java版本是Java SE 8。 步骤1:下载Java SE 8 首先,我们需要下载最新版本的Java SE 8 JDK,下载地址为:https://www.oracle.com/technetwork/java/ja…

    other 2023年6月27日
    00
  • C语言深入分析整形数据存储

    C语言深入分析整型数据存储 1. 整型数据存储方式 在C语言中,整形数据可以使用不同的存储方式:有符号数表示正数和负数,无符号数只表示非负数。从存储方式上来讲,整型数据的存储可以分为大端和小端两种方式。 1.1 有符号数的存储 有符号数使用补码表示。最高位表示符号位,0表示正数,1表示负数,剩下的位表示数值。以8位为例,有符号数-1的补码为11111111。…

    other 2023年6月27日
    00
  • 在Linux下用软件实现RAID功能

    在Linux下使用软件实现RAID可以提高磁盘性能和数据可靠性。以下是完整的攻略: 确定RAID等级 首先需要确定您希望使用的RAID等级。RAID 0、RAID 1、RAID 5、RAID 6 等都是常见的RAID等级,各有不同的优缺点。在选择RAID等级时需要权衡不同RAID等级的优点和缺点,根据实际需求做出决定。 安装需要的工具 安装mdadm工具,用…

    other 2023年6月27日
    00
  • win10如何删除右键多余选项 win10右键选项自定义设置方法

    Win10如何删除右键多余选项 在Win10系统中,右键菜单有时会被一些多余的选项占据,这样会降低系统用户的使用体验。因此,有必要学会如何删除多余的右键选项。 方法一:使用注册表编辑器删除 步骤: 点击win键+R组合键,打开运行窗口,输入”regedit”并回车,打开注册表编辑器。 在左边的导航栏中找到以下路径”HKEY_CLASSES_ROOT*\she…

    other 2023年6月27日
    00
  • vue递归实现三级菜单

    前置知识 在说如何实现三级菜单之前,我们需要先对一些基本概念进行了解,这些概念是实现三级菜单的基础,包括: 父子组件通讯 递归组件 父子组件通讯 在vue中,组件之间的通讯主要有两种方式:props和$emit事件传递。props是父组件向子组件传递数据,而$emit事件传递则是子组件向父组件传递数据。 示例:父组件向子组件传递数据 在父组件中,我们通过在子…

    other 2023年6月27日
    00
  • Android动画 实现开关按钮动画(属性动画之平移动画)实例代码

    当在Android应用程序中使用属性动画实现开关按钮的平移动画时,可以按照以下完整攻略进行操作: 首先,在res/anim目录下创建一个XML文件,用于定义平移动画效果。例如,我们创建translate_anim.xml。 在translate_anim.xml文件中,定义平移动画的属性和数值。以下是一个示例,将按钮从左侧平移到右侧: <transla…

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