在使用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;
-
}
-
}
- }
注:上面这段代码存在问题。在发生异常的情况下,会跳过计数,起不到该有的作用。这是个问题。欢迎各位留言,解决。谢谢。
分享到:
相关推荐
2. 实现socket多线程,监听端口1314,最大socket队列100,都可以人为设置 3. 模拟了对串口助手发送来的一串十六进制数据进行解析 4. 使用串口助手发送数据,模拟数据如图“模拟数据.png”所示 爱吃凉拌辣芒果 ...
交流学习用,大家帮忙看看有什么问题?在本机调试的时候总是socket总是空值
Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...
Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...
Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...
主要给大家介绍基于Java Socket实现一个简易在线聊天功能(一),分为客户端和服务端两段代码,非常具有参考价值,感兴趣的朋友一起学习吧
Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码...
Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码...
Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码...
java为数据结构中的列表定义了一个接口类java.util.list同时提供了3个实现类,分别是ArrayList、Vector、LinkedList使用; 生成不重复的随机数序列;列表、集合与数组的互相转换;java为数据结构中的映射定义一个接口...
用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天通信演示代码 2个目标文件...
Android基于Socket实现的聊天室功能 注解详细 一看就懂 包含服务器和客户端 服务器是一段java代码 客户端直接运行在手机上 用DOS(MyEclipse)开启服务器 然后运行模拟器或者手机即可。 注:请将客户端代码中的ip...
一段JAVA代码 实现ping功能 import java.io.IOException; import java.net.Socket; import java.net.UnknownHostException; import java.nio.channels.SocketChannel;
这段代码实现了简单的基于Socket的客户端服务器端程序。客户端程序创建一个Socket对象并与服务器建立连接,然后从服务器接收消息并提示用户输入消息发送给服务器。服务器端程序创建一个监听Socket对象以等待客户端...
用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天通信演示代码 2个目标文件...
Java既支持各种层次的网络连接,又以Socket类支持可靠的流(stream)网络连接,所以用户可以产生分布式的客户机和服务器。 网络变成软件应用的分布运载工具。Java程序只要编写一次,就可到处运行。 编译和解释性 ...
socket端口扫描程序,使用java语言编写。工具:Eclipse+windowbuilder插件。实现了IP段的扫描及TCP端口的扫描。