黑马程序员技术交流社区

标题: 求助自定义服务器时遇到的疑问;已解决 [打印本页]

作者: 邓杰    时间: 2012-6-13 09:49
标题: 求助自定义服务器时遇到的疑问;已解决
本帖最后由 邓杰 于 2012-6-19 13:27 编辑

import java.net.*;
import java.io.*;

class  ServerDemo
{
        public static void main(String[] args) throws Exception
        {
                ServerSocket ss=new ServerSocket(5220);
               
               
                while (true)
                {
                        Socket s=ss.accept();
                        new Thread(new ThreadServer(s)).start();
                }
               
        }
}
class ThreadServer implements Runnable
{
        private Socket s;
        ThreadServer(Socket s)
        {
                this.s=s;
        }
        public void run()
        {
                String ip=s.getInetAddress().getHostAddress();
                System.out.println(ip);
                try
                {
                        PrintWriter out=new PrintWriter(s.getOutputStream(),true);


                        //下面这几行代码我的本意是在控制台上打印出浏览器出服务发出的请求的内容;注:内容是可以在控制台上的。已经打印;
                        //证明IE已经成功连接到服务器;但是是因为什么原因。服务器不能执行到System.out.println("---测试代码------");及以下的语句;
                        //注意:此时服务器并没关闭没有关闭;我又用了第二个浏览器连接。现象一样 ;
                        //可以为什么out.println()返回给浏览器的内容就不能执行到;注释这几句代码后。就恢复正常;
                        BufferedReader bufin=new BufferedReader(new InputStreamReader(s.getInputStream()));
                        String line=null;
                        while ((line=bufin.readLine())!=null)
                        {
                                System.out.println(line);//这里的是被执行到了的;
                        }
                        System.out.println("---测试代码------");//测试服务器是否执行到此语句;证明根本没有执行到此;
                        out.println("你好。到底什么事?");
                        s.close();
                }
                catch (Exception e)
                {
                        throw new RuntimeException("连接失败;");
                }
               
        }
}

作者: 黄奕豪    时间: 2012-6-13 10:26
这是结束标志的问题,while ((line=bufin.readLine())!=null)这一句要读到换行符,而且换出来的行没问题才会停止,而从s.getInputStream())这里出来的信息有可能没有换行符,或者如果接收到的是Linux客户端的信息呢?换行符根本和Window的不一样~~所以你该想个办法解决这个结束标志的问题~~
作者: 潘东升    时间: 2012-6-13 10:32
while ((line=bufin.readLine())!=null)
没有跳出循环,你如果直接用浏览器连接,浏览器不会发送结束标记,所以循环是跳不出来的,所以就死在这里了
你可以用一个字节数组接收数据,数组可以设大一些,然后直接打印,就完成了
修正:把循环去掉,代替----char[] buf = new char[1024];
int len = bufIn.read(buf);
System.out.println(new String(buf, 0 ,len);




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