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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 邱成 中级黑马   /  2012-9-22 00:09  /  1503 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 邱成 于 2012-9-22 14:28 编辑

java socket问题,client端连接server,client端通过输入流获取server传过来的一段话,并打印,完后Client端退出JVM,但如下代码Client端不能退出,请高手帮忙分析一下。谢谢!!

Server端部分代码:
                 try {
                        ServerSocket ss = new ServerSocket(6666);

                        while (true) {
                                Socket socket = ss.accept();
                                OutputStream os = socket.getOutputStream();

                                String data = "恭喜你,连接服务器成功!!恭喜你,连接服务器成功!!恭喜你,连接服务器成功!!恭喜你,连接服务器成功!!"+
                                              "恭喜你,连接服务器成功!!恭喜你,连接服务器成功!!恭喜你,连接服务器成功!!"+
                                              "恭喜你,连接服务器成功!!恭喜你,连接服务器成功!!恭喜你,连接服务器成功!!恭喜你,连接服务器成功!!";
                                System.out.println(data.length());
                                
                                os.write(data.getBytes());

                        }

                } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }

Client端部分代码:
                BufferedInputStream bis=null;
                Socket socket=null;
               
                try {
                        socket=new Socket(InetAddress.getLocalHost(), 6666);
                        bis=new BufferedInputStream(socket.getInputStream());
                        
                        byte[] buffer=new byte[1024];
                        int length;
                        
                        while((length=bis.read(buffer, 0, buffer.length))!=-1){
                                String str=new String(buffer, 0, length);
                                System.out.println(str);
                        }
                        
                } catch (Exception e) {
                        // TODO: handle exception
                }finally{
                        try {
                                bis.close();
                                socket.close();
                        } catch (IOException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                        }
                        System.exit(0);
                }

评分

参与人数 1技术分 +1 收起 理由
王德升 + 1 赞一个!

查看全部评分

2 个回复

倒序浏览
package com.wenfengkeji.heima;

import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
        public static void main(String[] args)
        {
            try {
            ServerSocket ss = new ServerSocket(6666);

            while (true) {
                    Socket socket = ss.accept();
                    OutputStream os = socket.getOutputStream();

                    String data = "恭喜你,连接服务器成功!!恭喜你,连接服务器成功!!恭喜你,连接服务器成功!!恭喜你,连接服务器成功!!"+
                                  "恭喜你,连接服务器成功!!恭喜你,连接服务器成功!!恭喜你,连接服务器成功!!"+
                                  "恭喜你,连接服务器成功!!恭喜你,连接服务器成功!!恭喜你,连接服务器成功!!恭喜你,连接服务器成功!!";
                    System.out.println(data.length());
                    
                    os.write(data.getBytes());
                    os.close();   //关闭流资源就好了
                    socket.close();
            }

    } catch (IOException e) {
            e.printStackTrace();
    }


        }
}

评分

参与人数 1技术分 +1 收起 理由
王德升 + 1 赞一个!

查看全部评分

回复 使用道具 举报
你的服务端代码 红色标记为我修改的部分

Server端部分代码:
                 try {
                        ServerSocket ss = new ServerSocket(6666);

                        while (true) {
                                Socket socket = ss.accept();
                                OutputStream os = socket.getOutputStream();

                                String data = "恭喜你,连接服务器成功!!恭喜你,连接服务器成功!!恭喜你,连接服务器成功!!恭喜你,连接服务器成功!!"+
                                              "恭喜你,连接服务器成功!!恭喜你,连接服务器成功!!恭喜你,连接服务器成功!!"+
                                              "恭喜你,连接服务器成功!!恭喜你,连接服务器成功!!恭喜你,连接服务器成功!!恭喜你,连接服务器成功!!";
                                System.out.println(data.length());
                                
                                os.write(data.getBytes());
                               //在此句应加上一个结束标记
                               os.close(); //相当于给客户端发送了一个结束标记-1,此时当客户端读完服务端发送的数据后,再读到一个结束标记-1后,那么客户端的while语句就会结束,随之
                                               //整个客户端也就结束了。还有一种方式:把os.close()改成os.shutdownoutput();道理是一样的。
                        }

                } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }

评分

参与人数 1技术分 +1 收起 理由
王德升 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马