- 浏览: 469613 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (272)
- java基础 (59)
- struts (8)
- spring (8)
- 数据库 (8)
- java 网络编程 (29)
- hibernate (3)
- JavaScript (10)
- 日志管理 (2)
- jsp (4)
- servlet (7)
- xml (4)
- ajax (2)
- web service (4)
- 算法与数据结构 (13)
- java 反射机制 (11)
- java 泛型 (3)
- java I/O (8)
- java 线程 (12)
- JavaEE (6)
- java解惑 (33)
- 工具 (5)
- MyEclipse编程实践 (1)
- OSGI (2)
- 设计模式 (9)
- 正则表达式 (0)
- EJB (3)
- Ubuntu linux (6)
- Android (1)
- web前端 (2)
- 找工作 (1)
- SCA (1)
- maven (1)
- 缓存 (1)
- json (1)
- javamail (1)
- 工作笔记 (2)
最新评论
-
霜花似雪:
博主可以分享一下源码吗?
使用maven构建web项目实例 -
王庆波-行:
很好的demo!
memcache使用实例 -
surpassno:
大写的牛逼
java可视化显示内存使用情况 -
zhulin0504:
怎么访问NetEcho.html页面呀???
applet与servlet的网络通信 -
springdata:
java多线程实例demo源代码下载:http://www.z ...
java多线程例子
上一篇的程序服务器端只能接受一个客户端请求,本篇改为模拟多客户端程序
客户端:
服务器端:
只是加了一个while循环
简单的多客户端处理,加一个死循环即可,但如此服务器会阻塞用户的请求,即是服务器在没有处理完当前用户请求的情况下,是不能处理其他用户请求的,见改进的ModifiedServer
改进的server
虽然实现了多用户并发访问,但每次客户端访问,服务器端就要建立连接,花销较大,下篇请见用线程池实现套接字编程
客户端:
package socket; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; import java.net.UnknownHostException; public class MultiClient { public static void main(String[] args) { MultiClient mc = new MultiClient(); mc.sendSubsequentRequest(); } private void sendSubsequentRequest() { for(int i=0;i<100;i++){ //模拟多个并发用户向客户端同时发送请求,其实在一台机子上还是有先后顺序的 new Thread(new RequestSender()).start(); } } } class RequestSender implements Runnable { @Override public void run() { try { callServer(); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } private void callServer() throws UnknownHostException, IOException { int reqInt = 23; Socket s = new Socket("localhost", 8888); // 客户端给出IP和端口号 InputStream is = s.getInputStream(); OutputStream os = s.getOutputStream(); DataInputStream dis = new DataInputStream(is); DataOutputStream dos = new DataOutputStream(os); dos.writeInt(reqInt); dos.flush(); int serverInt = dis.readInt(); System.out.println("server answer " + reqInt + "*18 = " + serverInt); dis.close(); dos.close(); } }
服务器端:
只是加了一个while循环
package socket; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; //简单的处理多客户端 public class MultiServer { public MultiServer() { } public static void main(String[] args) { MultiServer ms = new MultiServer(); try { ms.listen(8888); } catch (IOException e) { e.printStackTrace(); } } private void listen(int port) throws IOException { ServerSocket server = new ServerSocket(port); while (true) { Socket socket = server.accept(); InputStream is = socket.getInputStream(); OutputStream os = socket.getOutputStream(); DataInputStream dis = new DataInputStream(is); DataOutputStream dos = new DataOutputStream(os); int receiveInt = dis.readInt(); // 读取客户端请求 System.out.println("The message from client is:" + receiveInt); dos.writeInt(receiveInt * 18); // 返回client端 dos.flush(); // 强制清空缓冲区 dos.close(); dis.close(); is.close(); } } }
简单的多客户端处理,加一个死循环即可,但如此服务器会阻塞用户的请求,即是服务器在没有处理完当前用户请求的情况下,是不能处理其他用户请求的,见改进的ModifiedServer
改进的server
package socket; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; public class ModifiedServer { /* *处理客户端请求的线程类 *//////////////////////////////////////////// class RequestHandler implements Runnable { //处理客户端请求的类定义在服务器端类主体的内部 private Socket socket = null; public RequestHandler(Socket s) { this.socket = s; } @Override public void run() { processRequest(); } private void processRequest() { try { InputStream is = socket.getInputStream(); OutputStream os = socket.getOutputStream(); DataInputStream dis = new DataInputStream(is); DataOutputStream dos = new DataOutputStream(os); int receiveInt = dis.readInt(); // 读取客户端请求 System.out.println("The message from client" +clientCount+ "is:" + receiveInt); dos.writeInt(receiveInt * 18); // 返回client端 dos.flush(); // 强制清空缓冲区 dos.close(); dis.close(); is.close(); delay(200l); //模拟业务处理延时 clientCount--; //处理完成,减少client端的数量 } catch (IOException e) { e.printStackTrace(); } } private void delay(long l) { try { Thread.sleep(l); } catch (InterruptedException e) { e.printStackTrace(); } } } //////////////////////////////////////////////////// int clientCount = 0; //客户端并发请求动态数目 static int port = 8888; int maxClientCount = 200; public static void main(String[] args) { ModifiedServer ms = new ModifiedServer(); try { ms.listenServer(port); } catch (IOException e) { e.printStackTrace(); } } //服务器监听方法 private void listenServer(int port) throws IOException { ServerSocket server = new ServerSocket(port); System.out.println("Server is listening port " + port); while (true) { clientCount++; if (clientCount <= maxClientCount) { Socket socket = server.accept(); //没有客户端请求到来时,系统将在此阻塞 new Thread(new RequestHandler(socket)); } else { System.out.println("服务器所能承受的客户端请求最大并发数已经到上限!"); } } } }
虽然实现了多用户并发访问,但每次客户端访问,服务器端就要建立连接,花销较大,下篇请见用线程池实现套接字编程
发表评论
-
计算机网络知识
2011-06-01 16:19 799一个http请求的详细过程 我们来看当我们在浏览器输入htt ... -
java udp socket实例
2010-12-06 12:28 7124客户端: package udp; import jav ... -
线程池实现tcp socket
2010-12-01 17:23 2886前面的程序,当一个客户端请求到来时,服务器端就会临时性的创建一 ... -
java tcp socket实例
2010-12-01 13:44 1639网络编程的基本模型就是客户端到服务器端模型,一段必须提供一个固 ... -
telnet协议(转)
2010-10-14 17:17 1145我们知道Telnet服务器软 ... -
whois协议(转)
2010-10-14 14:28 1363当我们预备建立一个Web站点,就必须向域名登记机构申请一个In ... -
java 网络协议(一)Tcp多线程服务器端编程
2010-10-14 11:33 54891,通用服务器代码: package multiThread; ... -
java 网络协议(一)UDP
2010-10-14 09:24 1486UDP测试程序,无需建立连接 package udp; ... -
java 网络协议(一)Tcp
2010-10-14 08:52 51421,简化的服务器端程序 package tcp; imp ... -
java 网络协议(一)InetAddress和Socket(含源码)
2010-10-14 08:24 18921,ip地址和主机名互换 package getip; ... -
ftp协议2(转)
2010-10-12 16:26 971FTP协议工作原理 FTP有 ... -
ftp协议(转)
2010-10-12 16:21 1269ftp协议 FTP协议将使用两 ... -
SMTP服务协议(转)
2010-10-11 15:31 1254SMTP服务概述 鉴于本课程的默认读者群是那些对Inter ... -
利用socket发送接收邮件(转)
2010-10-11 15:18 4193这是在网上摘的,执行接收邮件出现:530 Authentica ... -
jdk6.0从入门到精通-----chapter5网络编程 新I/O(含源码下载)
2010-09-21 10:13 1436本例向用户通过参数指定的主机端口发送一段请求报文,然后读取和打 ... -
jdk6.0从入门到精通-----chapter6--http
2010-09-14 16:32 957用httpconnection进行文件下载,建立一般的jav ... -
java自学===Filter类的应用,验证用户
2010-09-14 14:37 946Filter类 package com; import ... -
java自学===Filter类的应用,网站数量统计
2010-09-14 12:31 1945package filterStatistic; imp ... -
jdk6.0从入门到精通-----chapter5网络编程 udp套接字
2010-09-12 13:46 1167用到的主要类DatagramPacket,DatagramSo ... -
jdk6.0从入门到精通-----chapter5网络编程 tcp连接池
2010-09-10 18:07 992package pool; import java.ne ...
相关推荐
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
内容概要:本文介绍了一种基于周期移位图卷积(CS-ViG)的新型框架——CS-ViG-UNet用于红外小弱目标检测的方法,它采用了图像块为节点构建的视觉图神经网络来增强对小弱目标识别的能力。研究提出了周期移位稀疏图注意力机制,以及结合了CNN与U形架构的CS-ViG模块,实现了对小弱目标的有效捕获,并在公共数据集Sirst-Aug和IRSTD-1K上达到了先进的性能。在硬件条件如RTX3090加速下,模型能够高效地进行大批量的实时检测任务。 适合人群:从事计算机视觉、特别是小目标检测领域的科研人员和技术开发者。 使用场景及目标:应用于复杂背景下,需要快速精确定位并分离出小弱目标的任务场合。适用于军事、航空航天等高端应用场景,以及民用安防监控设备等需要可靠小目标检测能力的需求。 其他说明:文中提供的链接可以访问更多的项目资料和技术支持页面。此外,在实际测试环境下展示了该方法与其他现有算法相比较的优越性和创新点。同时指出了当前仍存在的限制,比如多物体场景下的误检率以及高亮背景干扰等问题,并给出了改进方向。
两个微信体育课程预订小程序-Fitnessw_xApp
风储调频,储能调频,保证真实,模型如图,保证正常使用
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
并离网逆变器仿真模型 逆变器PQ控制,Vf控制,无功能量发生器SVG,有源电力滤波器APF仿真模型
一种磁盘分区恢复软件,可以从损坏的磁盘映像hand_disk中恢复可能的分区表
计算光波导的电磁模式matlab代码.rar
了解 MATLAB 图像处理的基础知识MATLAB代码.rar
labview源码参考示例,可供参考学习使用
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
labview源码参考示例,可供参考学习使用
内容概要:本文提出了一种新的深度学习架构——HCF-Net(Hierarchical Context Fusion Network),旨在提升红外图像中小目标物体的检测精度和鲁棒性。HCF-Net采用了多尺度特征提取、平行补丁注意力模块(PPA)、维度感知选择性集成模块(DASI)以及多扩张通道细化器(MDCR),有效解决了由于红外图像低对比度及背景复杂所导致的小目标检测困难的问题。该研究对SIRST数据集进行了广泛实验评估,表明HCF-Net性能优于现有主流传统和深网方法。HCF-Net通过优化下采样过程中的特征表示与细节捕捉,大幅提高了对微小目标位置识别及形状边界描写的准确性。此外,研究团队还在论文中探讨了相关领域的最新进展和其他基于卷积神经网络的技术。 适合人群:对于计算机视觉尤其是遥感成像与自动目标识别有浓厚兴趣的研究人员和技术爱好者。同时适用于从事国家安全、军事侦察、灾害监测等领域工作的专业人士。 使用场景及目标:应用于各种需要精确探测小型目标物的应用场合,比如海上搜索救援行动、消防监控、边境安防巡逻、天文观测系统等。其目的是提高这些应用场景中设备的工作效率和服务质量。 其他说明:文中还介绍了大量关于红外线成像特性的基础知识,并详细阐述了几种传统的滤波器和机器学习算法用于解决这一任务时面临的局限性;强调了深度学习相对于传统方法所具有的明显优势。
STM32驱动lcd1602显示adc采集电压显示程序源码。 主控芯片采用stm32f103,包括程序源码和protues仿真protues版本8.8. 需要做AD转的不要错过。 程序源码注释详细,非常适合单片机开发的人员。
微信小程序彩票页面_厚江
labview源码参考示例,可供参考学习使用
单相逆变器仿真模型 电压电流双闭环 双闭环PI控制 LC滤波 SPWM调制 输出交流电压220V 50Hz 图2为模型输出电压电流 功率波形 Matlab Simulink
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。