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

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日

相关文章

  • windowsxp或win7系统下使用ipconfig查看ip详细地址及相关信息

    Windows XP系统下使用ipconfig查看IP详细地址及相关信息攻略 打开命令提示符窗口:点击“开始”菜单,选择“运行”,输入“cmd”并按下回车键,即可打开命令提示符窗口。 输入ipconfig命令:在命令提示符窗口中,输入“ipconfig”命令,并按下回车键。系统将显示当前计算机的网络配置信息。 查看IP详细地址及相关信息:在命令提示符窗口中,…

    other 2023年7月30日
    00
  • php类中private属性继承问题分析

    PHP中的类中可以定义属性,而属性可以有三种访问权限,分别是public、protected和private。其中private属性的访问权限最小,表示只能在所属的类中被访问,子类无法直接访问。但是,不同的继承关系下,private属性的继承方式也存在差异。 在面向对象的编程中,继承是一个非常重要的概念,而PHP也提供了完整的继承机制,可以通过继承来获得父类…

    other 2023年6月27日
    00
  • Java创建型设计模式之抽象工厂模式(Abstract Factory)

    Java创建型设计模式之抽象工厂模式(Abstract Factory) 抽象工厂模式是一种创建型设计模式,它提供了一种创建一系列相关或相互依赖对象的接口,而无需指定具体实现类。抽象工厂模式通过将对象的创建委托给工厂类来实现,从而实现了客户端与具体实现类的解耦。 结构 抽象工厂模式由以下几个关键组件组成: 抽象工厂(Abstract Factory):定义了…

    other 2023年10月15日
    00
  • python基础之读取xml

    以下是关于“Python基础之读取XML”的完整攻略,包括XML的基本知识、Python读取XML的方法和两个示例等。 XML的基本知识 XML(可扩展标记语言)是一种用于存储和输数据的标记语言。它使用自定义标记来描述数据的结构和内容。XML被广泛用于Web服务、数据交换和配置文件等领域。 XML文档由标记和数据组成。标记用于描述数据的结构,数据则是标记所描…

    other 2023年5月7日
    00
  • ASP中让Replace替换不区分大小写的方法

    在ASP中,要实现Replace替换不区分大小写的方法,可以使用正则表达式来实现。下面是一个完整的攻略,包含两个示例说明: 使用正则表达式的Replace方法: “`asp <%@ Language=VBScript %> <% Option Explicit %> <% Function ReplaceIgnoreCase(…

    other 2023年8月17日
    00
  • SpringBoot集成Druid配置(yaml版本配置文件)详解

    环境准备 在开始配置SpringBoot集成Druid之前,需要确保已经满足以下条件: JDK 1.8 或更高版本 Maven 3.x 或更高版本 SpringBoot 2.x 版本或更高版本 引入Druid依赖 为了集成Druid,需要在pom.xml文件中添加以下依赖: <dependency> <groupId>com.alib…

    other 2023年6月25日
    00
  • win10下安装Go和Goland的详细教程

    下面就为您详细讲解win10下安装Go和Goland的详细教程。 安装Go语言环境 1. 下载安装包 下载Go安装包,推荐前往官网下载。目前最新版是1.16版本,下载地址为:https://golang.google.cn/dl/ 选择适合自己系统的操作系统版本,注意选择对应的CPU架构。 2. 安装Go 安装Go非常简单,直接运行安装包即可,根据提示一步步…

    other 2023年6月27日
    00
  • 惠普M436打印机怎么重启? 打印机重启的教程

    惠普M436打印机重启教程 1.为什么要重启惠普M436打印机? 在使用惠普M436打印机时,有时会遇到打印机出现各种问题的情况,比如打印机卡纸、打印质量不佳等。此时,我们可以首先尝试重启打印机,这通常可以解决一些简单的技术问题。 2.惠普M436打印机的重启方法 以下是重启惠普M436打印机的步骤: 步骤1:按下电源按钮 首先,让我们找到位于惠普M436打…

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