高手,您好:
我在写一个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();
}
}]
因为每一个用户的“向S端输入”都是会有一个“结尾”的,当发生EOFException的时候,我采用:“让程序捕获这个场景”“然后执行之后的S端代码”,就是我的上文程序的第9行的“{”到第61行“}”的作用域所标识的“catch(EOFException){....}”的作用域所进行的“用户输入完毕后”“执行S端的代码”的逻辑实现来进行“S端的EOFException”的处理.
希望得到高手的点拨:
我的这个代码实现方案,能否将这里S端的EOFException的问题进行解决..?
谢谢高手!!
一百分奉上
一位日日夜夜向着理想奔跑的筑梦者
2013年10月29日星期二早晨2点39分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();
}
}]
因为每一个用户的“向S端输入”都是会有一个“结尾”的,当发生EOFException的时候,我采用:“让程序捕获这个场景”“然后执行之后的S端代码”,就是我的上文程序的第9行的“{”到第61行“}”的作用域所标识的“catch(EOFException){....}”的作用域所进行的“用户输入完毕后”“执行S端的代码”的逻辑实现来进行“S端的EOFException”的处理.
希望得到高手的点拨:
我的这个代码实现方案,能否将这里S端的EOFException的问题进行解决..?
谢谢高手!!
一百分奉上
一位日日夜夜向着理想奔跑的筑梦者
2013年10月29日星期二早晨2点39分socket通信异常EOFException
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.EOFException;
import java.io.IOException;class CJ{
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;
}
case 4:
{
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();
}
}}
希望得到高手的点拨:
我的代码,还有什么地方有问题吗?
我能够实现我的“S端的业务功能不受影响”并且“S端将EOFException异常的问题解决”两个目标的实现吗...?
谢谢高手!!
如果抛出异常的话,
System.out.println(buffertemp3);
输出的是什么内容?
只是最后一部分未输出么?
也谢谢caofeng891102,与失落夏天的关注!!
withiter版主,现在我参考您上回面向硬盘中的文件的读方法的手迹,写了下面的面向Socket网络流的读方法,但个人感觉不是很好,希望得到您的点拨...
我的读方法代码为:
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;
}
我觉得这个读方法,应该能够解决从网络中传输过来的数据的“逐个判断”问题:
因为每一个从网络中写过来的String,“都一定是有一个结尾的”,如果进行了本方法的应用后,在网络中如果碰到写过来的一组字符串的话,会有“每一笔s端的业务碰到结尾的时候,都会抛出EOFException”的场景,从而出现:
首先网络中写过来的数据在第14行赋值给info变量,然后,到达网络中String变量的结尾,执行catch,捕捉这里的“EOFException”,然后,程序走到第16行,break,程序到达第22行,将info中接收到的网络中传输过来的数据,交给msg,之后,msg被作为返回值,返回.
希望得到CSDN中的高手和withiter版主尽快的回复:
我的这个方法的写法,能不能解决“EOFException”的异常..?
谢谢CSDN中的高手,谢谢withiter版主,我的老师,谢谢CSDN,我的大学!!
http://bbs.csdn.net/topics/390550706
也谢谢caofeng891102,与失落夏天的关注!!
withiter版主,现在我参考您上回面向硬盘中的文件的读方法的手迹,写了下面的面向Socket网络流的读方法,但个人感觉不是很好,希望得到您的点拨...
我的读方法代码为:
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;
}
我觉得这个读方法,应该能够解决从网络中传输过来的数据的“逐个判断”问题:
因为每一个从网络中写过来的String,“都一定是有一个结尾的”,如果进行了本方法的应用后,在网络中如果碰到写过来的一组字符串的话,会有“每一笔s端的业务碰到结尾的时候,都会抛出EOFException”的场景,从而出现:
首先网络中写过来的数据在第14行赋值给info变量,然后,到达网络中String变量的结尾,执行catch,捕捉这里的“EOFException”,然后,程序走到第16行,break,程序到达第22行,将info中接收到的网络中传输过来的数据,交给msg,之后,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; }
也谢谢Mr叶哥的点拨!!
由于顺溜哥在线上又为弟我做了QQ辅导..
叶哥,版主,弟我,手里只有100分,弟我暂时将分数进行了上面的划分...
谢谢叶哥的关注!!
今后有事情,如果能够见面的话,弟我,一定补上您今天的人情!!