您的位置:首页 > 其它

socket客户端发送数据给服务端,服务端排序后返回

2013-01-26 11:45 561 查看
编写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();
}
}


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐