Java编程那些事儿104——网络编程技术3[Java编程]
本文“Java编程那些事儿104——网络编程技术3[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
为了一步一步的掌握网络编程,下面再研究网络编程中的两个基本问题,通过办理这两个问题将对网络编程的熟习深化一层.
1、若何复用Socket衔接?
在前面的示例中,客户端中成立了一次衔接,只发送一次数据就关闭了,这就相当于拨打电话时,电话打通了只对话一次就关闭了,其实越发常用的应当是拨通一次电话今后多次对话,这就是复用客户端衔接.
那么若何实现成立一次衔接,举行多次数据交换呢?其实很简单,成立衔接今后,将数据交换的逻辑写到一个循环中便可以了.这样只要循环不完毕则衔接就不会被关闭.按照这种思绪,可以改革一下上面的代码,让该程序可以在成立衔接一次今后,发送三次数据,当然这里的次数也可以是多次,示例代码以下:
package tcp;
import java.io.*;
import java.net.*;
/**
* 复用衔接的Socket客户端
* 功效为:发送字符串“Hello”到服务器端,并打印出服务器端的反馈
*/
public class MulSocketClient {
public static void main(String[] args) {
Socket socket = null;
InputStream is = null;
OutputStream os = null;
//服务器端IP地址
String serverIP = "127.0.0.1";
//服务器端端口号
int port = 10000;
//发送内容
String data[] ={"First","Second","Third"};
try {
//成立衔接
socket = new Socket(serverIP,port);
//初始化流
os = socket.getOutputStream();
is = socket.getInputStream();
byte[] b = new byte[1024];
for(int i = 0;i < data.length;i++){
//发送数据
os.write(data[i].getBytes());
//接纳数据
int n = is.read(b);
//输出反馈数据
System.out.println("服务器反馈:" + new String(b,0,n));
}
} catch (Exception e) {
e.printStackTrace(); //打印非常信息
}finally{
try {
//关闭流和衔接
is.close();
os.close();
socket.close();
} catch (Exception e2) {}
}
}
}
该示例程序和前面的代码相比,将数据交换部份的逻辑写在一个for循环的内容,这样便可以成立一次衔接,顺次将data数组中的数据按照次序发送给服务器端了.
假如还是利用前面示例代码中的服务器端程序运行该程序,则该程序的后果是:
java.net.SocketException: Software caused connection abort: recv failed
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at java.net.SocketInputStream.read(SocketInputStream.java:90)
at tcp.MulSocketClient.main(MulSocketClient.java:30)
服务器反馈:First
明显,客户端在实际运行时呈现了非常,呈现非常的缘由是什么呢?假如细心阅读前面的代码,应当还记得前面示例代码中的服务器端是对话一次数据今后就关闭了衔接,假如服务器端程序关闭了,客户端持续发送数据必定会呈现非常,这就是呈现该问题的缘由.
以上是“Java编程那些事儿104——网络编程技术3[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |