黑马程序员技术交流社区

标题: 网络编程TCP传输的一点疑惑 [打印本页]

作者: 冯兵兵    时间: 2012-2-29 22:54
标题: 网络编程TCP传输的一点疑惑
今天看毕老师的java基础视频中的网络编程部分,在TCP传输中,客户端和服务端同时存在Socket对象,在客户端和服务端可以同时调用getInputStream和getOutputStream方法获取流对象,那该怎么区分到底哪个是输入流,哪个是输出流呢?哪位可以结合下面毕老师的代码给解释一下:

import java.io.*;
import java.net.*;

class  TransClient
{
        public static void main(String[] args) throws Exception
        {
                Socket s = new Socket("192.168.1.254",10005);


                //定义读取键盘数据的流对象。
                BufferedReader bufr =
                        new BufferedReader(new InputStreamReader(System.in));


                //定义目的,将数据写入到socket输出流。发给服务端。
                //BufferedWriter bufOut =
                        //new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
                PrintWriter out = new PrintWriter(s.getOutputStream(),true);



                //定义一个socket读取流,读取服务端返回的大写信息。
                BufferedReader bufIn =
                        new BufferedReader(new InputStreamReader(s.getInputStream()));

                String line = null;
               
                while((line=bufr.readLine())!=null)
                {
                        if("over".equals(line))
                                break;
                       
                        out.println(line);
//                        bufOut.write(line);
//                        bufOut.newLine();
//                        bufOut.flush();

                        String str =bufIn.readLine();
                        System.out.println("server:"+str);
                       
                }

                bufr.close();
                s.close();


        }
}
/*

服务端:
源:socket读取流。
目的:socket输出流。
都是文本,装饰。



*/

class  TransServer
{
        public static void main(String[] args) throws Exception
        {
                ServerSocket ss = new ServerSocket(10005);

                Socket s = ss.accept();
                String ip = s.getInetAddress().getHostAddress();
                System.out.println(ip+"....connected");

                //读取socket读取流中的数据。
                BufferedReader bufIn =
                        new BufferedReader(new InputStreamReader(s.getInputStream()));

                //目的。socket输出流。将大写数据写入到socket输出流,并发送给客户端。
                //BufferedWriter bufOut =
                        //new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));

                PrintWriter out = new PrintWriter(s.getOutputStream(),true);

                String line = null;
                while((line=bufIn.readLine())!=null)
                {

                        System.out.println(line);

                        out.println(line.toUpperCase());
//                        bufOut.write(line.toUpperCase());
//                        bufOut.newLine();
//                        bufOut.flush();
                }

                s.close();
                ss.close();

        }
}




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