|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
学习JAVA的目的更多的是培养自身的工作能力,我觉得工作能力的一个核心就是:独立思考能力,因为只有独立思考后,才会有自己的见解
为了一步一步的把握收集编程,上面再研讨收集编程中的两个基础成绩,经由过程办理这两个成绩将对收集编程的熟悉深切一层。
1、怎样复用Socket毗连?
在后面的示例中,客户端中创建了一次毗连,只发送一次数据就封闭了,这就相称于拨打德律风时,德律风买通了只对话一次就封闭了,实在加倍经常使用的应当是拨通一次德律风今后屡次对话,这就是复用客户端毗连。
那末怎样完成创建一次毗连,举行屡次数据互换呢?实在很复杂,创建毗连今后,将数据互换的逻辑写到一个轮回中就能够了。如许只需轮回不停止则毗连就不会被封闭。依照这类思绪,能够改革一下下面的代码,让该程序能够在创建毗连一次今后,发送三次数据,固然这里的次数也能够是屡次,示例代码以下:
packagetcp;
importjava.io.*;
importjava.net.*;
/**
*复用毗连的Socket客户端
*功效为:发送字符串“Hello”到服务器端,并打印出服务器真个反应
*/
publicclassMulSocketClient{
publicstaticvoidmain(String[]args){
Socketsocket=null;
InputStreamis=null;
OutputStreamos=null;
//服务器端IP地点
StringserverIP="127.0.0.1";
//服务器端端标语
intport=10000;
//发送内容
Stringdata[]={"First","Second","Third"};
try{
//创建毗连
socket=newSocket(serverIP,port);
//初始化流
os=socket.getOutputStream();
is=socket.getInputStream();
byte[]b=newbyte[1024];
for(inti=0;i<data.length;i++){
//发送数据
os.write(data[i].getBytes());
//吸收数据
intn=is.read(b);
//输入反应数据
System.out.println("服务器反应:"+newString(b,0,n));
}
}catch(Exceptione){
e.printStackTrace();//打印非常信息
}finally{
try{
//封闭流和毗连
is.close();
os.close();
socket.close();
}catch(Exceptione2){}
}
}
}
该示例程序和后面的代码比拟,将数据互换部分的逻辑写在一个for轮回的内容,如许就能够创建一次毗连,顺次将data数组中的数据依照按次发送给服务器端了。
假如仍是利用后面示例代码中的服务器端程序运转该程序,则该程序的了局是:
java.net.SocketException:Softwarecausedconnectionabort:recvfailed
atjava.net.SocketInputStream.socketRead0(NativeMethod)
atjava.net.SocketInputStream.read(SocketInputStream.java:129)
atjava.net.SocketInputStream.read(SocketInputStream.java:90)
attcp.MulSocketClient.main(MulSocketClient.java:30)
服务器反应:First
明显,客户端在实践运转时呈现了非常,呈现非常的缘故原由是甚么呢?假如细心浏览后面的代码,应当还记得后面示例代码中的服务器端是对话一次数据今后就封闭了毗连,假如服务器端程序封闭了,客户端持续发送数据一定会呈现非常,这就是呈现该成绩的缘故原由。
<p>
C#是盗用了Java的源代码,仿照开发的,原因是Java是开源的啊,盗了也白盗,还有一点,开发C#语言的团队是就是开发Java语言的团队,是微软重金挖过去的啊 |
|