JAVA socket客户端和服务端 排列数字

来源:互联网 发布:php数据库优化 编辑:程序博客网 时间:2024/06/08 10:24

package socket;

import java.io.*;
import java.net.*;
import java.util.Arrays;
/**
 * 服务端接收字符串,将包含的数字排序;
 * @author liu
 *
 */
public class EchoServer {
  private int port = 8888;       //监听8888端口
  private ServerSocket serverSocket;
  public EchoServer() throws IOException {
  serverSocket = new ServerSocket(port);
  System.out.println("服务器启动");
 }
 public void service() {
  
   while (true) {
    
    Socket socket = null;
    try {
  
     socket = serverSocket.accept();
     
     Thread workThread = new Thread(new Handler(socket));
     
     workThread.start();
     
     }
    
     catch (IOException e){
      
      e.printStackTrace();
     }
     
   }
   
 }

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

  new EchoServer().service();

 }

}

class Handler implements Runnable {

 private Socket socket;

 public Handler(Socket socket) {

  this.socket = socket;

 }

 private PrintWriter getWriter(Socket clientRequest) throws IOException {
  DataOutputStream writer = new DataOutputStream(clientRequest
    .getOutputStream());
  PrintWriter output = new PrintWriter(writer, true);
  return output;
 }

 private String getReader(Socket clientRequest) throws IOException {

  DataInputStream reader = new DataInputStream(clientRequest
    .getInputStream());
  
  String str_1 = reader.readUTF();
  reader.close();
  return str_1;
 }
/**
 * 接收字符串,把字符串接收后,转换为数字然后排序,
 * @param msg
 * @return 返回int[]
 */
 public int[] echo(String msg) {

  String[] str = msg.split("//|");

  for (int i = 0; i < str.length; i++) {
   // System.out.println(str[i]);
  }

  int[] number = new int[str.length];

  for (int i = 0; i < str.length; i++) {
   number[i] = Integer.parseInt(str[i]);
   // System.out.println(number[i]);
  }
  Arrays.sort(number);

  // String s=sb.toString();
  // writer.writeUTF("/n");
  return number;
 }

 public void run() {
  PrintWriter printwiter=null;
  try {

   System.out.println("New connection accepted " +

   socket.getInetAddress() + ":" + socket.getPort());


   printwiter = getWriter(socket);

   String msg = getReader(socket);

   StringBuffer sb = new StringBuffer(echo(msg).length - 1);
   for (int i = 0; i <= echo(msg).length - 1; i++) {
    sb.append(String.valueOf(echo(msg)[i]) + " ");
   }
   printwiter.println(sb);
   System.out.print(sb);
  

  }
  catch (IOException e) {

   e.printStackTrace();

  } finally {
   if(printwiter != null) printwiter.close();
    
   try {
    
    if (socket != null)
     socket.close();
   }
    catch (IOException e) {
    e.printStackTrace();
   }       
  }
 }
}

客户端:

 

package socket;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.UnknownHostException;
/**
 * 客户端发送包含多个数字的字符串给服务器;
 * @author liu
 *
 */

 public class EchoClient{
  
  
  public static void main(String[] args) throws Exception, UnknownHostException, IOException{
   BufferedReader input=null;
   InputStreamReader reader=null;;
   DataOutputStream writer=null;;
   Socket s=null;
   try { 
          s = new Socket(args[1],Integer.parseInt(args[3]));
          reader=new InputStreamReader(s.getInputStream());
          writer=new DataOutputStream(s.getOutputStream());
          input =new BufferedReader(reader);
          //output=new PrintWriter(writer,true);
          writer.writeUTF(args[5]);
          // System.out.print(args[5]);   
          System.out.println(input.readLine());
    }
    catch (IOException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
     }
    finally{
     if(writer != null)   writer.close();
     if(input != null )   input.close();
     if(reader != null)   reader.close();       
     if(s != null)   s.close( );
     }
  
  }

}

 

原创粉丝点击