问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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分了! 好像客户端提示输入姓名 和密码 然后 服务器端响应并返回题目的需求样。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...的话有啥影响,怎么听说对六年后换证有影响? ...重新刷学时吗,科一科二科三科四可以转校吗? 考完科一科二科三科四要多久 ...但是科目三的学时没有打满对以后有没有影响? 我的学时卡没有打过,一点都没有,不过我科一科二科三科四都全部考完了... 五行穿搭2021年10月8日五行属什么怎么穿衣 十月八日上到十月几日 ipadmini和iphone6是充电器不一样、还是数据线不一样呢?可以互相使用充 ... iphone6的插头可以通用ipad mini 吗 iphone6和ipad mini的充电器可以通用吗 求java公选课考题 答案 cb520 535 区别 AE制作动画的弹性效果 360借条借20万一个月还多少钱 用网络机顶盒看电视频道攻略 佛手蜜饯的功效与作用 我想知道怎么能让更多的人看到这个视频?必须在微信上才能发布吗?我 微信,如何把之前自己发朋友圈的图片&#47;小视频(仅限几个朋友看)换成公开所有人能看? 微信朋友圈里的视频怎么才能传到自己朋友圈里,让自己朋友圈里的人看到? 朔月望月上弦月下弦月,什么叫上弦月下弦月 博古架是干什么用的 博古架有什么作用 我想问一下一家公司上线和上市的区别? 骆驼寿命有多长 是哺乳动物吗 扬子江古诗意思 扬子江意思和全文 女孩的正常发育年龄是多大 我买的苹果三代怎么现在充不进电了这是怎么回事 为什么iphone冲不上电了 股票通威股份股吧东方财富 通威股份股票的股吧,600438股票的股吧 通威股份股吧电脑网页版 udian温控器sv温度150和124一直跳 怎么知道房东是不是调快了电表? 怎样能看出房东把电表调快了 BLANC是什么单词 在古蛙族活动的地区,方言均把人之子女称为“蛙”,即娲的子孙,对吗 二氧化硫的介绍 谁能给我介绍下二氧化硫和三氧化硫?都是什么情况下生成? 谁能给我介绍下二氧化硫和三氧化硫?都是什么情况下生成 这主板上的什么插头阿 拔都拔不掉! 猫和老鼠oppo账号如何找回 小学四年级语文七月的天山最后一句在文中起什么样的作用 公司亏损股东拒绝出资该怎样办 我的朋友真麻烦备课 为什么我觉得朋友就是一个麻烦的东西 我的好朋友六年级作文500字 北京理工大学应用统计专硕考试科目 微信名仙气好听 简单好听微信昵称 吃完饭之后一个小时之内可以K歌吗?这样对身体有好处吗? 刚吃完饭后能唱歌吗?会不会导致胃下垂?对身体有没有影响? 动物的体细胞有什么特征,怎样判断。