socket客户端发送数据给服务端,服务端排序后返回
编写Socket客户端和服务器程序,客户端发送一个包含多个数字的字符串给服务器,服务器排序后返回给客户端。 客户端执行: java NumberSender -i 192.168.1.171 -p 8888 -d 99|789|3|0|-66 要求服务器能连续不断的服务。 服务器端: package test.socket; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; public class Server { private int port = 5000; public Server1(int port){ this.port = port; } void start(){ ServerSocket server = null; Socket socket = null; DataInputStream reader = null; DataOutputStream writer = null; while(true){ try { server = new ServerSocket(port); socket = server.accept(); //监听端口 //输入流, 从客户端进入服务端的流对象 reader = new DataInputStream(socket.getInputStream()); //输出流, 从服务端去, 到客户端 writer = new DataOutputStream(socket.getOutputStream()); //从客户端读取信息 String line = reader.readUTF(); String[] tmp = line.split(","); double[] list = new double[tmp.length]; for(int i = 0;i<tmp.length;i++){ list[i] = Double.parseDouble(tmp[i]); } //选择排序 for(int i = 0; i < list.length; i ++){ int k = i; for(int j = i + 1; j < list.length; j ++){ if(list[j] <= list[k]) k = j; } if(k != i){ double temp = list[i]; list[i] = list[k]; list[k] = temp; } } StringBuffer tempList = new StringBuffer(); for(int i = 0; i<list.length;i++) tempList.append(list[i]+" "); //将信息返回客户端 writer.writeUTF(tempList.toString()); writer.flush(); } catch (NumberFormatException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally{ try { writer.close(); reader.close(); server.close(); } catch (IOException e) { e.printStackTrace(); } } } } public static void main(String[] args){ int port = 5000; String usageMsg = "格式错误,请在带参数的eclipse下按照格式输入:\r\n" + "java FileServer -p port"; if( 2 != args.length){ System.out.println(usageMsg); System.exit(1); } for(int i=0;i<args.length;i++){ if(args[i].equals("-p")||args[i].equals("-P")){ port = Integer.parseInt(args[i+1]); break; } } new Server(port).start(); } } 客户端: package test.socket; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.Socket; import java.net.UnknownHostException; public class Client{ private String ipAddress = "localhost";//默认ip是本机 private int port = 5000; //默认端口是5000 private String numSeq; public Client(String ipAddress,String port,String numSeq){ this.ipAddress = ipAddress; this.port = Integer.parseInt(port); this.numSeq = numSeq; } void start(){ Socket socket = null; try { socket = new Socket(ipAddress,port); //输入流, 从服务器端进入Client的流对象。 DataInputStream is = new DataInputStream(socket.getInputStream()); //输出流, 从Client出去, 到服务器端。 DataOutputStream os = new DataOutputStream(socket.getOutputStream()); //将读取信息发送给服务器端 os.writeUTF(numSeq); //读取从服务器返回的信息 String temp = is.readUTF(); System.out.println(temp); } catch (NumberFormatException e) { e.printStackTrace(); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally{ try{ socket.close(); } catch(IOException e){ e.printStackTrace(); } } } public static void main(String[] args){ //提示信息 String usageMsg = "请在带参数的eclipse下按照格式输入:\r\n" + " -i localhost -p port -d numSequence \r\n" + "numSequence分隔符为,"; if(6 != args.length){ System.out.println(usageMsg); System.exit(1); //异常终止 } String ipAddress = "localhost"; String port = "5000"; String numSeq = null; //从命令行获取参数 for(int i=0;i<args.length;i++){ if(args[i].equals("-i")||args[i].equals("-I")){ ipAddress = args[i+1]; } else if(args[i].equals("-p")||args[i].equals("-P")){ port = args[i+1]; } else if(args[i].equals("-d")||args[i].equals("-D")){ numSeq = args[i+1]; } } new Client(ipAddress,port,numSeq).start(); } }