日期:2014-05-20  浏览次数:20913 次

求高手点拨一个Socket通信软件的问题解决方案.
高手,您好:
    我在做一个CS结构的Socket通信im系统,第一个作品,碰到了EOFException的问题..
    经过几日的研究与求教,现在我得到了两个解决方案:
    0.进行系统通信的“字节流”的传输方式的定义.
    1.进行系统通信的“字符流”传输方式的readUTF()方法的重写.
    现在,我希望得到高手的指导:
    我的第二种方案,错在什么地方..
    我做了一个实验:
    S端的源代码:
    
package s;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class S_port {
String str = "";
ServerSocket s =null;
Socket so = null;
S_port(){
try {
s = new ServerSocket(60000);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
while(true){
try {
so = s.accept();
break;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
str = Lib.readsocketUTF(so);
System.out.println(str);
}

public static void main(String[] args){
new S_port();
}
}

    为了解决readUTF()方法的EOFException的问题,我进行了S端的“Lib类”的书写:
    Lib类的代码如下:
    
package s;

import java.io.DataInputStream;
import java.io.EOFException;
import java.io.IOException;
import java.net.Socket;

public class Lib {
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;
         
    }
}

    C端的代码如下:
    
package s;

import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;

public class C_port {
Socket s = null;
DataOutputStream dops = null;
public C_port(){
try {
s = new Socket("127.0.0.1",60000);
dops = new DataOutputStream(s.getOutputStream());
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
dops.writeUTF("Hello_world");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

public static void main(String[] args){
new C_port();
}

}

    可是,在我运行了S端的代码和C端的代码之后,我得到的console窗口的提示如下:
    
    一个“不停循环动态报错的console窗口”...
    求高手点拨:
    这是怎么回事..
    应该怎么修改...?
    谢谢高手!!
    一百分奉上!!
                                                            一位日日夜夜向着理想奔跑的筑梦者