高手,您好:
    我在做一个通信程序,现在我利用“字节流”写出了一个“防止EOFException异常”的Lib类.
    并且,我进行了测试,源代码如下:
    (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();
            SystemThread m1 = new SystemThread(so);
            m1.start();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
     
    public static void main(String[] args){
        new S_port();
    }
}    (S端的子线程:SystemThread类..)
package s;
 
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;
 
public class SystemThread extends Thread{
    Socket so = null;
    DataInputStream dips = null;
    InputStream inputstream = null;
    String str = null;
     
    public SystemThread(Socket s){
        so = s;
    }
     
    public void run(){
        String str0 = Lib.readsocketUTF(so);
        System.out.println(str0);
    }
}    (我写的Lib类..)
package c_port_packageBJDoctor;
 
import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;
 
public class Lib {
    static InputStream inputstream = null;
    static String readsocketUTF(Socket s){
        byte[]   buf   =   new   byte[2048*2];   
        int num = 0;
        try {
            inputstream = s.getInputStream();
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
         
        while   (num   !=   (-1))   {//是否读完所有数据   
                try {
                    num   =   inputstream.read(buf);
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }//继续从网络中读取文件   
        }   
        String str0 = new String(buf);
        String msg = str0.trim(); 
        return msg;
    }
}    (我的C端源代码..)
package s;
 
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
 
public class C_port {
    Socket s = null;
    OutputStream outputstream = null;
    public C_port(){
        try {
            s = new Socket("127.0.0.1",60000);
            outputstream = new DataOutputStream(s.getOutputStream());
        } catch (UnknownHostException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        String str = "CJ必胜!!CJCO!!CJHMF,这个问题解决了,我高兴了,现在我们的群里,加入了143个人\r\n我们群里的人,都决心互相学习,增长本领";
        byte[] b = str.getBytes();
        int len = b.length;
        try {
            outputstream.write(b,0,len);
            outputstream.close();
            s.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
     
    public static void main(String[] args){
        new C_port();
    }
     
}
    希望得到高手的点拨:
    为什么在我运行了S端和C端之后,会出现S端的console窗口,打印出“完全为空”的场景的内容...?
    
    希望得到CSDN中的高手的尽快的点拨!!
    谢谢高手!!
    谢谢CSDN!!
    一百分奉上!!Java调试Java排错

解决方案 »

  1.   

    除了说句先运行server端,再client端,别的我也不知道该说什么了,因为
      

  2.   

    你客户端发的字符串,在server端打印的,不是对的吗?public void run(){
            String str0 = Lib.readsocketUTF(so);
            System.out.println(str0);
        }
      

  3.   

    小行星哥,您好:
        我现在将我的编译环境做成了“Eclipse标准版”的编译环境,但是,现在,相同的代码,相同的编译环境,我却得到了下面的输出结果....
        
        并且,顺溜哥,弟我是进行了您的建议:“添加flush()方法”的操作之后,得到的结果:
        package s;import java.io.DataOutputStream;
    import java.io.IOException;
    import java.io.OutputStream;
    import java.net.Socket;
    import java.net.UnknownHostException;public class C_port {
    Socket s = null;
    OutputStream outputstream = null;
    public C_port(){
    try {
    s = new Socket("127.0.0.1",60000);
    outputstream = new DataOutputStream(s.getOutputStream());
    } catch (UnknownHostException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    String str = "CJ必胜!!CJCO!!CJHMF,这个问题解决了,我高兴了,现在我们的群里,加入了143个人\r\n我们群里的人,都决心互相学习,增长本领";
    byte[] b = str.getBytes();
    int len = b.length;
    try {
    outputstream.write(b,0,len);
    outputstream.flush();
    outputstream.close();
    s.close();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }

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

    }    的代码修改之后,还是得到了上面的结果...
        希望小行星哥和顺溜哥和CSDN中诸位高手尽快的点拨:
        弟我的代码,错在什么地方...?
        谢谢小行星哥!!
        谢谢顺溜哥!!
        谢谢CSDN!!
      

  4.   

    大概的
    public class C_port {
    Socket s = null;
    OutputStream outputstream = null; public C_port() {
    try {
    s = new Socket("127.0.0.1", 60000);
    PrintWriter os = new PrintWriter(s.getOutputStream());
    BufferedReader is = new BufferedReader(new InputStreamReader(s
    .getInputStream()));
    String readline = "CJ必胜!!CJCO!!CJHMF,这个问题解决了,我高兴了,现在我们的群里,加入了143个人我们群里的人,都决心互相学习,增长本领";
    os.println(readline);
    while (!readline.equals("bye")) {
    os.println(readline);
    os.flush();
    System.out.println("C_port:-->>" + readline);
    }
    os.flush();
    os.close();
    is.close();
    s.close();
    } catch (UnknownHostException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    }
    } public static void main(String[] args) {
    new C_port();
    }public class S_port { public static void main(String[] args) {
    ServerSocket s = null;
    Socket so = null;
    try {
    try {
    s = new ServerSocket(60000);
    } catch (Exception e) {
    e.printStackTrace();
    }
    try {
    so = s.accept();
    } catch (Exception e) {
    } String line;
    BufferedReader is = new BufferedReader(new InputStreamReader(so
    .getInputStream()));
    PrintWriter os = new PrintWriter(so.getOutputStream());
    BufferedReader sin = new BufferedReader(new InputStreamReader(so
    .getInputStream()));
    System.out.println("S_port:-->>:" + is.readLine());
    line = sin.readLine(); while (!line.equals("exit")) {
    os.println(line);
    os.flush();
    System.out.println("Server:" + line);
    System.out.println("Client:" + is.readLine());
    line = sin.readLine();
    }
    os.close();
    is.close();
    so.close();
    s.close();
    } catch (Exception e) { }
    }
    }
      

  5.   

    小行星哥,顺溜哥,版主,谢谢您们!!
        谢谢您们的相助!!
        弟我已经将问题“K·O!!”了!!
        是由于弟我的实验环境中,弟我由于连日的疲劳和马虎眼,造成了弟我将原先的未修改采用“DataOutputStream dops = new DataOutputStream(s.getOutputStream);”方案进行书写的Lib类,进行了使用.
        造成了我的代码的错误.
        感谢三位哥哥的相助!!
        长风破浪会有时,弟我一定报答哥!!
      

  6.   

    不好意思,一个小屌丝哥,在弟我进行“写入感谢话语”和进行“分数的提交”的时候,您的帖子,发到了弟我的楼上..
        不好意思!!
        我的本贴的分数用完了!!
        我以后进行发帖的时候,都会用“一位日日夜夜向着理想奔跑的筑梦者”,这个落款,进行我的帖子的收尾。
        如果哥哥能够再次帮助弟我的话...
        弟我将把今天您的相助的人情,在“CSDN论坛的分数这个字段上”,牢牢地补上!!