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端口。

相关推荐
岸边的风1 小时前
无需公网IP的文件交互:FileCodeBox容器化部署技术解析
网络·网络协议·tcp/ip
jingyu飞鸟2 小时前
linux系统源代码安装apache、编译隐藏版本号
linux·运维·apache
世事如云有卷舒2 小时前
Ubunt20.04搭建GitLab服务器,并借助cpolar实现公网访问
linux·服务器·gitlab
Zonda要好好学习2 小时前
Python入门Day4
java·网络·python
Little-Hu2 小时前
QML TextEdit组件
java·服务器·数据库
riverz12272 小时前
TCP backlog工作机制
服务器·网络·tcp/ip
2401_858286113 小时前
OS15.【Linux】gdb调试器的简单使用
linux·运维·服务器·开发语言·gdb
yqcoder3 小时前
1. http 有哪些版本,你是用的哪个版本,怎么查看
网络·网络协议·http
c30%004 小时前
内网渗透——红日靶场五
运维·服务器
zjw_rp5 小时前
centos停止维护后更换yum源
linux·运维·centos