黑马程序员技术交流社区

标题: socket问题 [打印本页]

作者: 邱成    时间: 2012-9-22 00:09
标题: socket问题
本帖最后由 邱成 于 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);
                }
作者: 谭立文    时间: 2012-9-22 00:29
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();
    }


        }
}

作者: 汪小照    时间: 2012-9-22 00:38
你的服务端代码 红色标记为我修改的部分

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();
                }






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