技术开发 频道

Java 在Client/Server 网络中的应用


IT168技术文档】 
    三、编写服务器类Java程序
// Server.java import java.io.*; import java.net.*; public class Server extends Thread {     public final static int Default_Port=6543;     protectd int port;     protectd ServerSockt listen_socket; // 定义出错例程:如果出现异常错误,退出程序。 Public static void fail(Exception e, String msg) {     System.err.println(msg + ": " + e);     System.exit(1); } // 定义并启动服务器的Socket 例程,监听客户机的连接请求。 public Server(int port) { if(port == 0) port = Default_Port; this.port = port; try { listen_socket = new ServerSocket(port); } catch(IOException e) fail(e, "Exception creating server socket"); System.out.println("Server: listening on port" + port); This.start(); } /* 下面为服务器监听线程的主程序。该线程一直循环执行,监听并接受客户机发出的连接 请求。对每一个连接,均产生一个连接对象与之对应,通过Socket 通道进行通信。*/ public void run() { try     { while(true) {     Socket client_socket = listen_socket.accept();     Connection c = new Connection(client_socket);             } } catch(IOException e) fail(e,"Exception while listening for connections") } // 启动服务器主程序 public static void main(String args[]) {     int port = 0;     if (args.length == 1)     {     try port = Integer.parseInt(args[0]);     catch(NumberFormatException e) port = 0; } new Server(port); }                       // End of the main }                   // End of Server class //以下定义了Connection 类,它是用来处理与客户机的所有通信的线程。 class Connection extends Thread { protected Socket client;     protected DataInputStream in;         protected PrintStream out; // 初始化通信流并启动线程 public Connection(Socket client_socket) {         client = client_socket;     try     {      in = new DataInputStream(client.getinputStream());      out = new PrintStream(client.getOutputStream()); } catch(IOException e)   {     try client.close();         catch(IOException e2);     System.err.println("Exception while getting socket streram: " + e);    Return;   }  this.start; }                   // End of Connection method // 服务例程:读出一行文本;反转文本;返回文本。 public void run() {         String line;     StringBuffer revline; int len;     try {         for(;;) {             // Read a line                 line = in.readline();                     if(line == null) break;         // Reverse the line                 len = line.length();                 revline = new StringBuffer(len);         for(int i = len-1; i >=0; i--)         revline.insert(len-1-I;line.charAt(i));            // Write out the reverse line         out.println(revline);             } catch(IOException e); finally try client.close(); catch(IOException e2); } // End of run method } // End of Connection class 3、编写客户机类Java 程序 // Client.java import java.io.*; import java.net.*; public class Client extends {     public static final int Default_Port = 6543; // 定义出错例程     public static final void usage()     {     System.out.println("Usage: Java Client []");         System.exit(0); }     public static void main(String args[]) {     int port = Default_Port; Socket s = null; // 解析端口参数 if ((args.length != 1)&&(args.length != 2 )) usage(); if (args.length == 1)     port = Default_Port; else {     try port = Integer.parseInt(args[1]);     catch(NumberFormaatException e) usage(); } try{   // 产生一个Socket ,通过指定的端口与主机通信。   s = new Socket(args[0], port);   // 产生用于发出和接收的文本字符流   DataInputStream sin = new DataInputStream(s.getInputStream());   PrintStream sout = new DataInputStream(s.getInputStream());   // 从控制台读入字符流   DataInputStream in = new DataInputStream(System.in);    // 返回连接的地址和端口   ystem.out.println("Connected to"+s.getInetAddress()+":"+ s.getPort());     String line;     For(;;)     {         // 显示提示符         System.out.print(" >");         System.out.flush();         // 读入控制台输入的一行字符         line = in.readline();         if (line == null) break;         // 将接收的文本行送至服务器         sout.println(line);         // 从服务器接收一行字符         line = sin.readline();         // Check if connection is closed(i.e. for EOF)         if(line == null)         {          System.out.println("Connection closed by server.");          Break;         }     // 在控制台上显示接收的字符     System.out.println(line);   }  // End of for loop } / End of try catch(IOException e ) System.err.println(e); // Always be sure to close the socket finally {     try if(s != null) s.close();     catch(IOException e2); } }                       // End of main }               // End of Client
0
相关文章