wenshen22 发表于 2013-2-5 10:11:38

通信学习----循序渐进

1.通信循序渐进过程
  ①.能够收发字节的服务器端
package Serverv1;import java.io.InputStream;   import java.io.OutputStream;   import java.net.ServerSocket;   import java.net.Socket;   public class Server {       private InputStream in;       private OutputStream ou;         /**       * 创建服务器       *      * @param port       *            :端口号       */      public void setupServer(int port) {         try {               // 创建服务器套接字               ServerSocket ss = new ServerSocket(port);               while (true) {                   // 等待客户端的链接                   Socket sc = ss.accept();                   System.out.println("一个客户端接入");                   //得到输入输出流对象                   in=sc.getInputStream();                   ou=sc.getOutputStream();                                    String s="欢迎那个谁!";                   this.sendMsg(s);                   int t;                   //遇到回车结束读取                   while((t=in.read())!=13){                     System.out.println(t);                   }                   //关闭客户端的链接                   sc.close();               }         } catch (Exception ef) {               ef.printStackTrace();         }       }                     //发送信息的私有方法       private void sendMsg(String msg)throws Exception{         ou.write(msg.getBytes());         ou.flush();       }            //程序入口       public static void main(String args[]) {       Server s=new Server();         s.setupServer(12345);         }          } 

 
 
 
代码分析:
    1.由于程序中sc=ss.accept();//该处阻塞,所以即使是使用while(true){...}这等让人心惊胆战的语句也不用担心,但是要尽量把条件设置为一个变量如:boolean b=true;     while(b){....}
 
    2.private void sendMsg()方法:在该方法中的代码常常会被复用,所以在该类中直接定义一个私有方法无疑会是程序变得简化,但是还必须注意的一点是,private 关键字,像这种方法就是只在该类的内部使用,它本身是为简化该类内部的一些核心的方法而设计,而不希望在外部类中调用,所以使用pirvate 不就体现了面向对象的封装特性。
 
  
 
 
 
缺陷分析:
   》》当telnet客户端断开后,在服务器端会陷入死循环,不停的输出-1(可添加一个判断然后结束死循环)
 
   》》客户端发送过来的任何信息都将被解析为一个byte型的数字,然后输出,而不能还原成客户端本来信息的面目
 
   》》不能同时让多个客户端连接进来
 
  
 
 
 
 
 
页: [1]
查看完整版本: 通信学习----循序渐进