黑马程序员技术交流社区

标题: 关于毕老师视频服务器端问题 [打印本页]

作者: Teale    时间: 2014-3-13 15:23
标题: 关于毕老师视频服务器端问题
package 网络编程;
import java.net.*;
import java.io.*;
public class 浏览器客户端 {
        public static void main(String[] args) throws Exception{
                ServerSocket ss=new ServerSocket(10010);
                Socket s=ss.accept();
                System.out.println(s.getInetAddress().getHostAddress());
                PrintWriter pw=new PrintWriter(s.getOutputStream(),true);
                pw.write("欢迎光临");
                BufferedReader bufin=new BufferedReader(new InputStreamReader(s.getInputStream()));
                byte[] buf=new byte[1024];
                String line=null;
                while((line=bufin.readLine())!=null){
                        System.out.println(line);
                }
                bufin.close();
                s.close();
                ss.close();
        }
}


奇怪的是这个服务端可以接收到客户端传来的信息。但是 另外那一段收不到“欢迎光临”。同样的代码,毕老师用浏览器就可以接收。

这是服务端
package 网络编程;
import java.io.*;
import java.net.*;
public class 测试 {
        public static void main(String[] args){
                String urlPath="http://127.0.0.1:10010";
                try{
                URL url=new URL(urlPath);
                URLConnection conn=url.openConnection();
                InputStream in=conn.getInputStream();
                byte[] buf=new byte[1024];
                int len=0;
                while((len=in.read(buf))!=-1){
                        System.out.println("2222222");  //该用来测试,结果也不输出,就没有输入流进来
                        System.out.println(new String(buf,0,len));
                }
                }catch(Exception ex){
                        System.out.println("URL不正确");
                }
       
        }
}

最终服务端打印:
127.0.0.1
GET / HTTP/1.1
User-Agent: Java/1.7.0_15
Host: 127.0.0.1:10010
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive
客户端什么都没有。
作者: Teale    时间: 2014-3-13 15:25
名字打错了, 第一个是服务器,我在客户端那个文件里写的。第二个是客户端。。不要看错了 囧
作者: chen_x    时间: 2014-3-13 16:36
PrintWriter pw=new PrintWriter(s.getOutputStream(),true);
虽然创建了pw为自动刷新,但是PrintWriter类的自动刷新只是针对该类的println、printf、format 3个方法,只有调用这3个方法往对象里写数据时,缓冲区才会自动刷新,调用write方法时缓冲区不会自动刷新;

将上面的pw.write("欢迎光临")改成pw.println("欢迎光临")就行,或者还是用write方法 ,手动再flush刷新一下也行。
客户端收到的信息是:2222222
                              欢迎光临
作者: Teale    时间: 2014-3-13 20:13
chen_x 发表于 2014-3-13 16:36
PrintWriter pw=new PrintWriter(s.getOutputStream(),true);
虽然创建了pw为自动刷新,但是PrintWriter类 ...

啊啊啊!! 恍然大悟!!!




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