任务描述
需要做一个程序 对某一服务器运行的web server进行测算 看对提出的request做出相应的时间 并且在多个request同时提出时的响应时间
计划
因为java sdk中包含有比较全面的class能够对等多种协议的处理方法进行了封装 用起来比较方便 能够在比较短的时间内快速开发出这一测算工具
需要 个功能
a 因为不是仅仅对一个web server或者一个form进行测算 所以需要程序能够灵活处理 完成各种工作 我采用了配置文件的形式 让程序从配置文件中读取数据 并作相应动作
b 需要采用多线程方式 对同一个web server提交多次request
开发过程
(读者可以跟随这一过程 自己动手写代码 到全文结束 就能有一个完整可用的程序了)
主要的工作都有TestThread来完成 代码如下 class TestThread implements Runnable { Parameter param; TestThread(Parameter par) { param = par; } public void run() { long time = new Date() getTime(); try { URL target = param url; >Map<String,Integer> routes = new HashMap<String, Integer>();
//struts2中的ServletActionContext;
//使用session保存用户的浏览记录
ServletActionContextgetRequest()getSession()setAttribute("record",routes);
//访问路径
String route = "/indexhtml";
if (routescontainsKey(route)){
routesput(route,routesget("")+1);
}else{
routesput(route,1);
}
1保证每个数据都接收。即时没有处理完也接收,循环加,从0-199再循环,另一个线程处理,从当前标记A开始往下处理,没处理完一个A+1 B-1,接收线程没接收一个B+1,B一直循环,QUEUE[B]接收数据,一定要注意,这2个变量和你的数组要加锁,防止2个线程同时被修改
2保证处理,如果没处理完就不接收,加到B到上限就停止,但数据也是循环的存储,其他方法和上面一样,就是要注意加锁
以上说的方法是数据先进先出,如果想做先进后出的话,就每次处理当前A的数据,然后向前回溯就可以了业务需要这么复杂吗???如果你要实现服务器和客户端都可以向对方发送消息,而不等待对方应答,只需要把InputStream和OutputStream分别放在两个不同线程里就行了,即是说把接收流与发送流分别用一个线程监听处理。如果要实现不分客户端服务器的话,用UDP通信即可
补充回答:如果不涉及到MIME,只是收发简单文本邮件。就会比较简单。因为就像你说的,smtp和pop3协议就是文本格式的。你用Socket建立连接后,就像读文件一样,一行一行的读数据,然后按照协议分析数据格式。例如如果开始时USER那么后面可能跟的就是用户等。
就是一个字符串解析和匹配的过程。网上好像有这类代码,自己找一个学习一下。我以前用C在68k上作过,不是很难。不过代码已经没有了。
你的是邮件客户端,功能类似于outlook,foxmail等,如果你能上网,就不需要邮件服务器,直接用自己的邮件账号来测试,例如如果你有一个sina的邮件账户,就可以从sina服务器收发邮件。
不过为了测试方便,还是上网去收一个邮件服务器把。例如foxmail server等。网上有教程,可以配置好的。
对于编程,既然要求用socket编写,那么就要熟悉java的socket编程,这部分倒是很简单。可能还需要看看多线程部分。
另外,你需要学习一下, smtp和pop3这两个网络协议的内容,因为你需要解析这两个协议。如果需要收发代附件的,还需要看mime的内容,不过估计不需要。
其实java有自己的类库javamail,可以实现手法邮件,功能很强大。不过既然要求必须用socket,那就不能这个了。
说的太罗嗦了。总结一下:
1)配置邮件服务器,搭建测试环境
2)熟悉java的socket编程、 Swing编程(编写界面)、多线程(选用)
3)熟悉smtp和pop3的内容(内容很多,了解基本的就可以)
网上应该有类似代码,可以用来参考。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)