A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 邓杰 中级黑马   /  2012-6-13 09:49  /  1368 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 邓杰 于 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("连接失败;");
                }
               
        }
}

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

2 个回复

正序浏览
while ((line=bufin.readLine())!=null)
没有跳出循环,你如果直接用浏览器连接,浏览器不会发送结束标记,所以循环是跳不出来的,所以就死在这里了
你可以用一个字节数组接收数据,数组可以设大一些,然后直接打印,就完成了
修正:把循环去掉,代替----char[] buf = new char[1024];
int len = bufIn.read(buf);
System.out.println(new String(buf, 0 ,len);
回复 使用道具 举报
这是结束标志的问题,while ((line=bufin.readLine())!=null)这一句要读到换行符,而且换出来的行没问题才会停止,而从s.getInputStream())这里出来的信息有可能没有换行符,或者如果接收到的是Linux客户端的信息呢?换行符根本和Window的不一样~~所以你该想个办法解决这个结束标志的问题~~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马