实现Client端功能的ClientApp.java原文件:import java.net.*;
import java.io.*;
import java.lang.*;public class ClientApp
{
  public static void main(String args[])
  {
    try
    {
       //创建通讯并且和主机Rock连接
       Socket cSocket=new Socket("192.168.100.188",8018);
       //打开这个Socket的输入/输出流
       OutputStream os=cSocket.getOutputStream();
       DataInputStream is=new DataInputStream(cSocket.getInputStream());       int c;
       boolean flag=true;       String responseline;       while(flag)
       {
           //从标准输入输出接受字符并且写如系统
           while((c=System.in.read())!=-1)
           {
              os.write((byte)c);
              if(c=='\n')
              {
                 os.flush();
                 //将程序阻塞,直到回答信息被收到后将他们在标准输出上显示出来
                 responseline=is.readLine();
                 System.out.println("Message is:"+responseline);
              }
           }
       }
       os.close();
       is.close();
       cSocket.close();    }
    catch(Exception e)
    {
      System.out.println("Exception :"+ e.getMessage());
    }
  }
}
实现Server端功能的ServerApp.java原文件:import java.net.*;
import java.io.*;public class ServerApp
{
  public static void main(String args[])
  {
     try
     {
        boolean flag=true;
        Socket clientSocket=null;
        String inputLine;
        int c;        ServerSocket sSocket=new ServerSocket(8018);
        System.out.println("Server listen on:"+sSocket.getLocalPort());        while(flag)
        {
          clientSocket=sSocket.accept();
          DataInputStream is= new DataInputStream(new BufferedInputStream(clientSocket.getInputStream()));
          OutputStream os=clientSocket.getOutputStream();          while((inputLine=is.readLine())!=null)
          {
             //当客户端输入stop的时候服务器程序运行终止!
             if(inputLine.equals("stop"))
             {
                flag=false;
                break;
             }
             else
             {
                System.out.println(inputLine);                while((c=System.in.read())!=-1)
                {
                  os.write((byte)c);
                  if(c=='\n')
                  {
                    os.flush();   //将信息发送到客户端
                    break;
                  }
                }
             }
          }
          is.close();
          os.close();
          clientSocket.close();        }
        sSocket.close();
     }
     catch(Exception e)
     {
       System.out.println("Exception :"+ e.getMessage());
     }
  }
}while((c=System.in.read())!=-1)
              os.write((byte)c);
              if(c=='\n')
这三个语句分别是什么意思?我看不懂还有,OutputStream os=cSocket.getOutputStream();有这样的语句,但OutputStream不是一个抽象类吗?抽象类不是不可以建立对象的么?
为什么这里会是这样?问题比较菜,请教啦

解决方案 »

  1.   

    while((c=System.in.read())!=-1)
    os.write((byte)c);
    if(c=='\n')从控制台读入用户输入的字符,直到遇到换行符,'\n'是换行的转义符至于抽象类和接口是干什么的,请自己看书,看书比你在这问快多了
      

  2.   

    while((c=System.in.read())!=-1) // System.in.read() 当返回 -1 时,表示流的结束if(c == '\n') // 如果读到的c是换行符os.write((byte)c);  //将c转成字节型写入输出流
    OutputStream os=cSocket.getOutputStream(); // 返回的是子类的实例, 读一下Socket类的Api就知道了
      

  3.   

    if(c == '\n')和if(c="\n")有何区别呢?
    while((c=System.in.read())!=-1)中,这个c在前面是定义为int c的.我在想,c=System.in.read()这个如果读取的文件里面的数据如果不是数值型的那这个c会是怎么样的?
    另外怎么样的情况下这个c会等于-1?
      

  4.   

    回复楼上的:当读到文件末尾的时候会返回-1,建议看一下read()方法
      

  5.   

    System.in.read()任何数据都是以byte读入
      

  6.   

    while((c=System.in.read())!=-1)当输入的字节流还没结束时
                  os.write((byte)c);就把它写到os里
                  if(c=='\n')判断c是否是换行符.
      

  7.   

    我是楼主
    还是不怎么懂
    if(c == '\n')和if(c="\n")有何区别呢? os.write((byte)c);中为什么要在c前面加个(byte)?
      

  8.   

    ''表示一个字符
    ""表示一个字符串
    如果写成if(c=="/n")我没试过,也许会报错
    os.write((byte)c);
    (byte)强制转换为byte类型,
    至于此处为什么这么写,请查一下OutputStream的write方法,这些细节的地方记不清了
      

  9.   

    楼上的,不好意思,在上面打错了.
    应该是if(c == '\n')和if(c='\n')有何区别呢?是不是后者成为赋值操作了?不能用来判断?
    还有一个问题,
    DataInputStream is= new DataInputStream(new BufferedInputStream(clientSocket.getInputStream()));这个语句中
    clientSocket.getInputStream()是返回InputStream类的子类么?具体是哪个子类呢?
    我看的这本书讲得很不详细,郁闷死了谢谢