求高手点拨一个Socket通信的EOFException的处理方案的可行性.
高手,您好:
我在写一个im系统.碰到了DataInputStream实体的readUTF方法在读取对面的网络C端的节点进行写出的数据的“EOFException”的异常的问题...
希望得到高手的点拨:
我将接收端的代码进行:
public void receiveTheData(){
try {
DataInputStream dips3 = new DataInputStream(so3.getInputStream());
while(true){
C_portManageRecvDportData m8 = new C_portManageRecvDportData(so2);
m8.start();
try{
buffertemp3 = dips3.readUTF();
}catch(EOFException e){
System.out.println(buffertemp3);
String[] bufferData3 = buffertemp3.split("[#]");
sign3 = Integer.parseInt(bufferData3[0]);
para3 = Integer.parseInt(bufferData3[1]);
SocketInfo = bufferData3[2];
switch(sign3){
case 0:
{
switch(para3){
case 0:
{
break;
}
}
}
case 1:
{
}
case 2://接收S端的数据,让C端的客户端将好友的消息进行接收.
{
DataOutputStream dops3 = new DataOutputStream(so3.getOutputStream());
ManageC_portRecv_chatwordChannel1 m1 = new ManageC_portRecv_chatwordChannel1(SocketInfo,dops3,dips3);
m1.start();
PlaySysAudio.Play(InfoAccessPath);
break;
}
case 4://接收S端传至C端的好友IP地址。
{
casebuffer = SocketInfo.split("[|]");
case 3://
{
MySystemserialnum = Integer.parseInt(SocketInfo);
break;
}
MyFriIP = casebuffer[0];
MyFriPort = casebuffer[1];
MyFriNum = casebuffer[2];
MyFriRole = casebuffer[3];
PlaySysAudio.Play(IPAccessPath);
break;
}
case 10:
{
ManageGetTheS_port_PayForTheSysFuctionSignal m10 = new ManageGetTheS_port_PayForTheSysFuctionSignal(para3,SocketInfo);
m10.start();
break;
}
}
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}]static String readsocketUTF(Socket s){
DataInputStream read = null;
try {
read = new DataInputStream(s.getInputStream());
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
String msg = "";
String info = "";
msg = info;
while(true){
try {
info = read.readUTF();
}catch(EOFException e){
break;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
msg = msg + info;
return msg;
}
希望得到CSDN中的高手和withiter版主尽快的回复:
我的这个方法的写法,能不能解决“EOFException”的异常..?
谢谢CSDN中的高手,谢谢withiter版主,我的老师,谢谢CSDN,我的大学!!
你那个自己实现的方法里还是用的readUTF,还是会出现那个EOF异常的。建议你用BufferedReader 封装下再读取
private static String readsocketUTF(Socket s){
String msg = "";
try {
InputStreamReader read = new InputStreamReader(s.getInputStream(),"UTF-8");
BufferedReader reader = new BufferedReader(read);
String info = reader.readLine();
msg = info;
while (true) {
info = reader.readLine();
if (info == null)
break;
msg = msg + info;
}
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return msg;
}