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();			
		}
	}

  

posted @ 2013-01-26 11:45  追梦de人  阅读(656)  评论(1编辑  收藏  举报