在使用Socket来连接服务器时最简单的方式就是直接使用IP和端口,但Socket类中的connect方法并未提供这种方式,而是使用SocketAddress类来向connect方法传递服务器的IP和端口。虽然这种方式从表面上看要麻烦一些,但它会给我们带来另外一个好处,那就是网络地址的重用。
所谓网络地址的重用表现在两个方面:
1. 通过建立一个SocketAddress对象,可以在多次连接同一个服务器时使用这个SocketAddress对象。
2. 在Socket类中提供了两个方法:getRemoteSocketAddress和getLocalSocketAddress,通过这两个方法可以得到服务器和本机的网络地址。而且所得到的网络地址在相应的Socket对象关闭后任然可以使用。
DataInputStream input = null;
-
Socket socket = null;
-
-
OutputStream output = null;
-
InetSocketAddress inetSocketAddress = null;
-
PrintWriter out = null;
-
String text = null;
-
-
BufferedReader line = null;
-
int communicateTime = 0;
-
try {
-
Properties props = BAConfiger.getProperties();
-
String socketIP = props.getProperty("socketIP");
-
int socketProt = Integer.parseInt(props.getProperty("socketProt"));
-
int socketConnectionCount = Integer.parseInt(props.getProperty("socketConnectionCount"));
-
int socketConnectionTime = Integer.parseInt(props.getProperty("socketConnectionTime"));
-
int socketWateServerTime = Integer.parseInt(props.getProperty("socketWateServerTime"));
-
-
inetSocketAddress = new InetSocketAddress(socketIP, socketProt);
-
-
socket = new Socket();
-
while (communicateTime < socketConnectionCount) {
-
socket.connect(inetSocketAddress, socketConnectionTime * 1000);
-
if (socket.isConnected()) {
-
System.out.println("连接服务器成功!");
-
break;
-
}
-
communicateTime++;
-
}
-
if (socket.isConnected()) {
-
output = socket.getOutputStream();
-
input = new DataInputStream(socket.getInputStream());
-
output.write(encryptText.getBytes());
-
output.flush();
-
int avali = 0;
-
for (int i = 0;i < socketWateServerTime; i++){
-
avali = input.available();
-
if (avali == 0){
-
Thread.sleep(1000);
-
System.out.println("银行没有返回信息,继续等待......");
-
}else{
-
System.out.println("返回的数据长度是: " + avali);
-
byte aval[] = new byte[avali];
-
int bytesRead = input.read(aval,0,avali);
-
text = Pub.decodeStr(aval, "GB2312");
-
System.out.println(">>>>>>>>>服务器返回的数据是: " + text);
-
break;
-
}
-
}
- }
注:上面这段代码存在问题。在发生异常的情况下,会跳过计数,起不到该有的作用。这是个问题。欢迎各位留言,解决。谢谢。
分享到:
相关推荐
- 重连策略可以设置为定时重试,或者在一段时间内尝试连接,如果多次失败则进入休眠状态,再过一段时间重新尝试。 5. **心跳机制** - 为了检测连接是否有效,可以引入心跳机制。客户端定时发送小量数据到服务器,...
通常,可以通过设置超时机制,如果在一段时间内客户端没有发送任何数据,服务器可以认为客户端已经掉线。另一种方法是使用心跳机制,即客户端和服务器定期交换特定的消息,如果某方未收到这些消息,就可判断对方可能...
// 等待一段时间确保数据完全发送 Thread.sleep(1000); // 关闭资源 ops.close(); fos.close(); socket.close(); } catch (Exception e) { // 异常处理 } } } ``` **关键点解析:** - 创建`Socket`对象...
- **kkchatroom05**:这个文件名可能是一个项目或代码示例,它可能包含了实现大文件传输的Java代码。具体实现可能包括Socket的创建、数据分片与组装的逻辑、NIO的选择器(Selector)和通道(Channel)的使用等。 ...
Java Socket默认支持这种通信模式,因为Socket连接一旦建立,双方都可以读写数据,但一次只能读或写,不能同时进行。例如,服务器先发送数据,然后客户端响应,接着客户端再发送数据,服务器回应,以此类推。 **3. ...
Java_Socket通讯源代码是Java网络编程中一个重要的学习资源,它主要展示了如何利用Java的Socket类进行TCP/IP通信。TCP/IP模式是一种可靠的传输协议,它确保了数据的顺序和完整性,适合处理大量数据,如GB级别的文件...
在这个基础学习代码中,我们将深入理解Socket的基本概念,涵盖TCP和UDP两种主要的传输协议。 TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。在TCP中,数据被分成...
本文将详细解释这些概念,并通过分析提供的部分Java代码片段,阐述如何在Java中实现基于socket的文件传输功能。 #### 一、Socket编程基础 Socket编程是网络编程的核心,它允许程序之间通过网络进行通信。在Java中...
在Oracle调用Java的过程中,通常我们会编写Java程序作为数据库的存储过程或者触发器的一部分,然后通过PL/SQL调用这些Java代码。这个过程涉及到Oracle的JDBC(Java Database Connectivity)驱动,它允许Java应用程序...
在Java中,`java.net.Socket` 类代表一个TCP连接,而`java.net.ServerSocket` 类用于监听并接受来自客户端的连接请求。通过Socket,你可以构建基于TCP的应用程序,如文件传输、聊天应用或者分布式系统。 在Java实验...
Java Socket套接字是Java网络编程中的核心组件,它提供了应用程序之间进行低级通信的机制。Socket基于TCP/IP协议,允许两台计算机通过网络进行双向通信。本篇文章将深入探讨Java Socket的基础知识,包括其原理、创建...
为实现断线重连,可以在捕获到此类异常后,关闭当前Socket,等待一段时间(如使用try-catch-finally结构),然后重新创建Socket并尝试连接。 - 使用线程或定时任务监控网络状态,当检测到网络恢复时,立即启动重连...
分析这段代码可以帮助理解Java Socket通信的实现细节。 9. **资源链接**: 压缩包中的"使用说明.txt"可能包含了对整个过程的详细解释,而"『源码天空』.url"和"免费『商业源码』.url"可能是提供更多的学习资源或...
Java Socket聊天程序是一种基于Java语言实现的局域网内通信工具,主要利用Socket类进行网络数据传输,实现客户端与服务器端的实时交互。这个简单的聊天程序仅支持文字发送,不包含图片、音频或其他多媒体文件的传输...
本篇内容主要解析一个基于Java语言编写的简单Socket聊天程序的源代码。该程序由客户端和服务端两部分组成,通过Socket进行通信,实现基本的文本消息传递功能。下面将详细介绍程序的结构、各个类的作用以及关键代码段...
交流学习用,大家帮忙看看有什么问题?在本机调试的时候总是socket总是空值
- 客户端代码(Client.java):包含Socket连接,GUI界面创建,以及消息发送和接收的实现。 - 可能还有测试用的main方法,用于启动服务器和客户端。 通过以上步骤,我们可以构建一个简单的Java聊天室应用。在实际...
这段Java代码会在12345端口等待客户端连接。当客户端连接并发送数据时,服务器读取数据并作出响应。然后,它关闭与客户端的连接,服务器Socket也会关闭。 在实际应用中,你可能需要处理多线程、异常处理、数据编码...
这段代码创建了一个文件输出流,用于接收来自客户端的数据,并通过循环读取客户端的输入流,每次读取一定数量的字节,然后写入到文件。 描述中提到,你需要在Windows环境下使用命令行(cmd)编译和运行Java程序。...
3. 客户端向服务器发送请求,例如发送一段文本。 4. 通过输出流`write()`方法将数据写入网络,发送到服务器。 5. 从输入流中读取服务器的响应,即大写的文本。 6. 处理收到的数据,然后关闭输入流、输出流和`Socket`...