黑马程序员技术交流社区

标题: 大家帮忙看下我的这个程序,怎么出不来结果呢? [打印本页]

作者: 杜成龙    时间: 2013-10-23 20:02
标题: 大家帮忙看下我的这个程序,怎么出不来结果呢?
本帖最后由 杜成龙 于 2013-10-24 09:06 编辑

今天一哥们让我传个文件给他,正好2周前看过网络编程,所以就想借机会试一下,我就写了个服务端的程序给他,然后我这边写了个客户端的程序,
结果,那哥们告诉我文件没传过去,我就在自己机子上试了下,还真是不行,但看到程序没有问题啊?所以想请高手帮看下,谢谢啦!
客户端程序:
  1.   import java.net.*;
  2.   import java.io.*;
  3.   class TextClient
  4.   {
  5.    public static void main(String[] args)throws Exception
  6.    {
  7.    BufferedReader bufr=new BufferedReader(new FileReader("UdpSend.java"));
  8.    Socket s=new Socket("127.0.0.1",10008);
  9.    PrintWriter out=new PrintWriter(s.getOutputStream(),true);
  10.    BufferedReader in=new BufferedReader(new InputStreamReader(s.getInputStream()));
  11.    String line=null;
  12.    while ((line=bufr.readLine())!=null)
  13.    {
  14.    out.println(line);
  15.    }
  16.    String str=in.readLine();
  17.    System.out.println(str);
  18.    bufr.close();
  19.    s.close();
  20.    }
  21.   }
复制代码
服务端程序:
  1.   import java.net.*;
  2.   import java.io.*;
  3.   class TextServer
  4.   {
  5.    public static void main(String[] args)throws Exception
  6.    {
  7.    ServerSocket ss=new ServerSocket(10008);
  8.    Socket s=ss.accept();
  9.    BufferedReader in=new BufferedReader(new InputStreamReader(s.getInputStream()));
  10.    PrintWriter out=new PrintWriter(s.getOutputStream(),true);
  11.    PrintWriter pw=new PrintWriter("server.txt");
  12.    String line=null;
  13.    while ((line=in.readLine())!=null)
  14.    {
  15.    pw.println(line);
  16.    pw.flush();
  17.    }
  18.    out.println("上传成功!");
  19.    pw.close();
  20.    s.close();
  21.    ss.close();
  22.    }
  23.   }
复制代码
运行程序后,发现文件确实没传过来!程序写的好像没问题啊?




作者: 黑马戴帅军    时间: 2013-10-23 20:09
是不是IP地址填错了呢。IP地址要填写服务端的密码,也就是服务器端的IP的。
作者: 杜成龙    时间: 2013-10-23 20:16
黑马戴帅军 发表于 2013-10-23 20:09
是不是IP地址填错了呢。IP地址要填写服务端的密码,也就是服务器端的IP的。 ...

应该不是,我在自己的机子上验证也不行啊!

作者: 月夜之鬼魅    时间: 2013-10-23 20:33
String ip = s.getInetAddress().getHostAddress()这句话怎么没有,在服务端
作者: 杜成龙    时间: 2013-10-23 21:18
月夜之鬼魅 发表于 2013-10-23 20:33
String ip = s.getInetAddress().getHostAddress()这句话怎么没有,在服务端

这个有没有不影响结果的~
作者: 张文豪    时间: 2013-10-23 22:24
你这个问题老毕在视频上不是讲到过了么。
while ((line=bufr.readLine())!=null)
{
out.println(line);
}
这行下面加上s.shutdownOutput();
你要告诉服务端你已经写完了,否则当你把文件读取完后while循环结束,而服务器的read()是阻塞式的,它并没有收到结束信号,它就一直在那边读,所以会出现两边都在等的情况。
当你在while循环后面加上一句s.shutdownOutput();这个结束标志后,服务器那边的读取流就能收到结束信号。


作者: 杜成龙    时间: 2013-10-24 09:05
张文豪 发表于 2013-10-23 22:24
你这个问题老毕在视频上不是讲到过了么。
while ((line=bufr.readLine())!=null)
{

是哈,咋把这给掉了,写程序时还真没想起这事儿,谢谢你哈~




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