Java语言考题试题,请大家帮我做做。高分160分!主要用到多线程 字符串拆分 IO流,这个题目我没有做出来
发布网友
发布时间:2022-10-04 03:59
我来回答
共2个回答
热心网友
时间:2023-10-13 03:47
主体由两个类来完成,一个服务器类,监听连接,并将来自客户端的连接加到一个队列中
另一个是处理线程类,从队列中获取到连接,并从连接中读取数据写文件,然后响应客户端
服务器类
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分,你能有时间再帮我做做吗。三个问题一起采纳谢谢了。 因为小弟我的差所以,希望你们帮我写一下。知道网址我给你私信了。
热心网友
时间:2023-10-13 03:47
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分了! 好像客户端提示输入姓名 和密码 然后 服务器端响应并返回题目的需求样。