黑马程序员技术交流社区

标题: 求指点,客户端和服务端间数据传输。 [打印本页]

作者: xiayoutianxia    时间: 2014-8-28 12:16
标题: 求指点,客户端和服务端间数据传输。
客户端发送字符串,由服务端接收并反转然后返回给客户端。
客户端
public static void main(String[] args) {
                // TODO Auto-generated method stub
                Socket s =null;
                BufferedReader bufr=null;
                PrintWriter out =null;
                BufferedReader bufin=null;
                try
                {        //创建客户端对象
                        s = new Socket("192.168.0.101",9007);
                        while(true)
                        {        //键盘录入
                                bufr=new BufferedReader(new InputStreamReader(System.in));
                                //创建一个输出流
                                out =new PrintWriter(s.getOutputStream());
                                //创建一个获取输入流
                                bufin=new BufferedReader(new InputStreamReader(s.getInputStream()));
                                String line =null;
                                while((line=bufr.readLine())!=null)
                                {        //定义一个结束标记
                                        if("over".equals(line))
                                                break;
                                        //向服务端发送数据
                                        out.println(line);
                                        String info=bufin.readLine();
                                        //打印服务端返回的数据
                                        System.out.println("info="+info);
                                }
                        }
                }
                catch(Exception e)
                {        //异常处理
                        throw new RuntimeException("错误");
                }
                finally
                {
                        if(s!=null)
                        try
                        {        //关闭客户端
                                s.close();
                        }
                        catch(Exception e)
                        {
                                throw new RuntimeException("错误");
                        }
                }
        }

服务端
public static void main(String[] args)throws Exception {
                //创建一个服务端对象并与客户端连接
                ServerSocket ss=new ServerSocket(9007);
                Socket s =ss.accept();
                //获取客户端的地址
                String ip =s.getInetAddress().getHostAddress();
                System.out.println(ip+".......is connected");
                try
                {
                        while(true)
                        {        //创建一个输出流       
                                BufferedReader bufin =
                                        new BufferedReader(new InputStreamReader(s.getInputStream()));
                                //常见一个获取输入流
                                PrintWriter out = new PrintWriter(s.getOutputStream());
                                String line =null;
                                while((line=bufin.readLine())!=null)
                                {       
                                        //打印从客户端获得的数据
                                        System.out.println(line);
                                        //建立一个缓冲区用于存储从客户端获得的数据
                                        StringBuilder sb=new StringBuilder(line);
                                        //将获得的字符串进行反转并打印
                                        String re=sb.reverse().toString();
                                        System.out.println(sb+"......"+re);
                                        //将反转的的字符串返回给客户端
                                        out.println(re);
                                }
                        }
                }
                catch(Exception e)
                {        //异常处理
                        throw new RuntimeException("错误");
                }
                finally
                {
                        if(s!=null)
                        try
                        {        //关闭客户端
                                s.close();
                        }
                        catch(Exception e)
                        {
                                throw new RuntimeException("错误");
                        }
                        if(ss!=null)
                        try
                        {        //关闭服务端
                                ss.close();
                        }
                        catch(Exception e)
                        {
                                throw new RuntimeException("错误");
                        }
                }
        }

可以 建立连接,但是客户端发送数据服务端接收不到啊。

作者: 咸菜+萝卜干    时间: 2014-8-28 12:22
继续看视频呗{:3_47:}
作者: 依然超级赛亚人    时间: 2014-8-28 12:43
本帖最后由 依然超级赛亚人 于 2014-8-28 12:51 编辑

PrintWriter的构造参数列表中应该有"true",没有的话就没刷新。还有点问题,你的这个程序输入over根本不会结束,客户端和服务端明明一层while就可以了,为什么两层?这样的话你结束了输入但外层没有结束,还在等,输入over不会停止。把这两个外层的while都去了吧。再试试。

作者: xiayoutianxia    时间: 2014-8-28 12:53
依然超级赛亚人 发表于 2014-8-28 12:43
PrintWriter的构造参数列表中应该有"true",没有的话就没刷新。还有点问题,你的这个程序输入over根本不会 ...

多谢,问题已经解决了。




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