nearbyserversocket驱动_关于Socket和ServerSocket类详解

本文介绍了Java中的Socket和ServerSocket类,用于实现网络连接。Socket类代表客户端套接字,通过指定主机名和端口号进行连接。ServerSocket类则用于服务器端,监听特定端口的连接请求。通过ServerSocket的accept方法,服务器可以获取到新的Socket实例以与客户端通信。示例代码展示了如何创建Socket和ServerSocket,以及发送HTTP请求和接收响应。

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

Socket类

套接字是网络连接的一个端点。套接字使得一个应用可以从网络中读取和写入数据。放在两个不同计算机上的两个应用可以通过连接发送和接受字节流。为了从你的应用发送一条信息到另一个应用,你需要知道另一个应用的IP地址和套接字端口。在Java里边,套接字指的是java.net.Socket类。    要创建一个套接字,你可以使用Socket类众多构造方法中的一个。其中一个接收主机名称和端口号:

public Socket (java.lang.String host, int port)

在这里主机是指远程机器名称或者IP地址,端口是指远程应用的端口号。例如,要连接yahoo.com的80端口,你需要构造以下的Socket对象:

new Socket ("yahoo.com", 80);

一旦你成功创建了一个Socket类的实例,你可以使用它来发送和接受字节流。要发送字节流,你首先必须调用Socket类的getOutputStream方法来获取一个java.io.OutputStream对象。要发送文本到一个远程应用,你经常要从返回的OutputStream对象中构造一个java.io.PrintWriter对象。要从连接的另一端接受字节流,你可以调用Socket类的getInputStream方法用来返回一个java.io.InputStream对象。    以下的代码片段创建了一个套接字,可以和本地HTTP服务器(127.0.0.1是指本地主机)进行通讯,发送一个HTTP请求,并从服务器接受响应。它创建了一个StringBuffer对象来保存响应并在控制台上打印出来。

Socket socket = new Socket("127.0.0.1", "8080");OutputStream os = socket.getOutputStream();boolean autoflush = true;PrintWriter out = new PrintWriter(socket.getOutputStream(), autoflush);BufferedReader in = new BufferedReader(new InputStreamReader( socket.getInputstream() ));// send an HTTP request to the web serverout.println("GET /index.jsp HTTP/1.1");out.println("Host: localhost:8080");out.println("Connection: Close");out.println();// read the responseboolean loop = true;StringBuffer sb = new StringBuffer(8096);while (loop) {    if ( in.ready() ) {        int i=0;        while (i!=-1) {            i = in.read();            sb.append((char) i);        }    loop = false;    }    Thread.currentThread().sleep(50);}// display the response to the out consoleSystem.out.println(sb.toString());socket.close();

请注意,为了从web服务器获取适当的响应,你需要发送一个遵守HTTP协议的HTTP请求。假如你已经阅读了前面一节超文本传输协议(HTTP),你应该能够理解上面代码提到的HTTP请求。    注意:你可以本书附带的com.brainysoftware.pyrmont.util.HttpSniffer类来发送一个HTTP请求并显示响应。要使用这个Java程序,你必须连接到互联网上。虽然它有可能并不会起作用,假如你有设置防火墙的话。

ServerSocket类

Socket类代表一个客户端套接字,即任何时候你想连接到一个远程服务器应用的时候你构造的套接字,现在,假如你想实施一个服务器应用,例如一个HTTP服务器或者FTP服务器,你需要一种不同的做法。这是因为你的服务器必须随时待命,因为它不知道一个客户端应用什么时候会尝试去连接它。为了让你的应用能随时待命,你需要使用java.net.ServerSocket类。这是服务器套接字的实现。    ServerSocket和Socket不同,服务器套接字的角色是等待来自客户端的连接请求。一旦服务器套接字获得一个连接请求,它创建一个Socket实例来与客户端进行通信。    要创建一个服务器套接字,你需要使用ServerSocket类提供的四个构造方法中的一个。你需要指定IP地址和服务器套接字将要进行监听的端口号。通常,IP地址将会是127.0.0.1,也就是说,服务器套接字将会监听本地机器。服务器套接字正在监听的IP地址被称为是绑定地址。服务器套接字的另一个重要的属性是backlog,这是服务器套接字开始拒绝传入的请求之前,传入的连接请求的最大队列长度。    其中一个ServerSocket类的构造方法如下所示:

public ServerSocket(int port, int backLog, InetAddress bindingAddress);

对于这个构造方法,绑定地址必须是java.net.InetAddress的一个实例。一种构造InetAddress对象的简单的方法是调用它的静态方法getByName,传入一个包含主机名称的字符串,就像下面的代码一样。

InetAddress.getByName("127.0.0.1");

下面一行代码构造了一个监听的本地机器8080端口的ServerSocket,它的backlog为1。

new ServerSocket(8080, 1, InetAddress.getByName("127.0.0.1"));

一旦你有一个ServerSocket实例,你可以让它在绑定地址和服务器套接字正在监听的端口上等待传入的连接请求。你可以通过调用ServerSocket类的accept方法做到这点。这个方法只会在有连接请求时才会返回,并且返回值是一个Socket类的实例。Socket对象接下去可以发送字节流并从客户端应用中接受字节流,就像前一节"Socket类"解释的那样。实际上,这章附带的程序中,accept方法是唯一用到的方法。

### ORB_SLAM3与其他SLAM系统的比较 #### 优势 ORB_SLAM3作为第三代基于ORB特征的视觉里程计和建图系统,在多个方面表现出显著的优势: - **多传感器融合能力**:ORB_SLAM3支持单目、双目、RGB-D相机以及IMU等多种传感器输入,能够适应不同的硬件配置需求[^1]。 - **实时性能优越**:通过优化算法结构并采用高效的图像处理技术,ORB_SLAM3能够在保持高精度的同时实现快速响应。相比传统的SIFT方法,ORB_SLAM3在平均匹配时间上具有明显优势。 - **鲁棒性强**:得益于ψ函数特性的影响,这类估计器不仅效率极高而且拥有较高的崩溃点;更重要的是它们不会受到遮挡效应影响,可以有效排除粗大异常值而不完全忽略中度较大的离群点[^2]。 - **广泛应用场景**:无论是室内还是室外环境下的机器人导航任务,亦或是增强现实应用领域内,ORB_SLAM3均能提供稳定可靠的定位服务。特别是在抓取物体的任务中,该系统已被证明可以在Cornell Grasping数据集以及其他更复杂的数据集中取得优异的成绩[^3]。 ```python # Python伪代码展示如何初始化ORB_SLAM3系统 from orbslam3 import System slam_system = System(voc_file="path_to_vocabulary", settings_file="path_to_settings") slam_system.initialize() ``` #### 劣势 尽管ORB_SLAM3具备诸多优点,但也存在一些局限性: - **计算资源消耗较大**:为了维持高效稳定的运行状态,ORB_SLAM3对于设备的CPU/GPU算力有一定要求,这可能限制其应用于某些低端嵌入式平台上的可能性。 - **依赖良好光照条件**:当环境中光线变化剧烈或过暗时,可能会导致提取到的有效特征减少,从而影响整体表现效果。 - **初始姿态不确定性问题**:如果启动阶段未能获得足够的空间参照信息,则可能导致后续跟踪失败的情况发生。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值