高手,您好:
    我在做一个通信程序,现在我利用“字节流”写出了一个“防止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();
break;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
SystemThread m1 = new SystemThread(so);
m1.start();
try {
s.close();
} 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!!
    一百分奉上!!
                                                            一位日日夜夜向着理想奔跑的筑梦者 
                                                            2013年11月5日下午15点7点Java调试Java SocketJava异常Java排错Java流

解决方案 »

  1.   

    楼主这个问题我记得问了若干遍了。。
    去把我发的那个例子下载下来仔细研究下:http://blog.csdn.net/withiter/article/details/7734062
    搞明白了,基本上Socket通信的基本知识就掌握了
      

  2.   

    希望须等待哥能够点拨:
        我的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端的窗口,打印出结果...?
        
        谢谢须等待哥!!
      

  3.   

    希望CSDN中的诸位高手,同仁,尽快的点拨!!
        谢谢CSDN!!
        谢谢须等待哥!!
        谢谢版主withiter!!
      

  4.   

    自顶一个!!
        Mark!!
      

  5.   


    须等待哥,弟我的主线程,原先的代码里,是进行了:
            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();
                }
            }
            SystemThread m1 = new SystemThread(so);
            m1.start();
            try {
                s.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        构造方法的书写的,在其中的第10行,第11行的“S端接业务”的代码设计的...
        在第11行,S端接收到一单业务后,将循环“break”,S端的主线程到达地17行启动子线程,然后,让子线程中的代码运行..
        按照须等待哥您的指导:
        S端的子线程刚刚启动,S端的主线程就将水管给关闭了..
        之后,子线程就由于S端的关闭,也随之关闭了...
        须等待哥,现在弟我将S端构造方法的代码修改成了:
         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();
    }
    }
    }
        这个结构.
        在第10行,我的S端的主线程接收到一个Socket请求之后,在第11行创建一个子线程对象,并且在第12行将这个对象启动.
        之后,我的S端的主线程会继续执行,运行到第16行代码,循环回到第8行的while语句处,走到第10行语句,主线程阻塞等待下一位客户的业务.
        我的子线程没有修改,会执行我的原来的逻辑:“打印我的主线程中的水管中的数据”..
        须等待哥,弟我是借助循环,将弟我的程序中的“主线程首先退出”的问题解决的..
        您看,须等待哥,弟我说的对吗...?
      

  6.   

    希望CSDN的版主,CSDN中的诸位高手,CSDN中的诸位伙伴,能够点拨!!
        谢谢CSDN!!
        谢谢须等待哥!!
        谢谢诸位伙伴!!
        自顶一个!!
        Mark!!
      

  7.   

    求CSDN中的版主,CSDN中的诸位高手,CSDN中的诸位伙伴,能够点拨!!
        谢谢CSDN!!
        谢谢须等待哥!!
        谢谢诸位伙伴!!
        自顶一个!!
        Mark!!
      

  8.   

    你最好重新去研究一下 socket,