java网络编程之socket网络编程示例(服务器端/客户端)

yizhihongxing

Java网络编程是一门重要的计算机网络技术,其能让程序员通过网络实现数据传输,协作会话,远程调用等等。而Socket编程是Java网络编程的基础。本文将详细讲解Java Socket网络编程的核心概念和使用方法,并提供两个范例以供参考。

简介

Socket是两个不同设备之间相互通信的一种技术。它是一种网络间进程通信机制。Socket在JAVA编程中被封装成为套接字类,存在于java.net包中。它提供了对TCP和UDP协议进行通信的简单方式。

核心概念

在Socket编程中,需要了解的核心概念包括TCP/IP协议、Socket、端口号和IP地址。

TCP/IP协议

TCP是Transmission Control Protocol(传输控制协议)的简称,表示一种可靠的、面向连接的、基于字节流的传输层网络协议,主要用于Internet中数据的传输。TCP协议提供了虚拟的点对点连接,保证了数据的可靠性。与此相对的,还有一个使用较普遍的是UDP(User Datagram Protocol,用户数据报协议),这是一种无连接的、不保证可靠性的传输层协议。

Socket

Socket套接字类代表通信连接的一端。一个Socket对象包含了一个IP地址和一个端口号。当使用套接字时,需要指定目标计算机的IP地址和端口号。这样才能进行双方的通信。

端口号

在Socket通信过程中,端口号是必须的,它可以让网络上的机器识别出不同的应用程序,不同的端口号代表着不同的应用程序。

IP地址

IP地址指的是Internet Protocol Address,它是互联网协议的地址。没有IP地址,计算机无法互相通信,也就无法使用Socket进行通信。

示例一:Socket服务器端

下面是一个使用Java Socket实现的服务器端范例。在这个服务器端程序中,首先创建一个ServerSocket对象,然后把绑定到一个指定的端口号。通过调用accept()方法等待客户的请求。当有客户端请求时,accept()方法将会返回客户端Socket对象。这样,服务器端Socket就可以与客户端建立连接了。

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

public class Server {
    public static void main(String args[]) throws Exception {
        ServerSocket server = new ServerSocket(8888);
        System.out.println("服务器启动成功!");
        while (true) {
            Socket socket = server.accept();
            System.out.println("客户端上线!");
            BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
            String line;
            while ((line = in.readLine()) != null) {
                System.out.println("客户端发送了:" + line);
                out.println("服务器收到了:" + line);
            }
            socket.close();
            System.out.println("客户端下线!");
        }
    }

}

示例二:Socket客户端

下面是一个使用Java Socket实现的客户端范例。在这个客户端程序中,首先创建一个Socket对象,然后通过这个对象就可以连接到服务器端的Socket。连接成功后,在程序中通过BufferedReader读取用户在命令行输入的内容,并通过PrintWriter发送给服务器端,等待服务器端的响应信息。

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

public class Client {
    public static void main(String args[]) throws Exception {
        Socket socket = new Socket("localhost", 8888);
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
        String line;
        while ((line = reader.readLine()) != null) {
            out.println(line);
            System.out.println(in.readLine());
        }
        socket.close();
    }
}

总结

本文介绍了Java Socket网络编程的核心概念和使用方法,并向读者们呈现了两个范例。对于初学者来说,Socket编程可能不太容易理解和掌握,但只要多动手实践,多看相关技术书籍和博客文章,就能逐步掌握这些重要的网络编程技术。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java网络编程之socket网络编程示例(服务器端/客户端) - Python技术站

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

相关文章

  • ubuntu简单安装kafka

    Ubuntu简单安装Kafka攻略 Kafka是一种流行的分布式消息传递系统,用于处理大量的实时数据。在Ubuntu上安装Kafka非常简单,本文将提供一关于如何安装Kafka的详细说明,包括如何下载和安装Kafka、如何启动和停止Kafka等。 步骤1:下载和解压Kafka 要下载和安装Kafka,需要按照以下步骤操作: 下载Kafka: bash htt…

    other 2023年5月9日
    00
  • Android实现应用内置语言切换功能

    Android实现应用内置语言切换功能攻略 在Android应用中实现应用内置语言切换功能可以让用户根据自己的偏好选择使用的语言。下面是一个详细的攻略,包含了实现该功能的步骤和两个示例说明。 步骤一:准备语言资源文件 首先,需要为每种语言准备相应的资源文件。在res目录下创建一个新的文件夹,命名为values,然后为每种语言创建一个对应的资源文件,命名规则为…

    other 2023年8月23日
    00
  • linux find命令将查找到的文件批量删除方法

    当我们要清理linux系统上的一些不要的文件时,往往需要查找到这些文件并删掉。这时候,find命令就可以发挥作用了。 1. 查找到文件并删除 使用find命令可以查找指定路径下符合特定条件的文件,结合-exec选项可以把操作作用到每一个找到的文件上。比如,我们要查找路径”/home/user”下的名字以”.bak”结尾的文件并删除,命令如下: find /h…

    other 2023年6月26日
    00
  • eclipse安装activiti工作流插件

    Eclipse安装Activiti工作流插件的完整攻略 Activiti工作流插件是一款基于Eclipse平台的插件,可以用于开发和调试Activiti工作流应用程序。Activiti工作流插件提供了丰富的工作流设计器和调试工具,可以方便地创建和管理工作流定义、任务和流程实例等。本文将介绍Eclipse安装Activiti工作流插件的完整攻略,包括使用Ecl…

    other 2023年5月9日
    00
  • Win10怎么批量修改文件后缀名?win10修改后缀名的另种方法

    Win10怎么批量修改文件后缀名? 在Win10操作系统中,你可以使用多种方法来批量修改文件的后缀名。下面将详细介绍两种常用的方法。 方法一:使用命令提示符(CMD) 打开文件所在的文件夹,确保你具有修改文件的权限。 在文件夹的空白处按住Shift键并右击,选择“在此处打开命令窗口”或“在此处打开PowerShell窗口”。 在弹出的命令提示符窗口中,输入以…

    other 2023年8月5日
    00
  • Java日志软件Log4j的基本使用教程

    Java日志软件Log4j的基本使用教程 Log4j是一个流行的Java日志记录工具,它可以帮助开发人员在应用程序中实现灵活的日志记录功能。本教程将详细介绍Log4j的基本使用方法,并提供两个示例说明。 步骤1:添加Log4j依赖 首先,您需要在您的Java项目中添加Log4j的依赖。您可以通过Maven或Gradle等构建工具来完成此操作。以下是使用Mav…

    other 2023年9月6日
    00
  • iOS 9正式版下载地址(iPhone/iPad/iTouch) 附升级教程!

    iOS 9正式版下载地址(iPhone/iPad/iTouch) 附升级教程! iOS 9是苹果公司最新发布的操作系统版本,带来了许多新功能和改进。如果你想下载并升级到iOS 9正式版,下面是详细的攻略。 步骤一:备份数据 在升级之前,强烈建议你备份设备上的所有数据。这样,即使在升级过程中出现问题,你也可以恢复到之前的状态。你可以通过iTunes或iClou…

    other 2023年8月4日
    00
  • C++ 容器适配器priority_queue的使用及实现代码

    下面我将详细讲解“C++ 容器适配器priority_queue的使用及实现代码”的完整攻略,包括定义与使用、成员函数及示例说明。 定义与使用 priority_queue 是一个容器适配器,它提供了队列的功能,但是元素被自动排序(默认为按元素值从大到小)。 在使用 priority_queue 之前,需要引用头文件 <queue> ,并使用命名…

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