输入一个东东、返回这个东东的大写并输出。 

import java.io.*;
import java.net.*;
public class SocketLearning  {

    public static void main(String[] args) throws Exception   {

        new Thread(new TransClient()).start();
        new Thread(new TransServer()).start();

//        System.out.println(InetAddress.getLocalHost().getHostAddress());

    }
}


class TransClient implements Runnable
{
    public void run()
    {
        try {
            mymethod();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public void mymethod() throws Exception
    {
        Socket s = new Socket("199.234.8.31",10022);

        //定义读取键盘数据的流对象。
        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".contentEquals(line))
                break;

//            out.println(line);   //在这里用了 printWriter 代替了 bufferedWriter、  这一句话 代替了下面的三句话。
            bufOut.write(line);
            bufOut.newLine();
            bufOut.flush();

            String str = bufIn.readLine();
            System.out.println("Server::"+str);
        }
        bufr.close();
        s.close();
    }
}
/*
 * 服务端:  源:socket读取流、 目的:socket输出流。  都是文本、装饰一下
 */
class TransServer implements Runnable
{
    public void run()
    {
        try {
            mymethod();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public void mymethod() throws Exception
    {
        ServerSocket ss = new ServerSocket(10022);

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

        String line = null;
        while((line=bufIn.readLine())!=null)
        {
            bufOut.write(line.toUpperCase());
            bufOut.newLine();
            bufOut.flush();
        }
        s.close();
        ss.close();



    }
}
/*
该例子出现的问题 :
现象:   客户端和服务端都在莫名的等待 。
为什么呢?
因为客户端和服务端都有阻塞式方法。这些方法没有读到结束标记,就会一直等,而导致两段都在等待。而导致两段都在等待
*/
01-06 09:48