Socket通讯,但是调试的过程接收不到内容。请大家帮忙给看看。
Tools.java[code = java]
Java codepublic class Tools {
public static String b2s(byte[] b){
char[] t;
int i=0;
t=new char[b.length];
while(i<b.length){
t[i]=(char)b[i];
i++;
}
return new String(t);
}public static byte[] s2b(String b){
byte[] t;
int i=0;
t=new byte[b.length()];
while(i<b.length()){
t[i]=(byte)b.charAt(i);
i++;
}
return t;
}
}[/code]
testsocket.javaimport java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
public class testsocket {
 ServerSocket ss;
 Socket sk;
DataInputStream dis;
DataOutputStream dos;
byte[] buff;
/**
* @param args
*/
public static void main(String[] args) {
testsocket a=new testsocket();
new Thread(a.new wait()).start();
new Thread(a.new send()).start();
}
class wait implements Runnable{@Override
public void run() {
try {
ss=new ServerSocket(12345);
sk=ss.accept();
while(sk.isConnected()){
dis=new DataInputStream(sk.getInputStream());
dis.read(buff);
System.out.println(Tools.b2s(buff));
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}class send implements Runnable{
String s;
Scanner in;
byte[] in_temp;
@Override
public void run() {
try {
sk=new Socket("127.0.0.1",12345);
s="";
while (!s.startsWith("exit")){
dos=new DataOutputStream(sk.getOutputStream());
in=new Scanner(System.in);
s=in.nextLine();
in_temp=Tools.s2b(s);
System.out.println(s);
dos.write(in_temp, 0, in_temp.length);
dos.flush();
}
System.exit(0);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();

}}}
 
 

解决方案 »

  1.   

    sk=ss.accept();
    这句话要放在while语句块里
      

  2.   

    对不起,不好意思看错了,我还以为是DatagramSocket
      

  3.   

    看程序应该没错的呀,但是好像这个地方dis.read(buff);
    会抛异常!
      

  4.   

    就是这个地方抛异常,null但是send那个线程是write的有内容的啊!不知道该怎么办。
      

  5.   

    buff 未引用实例,我没有看到楼主在哪个地方初始化它
      

  6.   

    添加了初始化的部分但是问题依然存在。
    import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.io.IOException;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.net.UnknownHostException;
    import java.util.Scanner;
    public class testsocket {
     ServerSocket ss;
     Socket sk;
    DataInputStream dis;
    DataOutputStream dos;
    byte[] buff;
    /**
     * @param args
     */
    public static void main(String[] args) {
    testsocket a=new testsocket();
    new Thread(a.new wait()).start();
    new Thread(a.new send()).start();
    }
    class wait implements Runnable{ @Override
    public void run() {
    try {int len;
    ss=new ServerSocket(12345);
    while(null==sk||sk.isConnected()){
    sk=ss.accept();
    dis=new DataInputStream(sk.getInputStream());
    len=dis.readInt();
    buff=new byte[len];
    System.out.println(dis.read(buff));
    // System.out.println(buff.length);
    System.out.println(Tools.b2s(buff));
    }
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    }

    class send implements Runnable{
    String s;
    Scanner in;
    byte[] in_temp;
    @Override
    public void run() {
    try {
    s="";
    while (!s.startsWith("exit")){
    sk=new Socket("127.0.0.1",12345);
    dos=new DataOutputStream(sk.getOutputStream());
    in=new Scanner(System.in);
    s=in.nextLine();
    in_temp=Tools.s2b(s);
    for(int i=0;i<in_temp.length;i++){
    System.out.print(in_temp[i]+",");
    }
    dos.write(in_temp.length);
    dos.write(in_temp, 0, in_temp.length);
    dos.flush();
    }
    System.exit(0);
    } catch (UnknownHostException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }

    }}
      

  7.   

                        dos.write(in_temp.length);
                        dos.write(in_temp, 0, in_temp.length);
                        dos.flush();
    send类得上面3行是在输出流里写数据,上面在控制台打印了数据是有数据的。但是在wait类里面就是读不到数据,我真的不知道该如何去查找问题所在,请指点迷津!
      

  8.   

    package shiyan;import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.io.IOException;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.net.UnknownHostException;
    import java.util.Scanner;
    public class testsocket {
     ServerSocket ss;
     Socket sk;
    DataInputStream dis;
    DataOutputStream dos;
    /**
     * @param args
     */
    public static void main(String[] args) {
    testsocket a=new testsocket();
    new Thread(a.new wait()).start();
    new Thread(a.new send()).start();
    }
    class wait implements Runnable{
    byte[] buff=new byte[1024];
    byte[] buff1;int len;
    @Override
    public void run() {
    try {
    ss=new ServerSocket(12345);
    sk=ss.accept();
    dis=new DataInputStream(sk.getInputStream());
    System.out.println(sk.isConnected());
    while(null==sk||sk.isConnected()){
    len=dis.read(buff);
    System.out.println(len);
    buff1=new byte[len];
    for(int i=0;i<len;i++){
    buff1[i]=buff[i];
    }
    System.out.println(b2s(buff1));
    }
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    }

    class send implements Runnable{
    String s;
    Scanner in;
    byte[] in_temp;
    @Override
    public void run() {
    try {
    s="";
    sk=new Socket("127.0.0.1",12345);
    dos=new DataOutputStream(sk.getOutputStream());
    while (!s.startsWith("exit")){
    in=new Scanner(System.in);
    s=in.nextLine();
    in_temp=s2b(s);
    dos.write(in_temp, 0, in_temp.length);
    dos.flush();
    }
    System.exit(0);
    } catch (UnknownHostException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }

    }

    public static String b2s(byte[] b){
    char[] t;
    int i=0;
    t=new char[b.length];
    while(i<b.length){
    t[i]=(char)b[i];
    i++;
    }
    return new String(t);
    } public static byte[] s2b(String b){
    byte[] t;
    int i=0;
    t=new byte[b.length()];
    while(i<b.length()){
    t[i]=(byte)b.charAt(i);
    i++;
    }
    return t;
    }

    }
    总算弄好了,是buff初始化的问题。