javaweb——socket

定义

Socket(套接字)是计算机网络编程中的一种抽象,用于在网络上进行通信。它允许计算机之间通过网络进行数据传输。在Java中,Socket类提供了对TCP/IP协议的支持,通过它可以创建客户端和服务端程序,实现网络通信。

分类

Socket可以分为两种类型:客户端Socket和服务端Socket。

  1. 客户端Socket:客户端Socket用于与服务端建立连接并发送请求。在Java中,可以使用Socket类来创建客户端Socket对象,并通过该对象与指定的服务端进行通信。

  2. 服务端Socket:服务端Socket用于监听客户端的连接请求,并在客户端连接成功后建立与客户端的通信。在Java中,可以使用ServerSocket类来创建服务端Socket对象,并通过该对象接受客户端的连接。

用途

通过使用Socket编程,可以实现各种网络应用,如Web服务器、聊天程序、文件传输等。

通过Socket技术(它是计算机之间进行通信的一种约定或一种方式),我们就可以实现两台计算机之间的通信,Socket也被翻译为套接字,是操作系统底层提供的一项通信技术,它支持TCP和UDP。而Java就对socket底层支持进的封装,我们可以通过Java来实现Socket通信。

要实现Socket通信,我们必须创建一个数据发送者和一个数据接收者,也就是客户端和服务端,我们服务端,来等待客户端的连接,而客户端只需要随时启动去连接服务端即可!

java代码

客户端代码
java 复制代码
import java.io.IOException;
import java.net.Socket;

public class Client {
    public static void main(String[] args) {
        try (Socket socket = new Socket("localhost", 8080)) {
            System.out.println("已连接到服务端!");
        } catch (IOException e) {
            System.out.println("服务端连接失败!");
            e.printStackTrace();
        }
    }
}
服务器代码
java 复制代码
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
    public static void main(String[] args) {
        try (ServerSocket server = new ServerSocket(8080)) {
            System.out.println("正在等待客户端连接...");
            Socket socket = server.accept(); // 当没有客户端连接时,线程会阻塞,直到有客户端连接为止
            System.out.println("客户端已连接,IP地址为:" + socket.getInetAddress().getHostAddress());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
运行截图

先运行服务器端代码 在运行客服端代码 ,不然会报错


总结

这份代码实现了一个简单的客户端-服务端通信模型。服务端通过创建一个ServerSocket对象,并指定端口号8080,然后调用accept()方法等待客户端的连接。客户端通过创建一个Socket对象,指定要连接的服务端地址和端口号,然后与服务端建立连接。

在代码中使用了try-with-resources语句,确保了资源的正确关闭,同时通过捕获和处理IOException来处理可能的异常情况。

服务端在接受到客户端连接后,输出客户端的IP地址;客户端在成功连接到服务端时输出连接成功的消息。如果连接失败,则在客户端打印出连接失败的消息,并输出异常信息。

这样的设计可以作为一个简单的网络通信的基础框架,可以在此基础上进行更复杂的通信协议和功能的扩展。

以上是你的服务端和客户端代码的完整版本。服务端监听端口8080,等待客户端连接;客户端连接到本地主机的8080端口。

相关推荐
Tim风声(网络工程师)2 小时前
排查内网互联网访问流程
运维·服务器·网络
坚持就完事了3 小时前
Linux中如何添加环境变量
linux·运维·服务器
AC赳赳老秦3 小时前
政企内网落地:OpenClaw 离线环境深度适配方案,无外网场景下本地化模型对接与全功能使用
java·大数据·运维·python·自动化·deepseek·openclaw
l1t4 小时前
mingw和Linux中的gcc和llvm编译器编译的pocketpy执行同一个python脚本的不同效果
linux·运维·python
ITyunwei09874 小时前
团队管理与人才发展:如何打造一支“召之即来,来之能战”的铁军?
大数据·运维·人工智能
白緢4 小时前
一、Linux 基础入门
linux·运维·服务器
Deepoch4 小时前
面向工业现场自主运维:Deepoc 具身模型开发板的端侧智能升级路径
运维·人工智能·科技·巡检机器人·deepoc
一袋米扛几楼984 小时前
【网络】网络规划与底层通信:自顶向下方法论 (Top-Down Methodology) 全解析
网络·工程
菜菜艾5 小时前
自动化环境补丁更新系统
linux·运维·bash·运维开发
江上清风山间明月5 小时前
Nginx基于域名区分的多网站部署
运维·nginx·部署·php·多个网站