日期:2014-05-20  浏览次数:20697 次

请教一个服务器端和客户端连接的问题,多谢!
服务器端代码:
Java code

import java.net.* ;
import java.io.* ;
public class EchoServer{
    public static void main(String args[]) throws Exception {    // 所有异常抛出
        ServerSocket server = null ;        // 定义ServerSocket类
        Socket client = null ;    // 表示客 户端
        BufferedReader buf = null ;    // 接收输入流
        PrintStream out = null ;        // 打印流输出最方便
        server = new ServerSocket(8888) ;    // 服务器在8888端口上监听
        boolean f = true ;    // 定义个标记位
        while(f){
            System.out.println("服务器运行,等待客户端连接。") ;
            client = server.accept() ;        // 得到连接,程序进入到阻塞状态
            out = new PrintStream(client.getOutputStream()) ;
            // 准备接收客户端的输入信息
            buf = new BufferedReader(new InputStreamReader(client.getInputStream())) ;
            boolean flag = true ;    // 标志位,表示可以一直接收并回应信息
            while(flag){
                String str = buf.readLine() ;        // 接收客户端发送的内容
                if(str==null||"".equals(str)){    // 表示没有内容
                    flag = false ;    // 退出循环
                }else{
                    if("bye".equals(str)){    // 如果输入的内容为bye表示结束
                        flag = false ;
                    }else{
                        out.println("ECHO : " + str) ;    // 回应信息
                    }
                }
            }
            client.close() ;
        }
        server.close() ;
    }
};



客户端代码:
Java code

import java.net.* ;
import java.io.* ;
public class EchoClient{
    public static void main(String args[]) throws Exception {    // 所有异常抛出
        Socket client = null ;    // 表示客 户端
        client = new Socket("localhost",8888) ;
        BufferedReader buf = null ;    // 一次性接收完成
        PrintStream out = null ;    // 发送数据
        BufferedReader input = null ;    // 接收键盘数据
        input = new BufferedReader(new InputStreamReader(System.in)) ;
        buf = new BufferedReader(new InputStreamReader(client.getInputStream())) ;
        [color=#FF0000]out = new PrintStream(client.getOutputStream()) ;[/color]        boolean flag = true ;        // 定义标志位
        while(flag){
            System.out.print("输入信息:") ;
            String str = input.readLine() ;    // 接收键盘的输入信息
            out.println(str) ;
            if("bye".equals(str)){
                flag = false ;
            }else{
                String echo = buf.readLine() ;    // 接收返回结果
                System.out.println(echo) ;    // 输出回应信息
            }
        }
        buf.close() ;
        client.close() ;
    }
};



问题:现在服务器端将键盘输入的内容发送到服务器的代码是“out = new PrintStream(client.getOutputStream()) ”这里有个问题:PrintStream括号里不应该是发送的位置么,应该是发送到服务器上,可是这个不还是发送到客户端么?
服务器端也有这个代码“out = new PrintStream(client.getOutputStream()) ”,这个是向客户端发送信息,没错吧?

------解决方案--------------------
探讨

谁能解释下client.getInputStream()的作用?谢谢