黑马程序员技术交流社区

标题: 在dos命令下两边都在等,在eclipse下两边都抛异常 [打印本页]

作者: 何羡玉    时间: 2013-4-28 08:35
标题: 在dos命令下两边都在等,在eclipse下两边都抛异常
本帖最后由 何羡玉 于 2013-4-28 21:24 编辑

谁知道这是怎么回事

package sockedTest;
import java.io.*;
import java.net.*;
public class server {
/**
  * @param args
  * @throws IOException
  */
public static void main(String[] args) throws IOException {
  // TODO Auto-generated method stub
  
  ServerSocket ss=new ServerSocket (18000);
        Socket s=ss.accept();
InputStream in= s.getInputStream();
OutputStream out=s.getOutputStream();
  byte[] b=new byte[1024*64];
  int len=in.read(b);
  out.write("客户端,你好".getBytes());
  System.out.println(new String(b,0,len));
      s.close();
}
}

package sockedTest;
import java.io.*;
import java.io.InputStream;
import java.net.*;
public class client {
            

         
        
public static void main(String[] args) throws UnknownHostException, IOException
{
  
        Socket s=new Socket("127.0.0.1",18000);
       InputStream in= s.getInputStream();
       OutputStream out=s.getOutputStream();
        byte[] b=new byte[1024*64];
       int len= in.read(b);
        System.out.print(new String (b,0,len));
        out.write("服务端,你好".getBytes());
        s.close();
}
}






作者: 殇_心。    时间: 2013-4-28 10:06
估计是运行环境的问题吧?
作者: 李慧声    时间: 2013-4-28 10:46
一点小问题,可能楼主在写的时候没有注意到,调整一下代码的顺序就好了。
客户端写法有问题,read方法是一个阻塞方法,你没有发过来数据,我就一直在那里等,知道你发过来为止。
在这个例子中,显然只有在客户端先向服务器发送数据之后,才会从服务器那里得到服务器发送过来的数据,
所以你只要把out.write("服务端,你好".getBytes());这句话放在read前面就OK了。
作者: 黑马-秦歌    时间: 2013-4-28 11:35
  out.write("客户端,你好".getBytes());
int len=in.read(b);

作者: 黑马-秦歌    时间: 2013-4-28 11:36
最好在 ;
out.flush();




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2