- 浏览: 467348 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (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 791一个http请求的详细过程 我们来看当我们在浏览器输入htt ... -
java udp socket实例
2010-12-06 12:28 7119客户端: package udp; import jav ... -
线程池实现tcp socket
2010-12-01 17:23 2879前面的程序,当一个客户端请求到来时,服务器端就会临时性的创建一 ... -
java tcp socket实例
2010-12-01 13:44 1624网络编程的基本模型就是客户端到服务器端模型,一段必须提供一个固 ... -
telnet协议(转)
2010-10-14 17:17 1137我们知道Telnet服务器软 ... -
whois协议(转)
2010-10-14 14:28 1359当我们预备建立一个Web站点,就必须向域名登记机构申请一个In ... -
java 网络协议(一)Tcp多线程服务器端编程
2010-10-14 11:33 54841,通用服务器代码: package multiThread; ... -
java 网络协议(一)UDP
2010-10-14 09:24 1474UDP测试程序,无需建立连接 package udp; ... -
java 网络协议(一)Tcp
2010-10-14 08:52 51361,简化的服务器端程序 package tcp; imp ... -
java 网络协议(一)InetAddress和Socket(含源码)
2010-10-14 08:24 18821,ip地址和主机名互换 package getip; ... -
ftp协议2(转)
2010-10-12 16:26 962FTP协议工作原理 FTP有 ... -
ftp协议(转)
2010-10-12 16:21 1263ftp协议 FTP协议将使用两 ... -
SMTP服务协议(转)
2010-10-11 15:31 1245SMTP服务概述 鉴于本课程的默认读者群是那些对Inter ... -
利用socket发送接收邮件(转)
2010-10-11 15:18 4188这是在网上摘的,执行接收邮件出现:530 Authentica ... -
jdk6.0从入门到精通-----chapter5网络编程 新I/O(含源码下载)
2010-09-21 10:13 1429本例向用户通过参数指定的主机端口发送一段请求报文,然后读取和打 ... -
jdk6.0从入门到精通-----chapter6--http
2010-09-14 16:32 944用httpconnection进行文件下载,建立一般的jav ... -
java自学===Filter类的应用,验证用户
2010-09-14 14:37 938Filter类 package com; import ... -
java自学===Filter类的应用,网站数量统计
2010-09-14 12:31 1939package filterStatistic; imp ... -
jdk6.0从入门到精通-----chapter5网络编程 udp套接字
2010-09-12 13:46 1158用到的主要类DatagramPacket,DatagramSo ... -
jdk6.0从入门到精通-----chapter5网络编程 tcp连接池
2010-09-10 18:07 984package pool; import java.ne ...
相关推荐
最近有个项目模块需要用到TCP Socket通讯,遇到了一个大坑,所以做了这个Demo。 本Demo主要实现了安卓(Android)TCP 客户端(Client)和服务器(Server)Demo的Socket通讯。以及对接硬件的项目数据在十六进制&&byte&&int...
"Tcp Socket client 实例"指的是一个使用TCP协议的客户端示例程序,它通过Socket接口与服务器进行数据交互。事件驱动是一种编程模型,它使得客户端程序在接收到特定事件(如连接建立、数据接收或发送完成)时能够...
本实例将通过两个文件——`server1.c`和`client1.c`,展示如何在Linux环境下使用C语言编写一个简单的TCP socket服务器和客户端。 **TCP套接字基础** 在Linux中,创建和操作TCP套接字主要涉及到以下几个函数: 1. ...
- `new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)`:用于创建一个新的Socket实例,指定IPv4地址族、流式Socket类型和TCP协议。 - `Connect()`:客户端用于连接到服务器的指定端口...
资源名:三菱Q系列PLC TCP socket通讯实例程序加技术文档 资源类型:程序源代码 源码介绍:PLC 为三菱Q06H和QJ71E71-100模块; Socket 测试软件; 参考手册:Q 系列以太网接口模块用户手册基础篇 适合人群:新手及...
Qt TcpSocket 通信实例
"基于TCP/IP的socket编程"是一个深入探讨如何使用socket接口进行网络通信的主题。Socket编程允许应用程序通过网络发送和接收数据,它是互联网上不同计算机之间交互的核心机制。 在给定的描述中,我们看到一个创新的...
总结起来,这个项目提供了一个使用QT5.1和Winsock在Windows 32位系统上实现TCPsocket通信的实例,对于学习和理解如何在QT环境下编写TCP客户端和服务器程序具有很好的参考价值。通过阅读代码、注释和实践,开发者可以...
2. 创建Socket实例:使用`new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)`创建一个Socket实例,其中`AddressFamily.InterNetwork`代表IPv4,`SocketType.Stream`表示使用TCP,`...
1. **初始化Socket对象**:通过`new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)`创建一个Socket实例。 2. **连接服务器**:使用`Connect`方法连接到远程主机。例如:`socket....
在这个“socket文件传输(TCP)源码实例”中,我们将深入理解如何利用TCP协议通过socket进行文件传输。TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,确保了数据的...
本资源"欧姆龙TCP UDP Socket网络通讯.zip"提供了关于如何利用TCP和UDP协议通过Socket进行欧姆龙PLC设备通信的实例。以下是关于这个主题的详细知识点: 1. **Socket基础**: - Socket是一种网络编程接口,用于在...
以下是一个关于"Linux C++ TCP Socket通信实例"的知识点详细说明。 首先,我们需要理解TCP Socket的基本概念。Socket是网络通信中的接口,它允许程序通过网络进行通信。在Linux系统中,我们使用`<sys/socket.h>`...
总结起来,"TCPSOCKET线程池通信客户端+服务器端示例代码"是.NET开发者学习如何利用TCP SOCKET进行高效、多线程通信的宝贵资源。通过理解和实践这个示例,开发者可以更好地掌握网络编程技术,为开发高性能的网络应用...
在这个"基于TCP的socket编程实例"中,我们将深入探讨如何使用socket API进行TCP通信,并通过"main"这个程序文件来理解其实现过程。 首先,TCP socket编程主要包括服务器端和客户端两部分。服务器端需要先启动,监听...
首先,创建Socket实例,指定协议类型为Tcp。在C#中,这可以通过以下代码实现: ```csharp Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); ``` 接着,我们...
1. 创建Socket实例。 2. 设置Socket属性为Stream Socket(SocketType.Stream)和TCP协议(ProtocolType.Tcp)。 3. 绑定到本地IP和端口,通常使用IPAddress.Any表示任何可用的IP,端口可以自定义,但需确保未被其他...
QT测试TCP通讯SOCKET实例程序是一个基于QT框架的示例应用,用于演示如何在C++环境中使用TCP/IP网络协议进行通信。QT是一个流行的开源跨平台应用程序开发框架,它提供了丰富的库支持,包括对网络编程的支持,使得...
本实例将详细介绍如何在C语言环境下创建和使用TCP套接字进行数据传输。 首先,我们需要理解TCP协议的基本概念。TCP是一种面向连接的、可靠的传输层协议,它提供全双工通信,确保数据的顺序传输和错误检测。在建立...
- 创建Socket实例:首先创建一个Socket对象,指定协议类型为SocketType.Stream,表示使用TCP协议。 - 绑定与监听:使用Bind方法绑定到特定的IP地址和端口,然后调用Listen方法开始监听连接请求。 - 接受连接:...