Socket编程

本文深入解析Socket编程原理,包括客户端与服务器如何通过Socket建立连接,数据传输机制,以及Socket类和ServerSocket类的使用方法。适合初学者和进阶者学习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

现在是网络信息交流的时代,那么我们每天打开的浏览器是如何与web服务器进行通信的?当使用QQ聊天时,QQ进程怎么与服务器或者好友的QQ进程通信的??这些都依赖于Socket编程。本文主要介绍Socket编程以及相关类的常用方法。

Socket编程

  • 什么是Socket?
    Socket是网络上运行的程序之间双向通信链路的终结点,是TCP和UDP的基础。网络上具有唯一标识的IP地址和端口组合在一起才能构成唯一能识别的标识符套接字。

  • Socket原理机制?
    通信的两端都有Socket
    网络通信其实就是Socket之间的通信
    数据在两个Socket之间通过IO传输

  • Socket编程的步骤
    套接字使用TCP提供了两台计算机之间的通信机制。客户端程序创建一个套接字,并尝试连接服务器的套接字。当建立连接时,服务器会创建一个Socket对象,从而客户端和服务器可以通过对Socket对象的写入和读取来进行通信。
    java.net.Socket类就代表一个套接字,并且java.net.ServerSocket类为服务器程序提供一种来监听客户端,并与他们建立连接的机制。
    以下是两台计算机之间使用套接字建立TCP连接的步骤:
    1.服务器实例化一个ServerSocket对象,该对象需要描述服务器端的端口号,以供客户端的连接。
    2.客户端创建一个Socket对象,用于连接指定服务器名称以及端口号的服务器端。
    3.服务器端调用ServerSocket类的accept()方法,该方法用于监听连接指定端口的服务器端的客户端。
    4.如果客户端与服务器端连接建立成功,则服务器端和客户端均会返回一个Socket对象,此时二者即可进行通信。
    5.服务器端和客户端之间是通过I/O流进行通信的,每个Socket对象都有输入输出流,客户端的输出流连接到服务器端的输入流,客户端的输入流连接到服务器端的输出流,从而二者之间进行通信。

ServerSocket类

服务器应用程序通过使用java,net,ServerSocket类以获取一个端口,并且侦听客户端请求。

  • ServerSocket类的构造方法
    1.创建绑定到指定的本地端口号的服务器套接字
public ServerSocket(int port) throws IOException

2.利用指定的backlog创建服务器端套接字并将其绑定到指定的本地端口号

public ServerSocket(int port,int backlog) throws IOException

backlog:服务器ServerSocket对象处理客户端Socket连接需要一定时间,ServerSocket有一个队列存放还没有来得及处理的Socket对象,这个队列的容量就是backlog的含义。如果队列已经被客户端Socket对象占满,此时还有新的客户端连接请求时,ServerSocket对象会拒绝新的连接请求,即backlog提供了客户端连接请求的容量限制功能,避免太多的客户端Socket占用服务器资源。
3.创建绑定到指定的端口号、侦听backlog和本地IP地址的服务器套接字

public ServerSocket (int port,int backlog,InetAddress bindAddr)

4.创建非绑定的服务器套接字

public ServerSocket() throws IOException

创建非绑定的服务器套接字时,如果ServerSocket构造方法没有抛出异常,则表示该服务器套接字已成功绑定到某个端口号并且侦听客户端请求。

  • ServerSocket类的实例方法
    1.返回此套接字绑定的侦听
public int getLocalPort()

2.侦听并接受此套接字的连接

public Socket accept() throws IOException

3.将ServerSocket绑定到特定的IP地址和端口号

public void bind(SocketAddress endpoint) throws IOException

Socket类

java.net.Socket类代表客户端和服务器端都用来相互通信的套接字。客户端通过实例化连接指定的服务器端获取一个Socket对象,服务器端通过ServerSocket类的accept()方法侦听客户端的连接返回一个Socket对象。

  • Socket类的构造方法
    1.创建一个流套接字并将其连接到指定主机上的指定端口号
public Socket(String host,int port) throws UnknowHostException

2.创建一个流套接字并将连接到指定IP地址的指定端口号

public Socket(InetAddress address,int port) throws IOException

3.创建一个套接字并将其连接到指定远程主机上的指定远程端口

public Socket(String host,int port,InetAddress localAddress,int localPort) throws IOException

4.创建一个套接字并将其连接到指定远程地址上的指定远程端口

public Socket(Address address,int port,InetAddress localAddress,int localPort) throws IOException

5.通过系统默认类型的SocketImpl创建未连接套接字

public Socket()

当Socket类的构造方法返回时,并不是简单的实例化一个Socket对象,而是尝试连接到指定的服务器的端口。

  • Socket类的实例方法
    1.将此套接字连接到服务器并指定一个超时值
public void connect(SocketAddress endpoint,int timeout) throws IOException

2.返回套接字连接的地址

public InetAddress getInetAddress()

3.返回此套接字连接到的远程端口

public int getPort()

4.返回此套接字绑定的本地端口

public int getLocalPort()

5.返回此套接字连接的地址,若未连接则返回null

public SocketAddress getRemoteSocketAddress()

6.获取此套接字的输入流(客户端读取服务器端的数据)

public InputStream getInputStream() throws IOException

7.获取此套接字的输出流(客户端写入服务器端的数据,在客户端使用)

public OutputStream getOutputStream() throws IOException

8.关闭此套接字(关闭Socket客户端,服务器端一般不关闭)

public void close() throws IOException

InetAddress类

这个类表示互联网协议(IP)地址

  • InetAddress的常用方法
    1.给定原始IP地址的情况下,返回InetAddress对象
public static InetAddress getByAddress(byte[] addr)

2.根据提供的主机名和IP地址返回InetAddress对象

public static InetAddress getByAddress(String host,byte[] addr)

3.在给定主机名的情况下确定主机的IP地址

public static InetAddress getByName(String host)

4.以字符串的形式返回IP地址

public String getHostAddress()

5.获取此IP地址的主机名

public String getHostName()

6.返回本机主机

public static InetAddress getLocalHost()

7.将IP地址转换为字符串

String toString()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值