络术语中,端口并不是指物理设备,而是为了便于实现服务器与客户端直接通信所使用的抽象概念。
运行在远程计算机上的服务器软件不停地等待那些希望与目标端口连接的网络请求。当远程计算机上的操作系统接收到一个请求与目标端口连接的网络数据包时,它便唤醒正在监听网络连接请求的服务器进程,并为两者建立连接。这种连接将一直保持下去,知道被其中任何一方中止。
例:
public static void main(String[] args) {
try{
Socket socket = new Socket("time-A.timefreq.bldrdoc.gov", 13);
socket.setSoTimeout(10000);
InputStream inStream = socket.getInputStream();
try{
Scanner in = new Scanner(inStream);
while(in.hasNextLine()){
String line = in.nextLine();
System.out.println(line);
}
}finally{
socket.close();
}
}catch(IOException e){
e.printStackTrace();
}
}
(1).关键代码
Socket socket = new Socket("time-A.timefreq.bldrdoc.gov", 13);
用于打开一个套接字,它也是网络软件中的一个抽象概念,负责使该程序内部和外部直接的通信。我们将远程地址和端口号传递给套接字的构造器,如果连接失败它将抛出一个UnknowHostException异常;如果存在其他问题,它将抛出一个IOException异常。其中UnknowHostException是IOException异常的子类。
InputStream inStream = socket.getInputStream();
一旦套接字被打开,java.net.Socket类中的getInputStream方法就会返回一个InputStream对象。而一旦获取了这个流,该程序将直接把每一行打印到标准输出。这个过程将一直持续到流发送完毕且服务器端口连接位置。
(2).该程序只适用于非常简单的服务器,比如“当日时间”之类的服务程序。在比较负责的网络程序中,客户端发送请求数据给服务器,而服务器可能在响应结束时并不立刻断开连接。
(3).Socket类非常简单易用,因为Java隐藏了简历网络连接和通过连接发送数据的复杂过程。实际上,java.net包提供的编程接口与操作文件时所使用的接口基本相同。
(4).Java除了支持TCP(传输控制协议)网络协议,还支持UDP(用户数据报协议),该协议可以用于发送数据包(也称为数据报),它所需付出的开销要比TCP少得多。UDP有一个重要的缺点:数据包无需按照顺序进行传递,它们甚至可能在传输过程中全部丢失。UDP要求数据包得接受者对它们进行排序,并请求发送者重新发送哪些丢失的数据包。UDP比较适合于哪些可以忍受数据包丢失的应用,例如用于音频流和视频流的传输,或者用于连续测量的应用领域。
1.套接字超时
(1)从套接字读取信息时,在可以访问数据之前,读操作将会被阻塞。如果此时主机不可达,那么应用将要等待很长得时间,并且因为受低层操作系统的限制而最终会导致超时。
对于不同的应用,应该确定合理的超时值。然后调用setSoTimeout方法设置这个超时值(单位:毫秒)。
Socket socket = new Socket("time-A.timefreq.bldrdoc.gov", 13);
socket.setSoTimeout(10000);
如果已经为套接字设置了超时值,并且之后的都操作和写操作在没有完成之前就超过了时间限制,那么这些操作就会抛出SocketTimeoutException异常。
可以捕获这个异常,并对超时做出反应
try{
InputStream in = socket.getInputStream();
...
}catch(InterruptedIOException exception){
...
}
(2)另外,还有一个超时问题是必须解决的。
Socket(String host, int port)
该构造器会一直无限期的阻塞下去,知道建立了到达主机的初始连接为止。
可以通过先构建一个无连接的套接字,然后再使用一个超时来连接的方法解决这个问题。
Socket socket = new Socket();
socket.connect(InetSocketAddress(String hostname, int port), int timeout);
2.因特网地址
因特网地址是指用一串数字表示的主机地址,它由4个字节组成,IPv6规定为16个字节,比如192.168.1.1。通常,不用过多考虑因特网地址的问题。但是,如果需要在主机名和因特网地址之间进行转换时,可以使用InetAddress类。
只要主机操作系统支持IPv6格式的因特网地址,java.net包也将支持它。
静态的getByName方法可以返回代表某个主机的InetAddress对象
例:
InetAddress address = InetAddress.getByName("time-A.timefreq.bldrdoc.gov");
将返回一个InetAddress对象,该对象封装了一个4字节的序列:132.164.4.104。然后,可以使用getAddress方法来访问这些字节。
byte[] addressBytes = address.getAddress();
一些访问量较大的主机名通常会应用于多个因特网地址,以实现负载均衡。可以通过getAllByName方法来获取所有主机。
InetAddress[] addresses = InetAddress.getAllByName(host);
有时可能需要知道本地主机的地址。如果只是要求得到localhost的地址,那总会得到地址127.0.0.1。此时,可以使用静态的getLocaHost方法来得到本地主机的地址。
InetAddress address = InetAddress.getLocaHost();
分享到:
相关推荐
在这个场景中,我们讨论的是一个2018年创建的C#代码示例,该示例成功实现了与OPC服务器的连接,并且在测试时能够正常工作。首先,确保在尝试运行这个代码之前,你的开发环境已经安装了合适的OPC服务器。 OPC服务器...
通过以上内容,我们可以了解到SQL Server连接服务器不仅提供了强大的数据集成能力,还支持多种高级功能,如分布式事务处理等。正确地配置和使用连接服务器,可以帮助企业和开发人员构建更加高效、灵活的应用系统。
"易语言 可开多个客户与服务器连接"这个标题涉及到的是网络编程中的多客户端-服务器架构,这种架构允许一个服务器同时处理来自多个客户端的连接请求。在局域网内聊天的应用场景中,这种设计尤其常见。 易语言,全称...
在这里,我们将提供一个解决方法,帮助用户解决印象笔记无法连接到服务器的问题。 问题的可能原因 在无法连接到服务器时,可能是由于以下原因所致: * 网络连接问题:可能是由于网络信号不稳定、网络设置错误或...
### 无法连接到Visual Studio 的Localhost Web服务器的解决方法 在进行Web开发时,我们经常需要使用到本地Web服务器来进行测试与调试。对于使用Visual Studio作为开发环境的用户来说,有时可能会遇到无法连接到...
如果按照上述步骤操作后仍然无法成功连接到服务器端服务,可以尝试以下故障排查方法: 1. **确认用户名和密码一致性**:确保客户端使用的用户名和密码与服务器端的agsadmin、agsusers中的用户名和密码完全一致。这...
2. **客户端连接**:客户端创建一个socket,然后尝试连接到服务器指定的IP地址和端口号。这个过程涉及到TCP的三次握手,确保连接建立的可靠性。 3. **连接建立**:一旦客户端的连接请求被服务器接受,双方就建立了...
在这个特定的场景中,我们讨论的是一个设计为连接多个服务器的Socket客户端。这个客户端程序能够向多个服务端发送消息,并且在消息中携带自身的ID,以便服务端识别消息来源。此外,它还具备了自动重连功能,即在非...
服务器端需要创建一个Socket,绑定到特定的IP地址和端口号,然后监听来自客户端的连接请求。一旦有连接请求到来,服务器就会接受这个连接,并为每个连接创建一个新的Socket用于数据交换。客户端则需要创建Socket,...
这是一个连接服务器的一个工具,直接使用命令行进行操作,方便快捷。这是一个连接服务器的一个工具,直接使用命令行进行操作,方便快捷
错误描述:oracle远程连接服务器出现 ORA-12170 TNS:连接超时 错误检查:有很多是oracle自身安装的问题,但是我这里服务器配置正常,监听正常,服务正常,远程可以ping通服务器。 这里主要是防火墙问题,解决办法: ...
首先,客户端发送一个SYN(同步序列编号)包给服务器,然后服务器回应一个SYN+ACK(同步+确认)包,最后客户端再回一个ACK(确认)包,完成连接。 3. **套接字(Socket)编程**:在编程中,客户端和服务器通过套接...
### PyCharm 连接 AutoDL ...通过以上步骤,您可以顺利地使用 PyCharm 连接到 AutoDL 服务器,并在其上进行 YOLOv8 的训练任务。这种方式不仅可以充分利用远程服务器的强大计算能力,还能够避免本地计算机资源的消耗。
服务器多用户连接器是一种至关重要的技术,它使得多个用户能够同时连接到一台服务器,实现资源共享、协同工作和数据交换。这种技术广泛应用于企业环境、云计算服务以及远程协作平台,极大地提高了工作效率并降低了...
VS Code 是一个功能强大且灵活的代码编辑器,它提供了远程连接服务器的功能,让开发者可以轻松地连接到远程服务器,编辑和管理代码。本文将详细介绍 VS Code 远程连接服务器的知识点。 一、什么是 VS Code 远程连接...
在这个项目中,STM32F750开发板被用来创建一个能同时处理多个PC客户端连接的TCP服务器。下面我们将详细探讨这个Demo中的关键技术点。 首先,STM32F750是一款高性能的微控制器,基于ARM Cortex-M7内核,具有丰富的...
打开一个Mysql服务器的连接打开一个Mysql服务器的连接
OPCClient 远程连接 OPC 服务器配置手册 OPC(OLE for Process Control)是一种工业自动化领域中的数据交换标准,OPC Client 是用于与 OPC 服务器进行通信的客户端应用程序。为了实现 OPC Client 与 OPC 服务器的...
Android 开发连接服务器调用数据库 ...Android 开发连接服务器调用数据库是一个复杂的过程,涉及到多个技术领域。需要掌握 Android 开发、服务器端开发、数据库操作等技术领域,才能实现这个功能。
安装并运行这个程序,管理员可以在Web界面无法访问时,通过命令行方式连接到服务器的iLO,进行故障诊断和修复工作。 总结起来,HPE服务器管理口远程连接工具IRC是HPE服务器管理的重要组成部分,它提供了在Web界面...