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