Java语言考题试题,请大家帮我做做。高分160分!主要用到多线程 字符串拆分 IO流,这个题目我没有做出来

~~~这个题目我没有做出来,请大家帮我写写。主要用到多线程字符串拆分IO流。实在感谢了160分!!如果觉得分数低给我说一下,我加分。有一点小需求如下:需求:1.请使用简单... ~~~这个题目我没有做出来,请大家帮我写写。主要用到多线程 字符串拆分 IO流。实在感谢了 160分!! 如果觉得分数低给我说一下,我加分。有一点小需求如下:
需求:
1.请使用简单通熟易懂的语句,别使用高深语句。
2.用面向对象的思想语句,就是class类下面最开始写所有要用的private的成员变量的引用;然后如果需要写一个构造器。然后在再一个方法内写主题语言。最后mian函数实例化调取这个方法。

编程题目:
假设有客户端向服务器发送格式相同的请求,客户端的字符串格式如下: GET/ ? user=Clientl&name=xxx&pwd=xxx HTTP/1.1
不同客户端发送的字符串中的user参数有可能不同,例如:
第一个客户端发送为
GET/ ?user=Clientl1&name=xxx&pwd=xxx HTTP/1.1
第二个客户端发送为
GET/ ?user=Clientl2&name=xxx&pwd=xxx HTTP/1.1
等等
~~
字符串中xxx随意设置,并不重要。
实现该服务器。
要求:服务器在接受到客户端发送上来的字符串后都做以下操作
以user的值作为propertie属性文件的名称;然后,把name和pwd作为属性文件的记录保存。
比如:客户端发送的字符串为:
GET/ ?user=Clientl1&name=xxx&pwd=xxx HTTP/1.1,则服务器需要创建属性文件Clientl1.properties。该文件内容如下
name=zhangsan
pwd=123456
展开
 我来答
百度网友582ebf573
推荐于2016-07-11 · 超过42用户采纳过TA的回答
知道小有建树答主
回答量:103
采纳率:100%
帮助的人:60.7万
展开全部

  主体由两个类来完成,一个服务器类,监听连接,并将来自客户端的连接加到一个队列中

  另一个是处理线程类,从队列中获取到连接,并从连接中读取数据写文件,然后响应客户端


  服务器类

 

package tt;

import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;

public class SimpleHttpServer {

//监听的服务器
private ServerSocket soc;

//监听的端口
private int port;

//待处理队列

private BlockingQueue<Socket> queue;

//创建服务器
public SimpleHttpServer(int port){

this.port = port;

this.queue = new ArrayBlockingQueue<Socket>(200);

}

//启动服务器
public void startServer() throws Exception{

this.soc = new ServerSocket(port);
System.out.println("服务器启动,监听" + this.port + "端口");

//启动处理线程
DealThread thread = new DealThread(this.queue);
thread.start();


//开始获取来自客户端的连接,将接收到的连接加入到队列中,供处理线程处理
while(true){
//接受到新的连接
Socket clientSocket = this.soc.accept();
//加入到队列中
queue.put(clientSocket);
}
}

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

SimpleHttpServer sh = new SimpleHttpServer(80);
sh.startServer();

}

}


 处理线程类

 

package tt;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.net.Socket;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import java.util.concurrent.BlockingQueue;

public class DealThread extends Thread{

private BlockingQueue<Socket> queue;

public DealThread(BlockingQueue<Socket> queue){

super();
this.queue = queue;
}

public void run(){

while(true){
Socket clientSocket = null;
BufferedReader br = null;
Map<String,String> paramMap = new HashMap<String,String>(); //用来保存上传参数的map,键名为参数名,键值为参数值,例如user=Clientl1,将保存为user键名,Clientl1为键值
try{

//从队列中获取到新的连接
clientSocket = queue.take();

//从连接中读取数据
br = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
String input = br.readLine(); //读取客户端的输入,按题目要求,应为: GET/ ?user=Clientl1&name=xxx&pwd=xxx HTTP/1.1
String[] inputArray = input.split(" "); //使用空格将字符串转为数组,第一项为GET/ 第二项为?user=Clientl1&name=xxx&pwd=xxx,第三项为HTTP/1.1

String str = inputArray[1]; //str即为  ?user=Clientl1&name=xxx&pwd=xxx

//去掉问号,即去掉首字母
str = str.substring(1);

//用“&”分隔符,再次将字符串转为数组,转化的结果为   user=Clientl1,name=xxx,pwd=xxx
String[] strArray = str.split("&");

for(String s : strArray){
//等号前面的部份作为键名,等号后面的部份作为键值 如user=Clientl1则user为键名,Clientl1为键值
paramMap.put(s.substring(0,s.indexOf("=")), s.substring(s.indexOf("=") + 1));
}

String user = paramMap.get("user");
String name = paramMap.get("name");
String pwd = paramMap.get("pwd");

//user或name或pwd任一项为空,则响应“报文格式不正确”给客户端
if(user == null || name == null || pwd ==null){
//响应客户端
clientSocket.getOutputStream().write("报文格式不正确".getBytes());
clientSocket.getOutputStream().flush();
}
else
{
//写perperties文件
Properties prop = new  Properties();
prop.setProperty("name", name);
prop.setProperty("pwd", pwd);
//创建文件
File file = new File("D:\\" + user + ".perperties");
prop.store(new FileOutputStream(file), null);

//响应客户端
clientSocket.getOutputStream().write("处理成功".getBytes());
clientSocket.getOutputStream().flush();
}


}catch(Exception e)
{
e.printStackTrace();
}finally{
//关闭资源
try{
if(br != null)
br.close();
if(clientSocket != null)
clientSocket.close();
}catch(Exception e)
{
e.printStackTrace();
}
}
}

}

}
追问
你先帮我写一下那个客户端类吧~谢谢你了~肯定采纳你的。我还提一个类似的考题问题,而且这个问题稍微还有一点难,还两个一样的问题,一共600分,你能有时间再帮我做做吗。三个问题一起采纳谢谢了。 因为小弟我的差所以,希望你们帮我写一下。知道网址我给你私信了。
wangzhe1991919
2015-10-14 · 超过18用户采纳过TA的回答
知道答主
回答量:116
采纳率:0%
帮助的人:55.1万
展开全部

package com.lonwin.fcos;


import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.util.Properties;


public class Test {


/**

* @param args

* @throws IOException 

*/

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

// TODO Auto-generated method stub

String s = " GET/ ?user=Clientl1&name=xxx&pwd=xxx HTTP/1.1";


String fileName = s.split("&")[0].split("user=")[1];


String name = s.split("&")[1].split("name=")[1];

String pwd = s.split("&")[2].split("pwd=")[1].split(" ")[0];


Properties prop = new Properties();

prop.put("name", name);

prop.put("pwd", pwd);


try {

FileOutputStream out;

out = new FileOutputStream("C:\\" + fileName + ".properties");

//为properties添加注释

prop.store(out, "注释");

out.close();

 

} catch (FileNotFoundException e) {

e.printStackTrace();


}


}


面向对象的思想你自己做吧

这段代码写的比较潦草,尤其是处理字符串那

我就是给你个大概的思路,具体的你自己想想写吧, 很简单

追问
麻烦你帮我写一下吧,我实在不会了。很恼火,头很昏 分加到200分了! 好像客户端提示输入姓名 和密码 然后 服务器端响应并返回题目的需求样。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式