import java.net.*;
import java.io.*;
class Servicer implements Runnable
{
    private Socket s;
    public Servicer(Socket s)
    {
        this.s = s;
    }
    public void run()
    {
        try
        {
            InputStream ips=s.getInputStream();
            OutputStream ops=s.getOutputStream();
            
            BufferedReader br = new BufferedReader(new InputStreamReader(ips));
            //DataOutputStream dos = new DataOutputStream(ops);
            PrintWriter pw = new PrintWriter(ops,true);
            //pw.println(strLine);产生与特定平台相关的换行符,PrintStream产生的换行符都是\n
            while(true)
            {
                String strWord = br.readLine();
                //System.out.println(strWord +":" + strWord.length());
                if(strWord. equalsIgnoreCase("quit"))
                {
                    break;
                }
                System.out.println(strWord+":"+strWord.length());
                /*abd{backspace}c
                  c{backspace}dba */     //abc---->dba  abc:5
                String strEcho = (new StringBuffer(strWord).reverse()).toString();
                //dos.writeBytes(strWord +"---->"+ strEcho +"\r\n");
                //dos.writeBytes(strWord + "---->"+ strEcho +System.getProperty("line.separator"));            
                pw.println(strWord + "---->"+ strEcho );
            }
            br.close();
            //关闭包装类,会自动关闭包装类中所包装的底层类。所以不用调用ips.close()
            //dos.close();
            pw.close();
            s.close();
        }catch(Exception e)
        {
            e.printStackTrace();
        }
    }
}
public class ReverseServer
{
    public static void main(String [] args)
    {
        try
        {
            ServerSocket ss=new ServerSocket(8001);
            boolean bRunning = true;
            while(bRunning)
            {
                Socket s=ss.accept();
                new Thread(new Servicer(s)).start();
            }
            ss.close();//使用while(true)时编译不通过,提示此语句无法到达
        }catch(Exception e)
        {
            e.printStackTrace();
        }
    }
}
一个简单的tcp网络程序,用windows的telnet作为客户端,用telnet 127.0.0.1 8001连接上了,第一次输入字符时看不见输入的字符,按回车得到结果,第二次输入字符时却看见输入的字符
 
ab---->ba
agc
agc---->cga
ffdsekj
ffdsekj---->jkesdf
dfghhg
dfghhg---->ghhgfd

其中第一行没有字符显示,事实上输入了ab,其中没有箭头的为客户端输入,有箭头的为服务器端输出,问一下各位知不知道为什么第一次输入不回显字符,确切的说是只看见有一些像下划线的小方块在移动