- 浏览: 144806 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (138)
- java基础 (26)
- 日常工作经验总结 (22)
- SVN学习与使用 (1)
- JBOSS学习与实践 (1)
- webService学习与实践 (4)
- redis学习与实践 (12)
- spring学习与实践 (0)
- hibernate学习与实践 (4)
- Struts2学习与实践 (0)
- mybatis学习与实践 (0)
- SpringMVC学习与实践 (0)
- jfreechart学习与使用 (0)
- javaScript学习与实践 (1)
- linux学习与实践 (4)
- Python学习与实践 (7)
- Oracle学习与实践 (21)
- Mysql学习与实践 (4)
- HTML5+CSS3学习与实践 (0)
- DIV+CSS学习与实践 (0)
- tomcat学习与实践 (1)
- mongodb学习与实践 (1)
- Git学习与实践 (2)
- hadhoop学习与实践 (0)
- shiro学习与实践 (0)
- CMS学习与实践 (0)
- Jmeter学习与实践 (0)
- java测试学习与实践 (2)
- bootstrap学习与实践 (0)
- jquery学习与实践 (0)
- Spring+hibernate+Struts2框架开发CRM项目 (0)
- JVM学习与实践 (0)
- 推荐学习网站 (1)
- 日常工作必备小技能 (4)
- Apache实践 (1)
- dubbo学习与实践 (2)
- Centos7 (6)
- 面试题目集合(收集各大网站) (4)
- 大数据学习 (1)
- 财富本 (2)
- 股票投资学习 (0)
- ZooKeeper (0)
- python切割集合里面相同的元素到一个集合里面 (1)
- 机器学习与深度学习 (1)
最新评论
-
魏叔武:
...
基于UDP协议的Socket编程
在我的文章的socket编程二中虽然实现面向对象的编程的思想,但是还有一个致命的缺点,无法实现多用户同时请求,一旦出现多用户的时候,便会报错,所以下面再继续对socket二进行修改
第一步:再次新建一个 java project,再增加一个类,多线程类,重写父类的run方法,实现处理用户的请求,如下图所示:
第二步:增加ServerThread类的代码如下:
第三步,User类的代码请看前面的socket二中的代码,没有修改。
第四步,修改SocketServer的服务端的代码后如下:
第五步:客户端的代码 loginClient代码没有修改,请查看前面的socket二中的客户端的代码:
第六步:运行服务器端的代码:如下图所示,服务器处于监听转态:
第七步,运行客户端的代码,如下图所示
第八步,此时再次查看服务器端打印出来的内容如下图所示:
第九步,我们修改客户端的User的名字为jack 密码也修改下,然后运行一次客户端的代码,再次查看服务器端的输出内容:
到此为止,我们就实现了利用socket面向对象编程,并且实现对用户同时发送请求,如果还想要好玩点,可以把服务器端的代码放到另外的一台电脑上运行,多个客户端在电脑上,同时发送请求,主要修改的地方时,客户端发送请求的ip要需改为对应服务器端电脑的ip地址即可。
第一步:再次新建一个 java project,再增加一个类,多线程类,重写父类的run方法,实现处理用户的请求,如下图所示:
第二步:增加ServerThread类的代码如下:
package com.socket.Thread; import java.io.IOException; import java.io.InputStream; import java.io.ObjectInputStream; import java.io.OutputStream; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import com.socket.entity.User; /** * 线程类 * * @author lfc * */ public class ServerThread extends Thread { // 创建一个和本线程相关的socket Socket socket = null; //当创建一个线程的时候,创建一个socket public ServerThread(Socket socket){ this.socket=socket; } //启动线程,重写父类的方法 public void run(){ System.out.println("服务器端准备好监听客户端的请求了。。。"); try { // 3:获得输入流 InputStream is = socket.getInputStream(); // 包装下变成字符流,实现可以对对象进行反序列话操作 ObjectInputStream ois=new ObjectInputStream(is); //创建输出流,用来给客户端提示的响应信息 OutputStream os = socket.getOutputStream(); PrintWriter pw = new PrintWriter(os); // 4:读取对象,获得对象 User user=(User)ois.readObject(); System.out.println("编号:"+user.getId()); System.out.println("年龄:"+user.getAge()); System.out.println("姓名:"+user.getName()); System.out.println("密码:"+user.getPassword()); //给客户端的回应信息 String response="客户端已经收到你们的信息了,Success"; pw.write(response); pw.flush(); // 5:关闭资源,注意,关闭的时候,要从底部开始往上依次关闭,顺序不能错! os.close(); pw.close(); ois.close(); is.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } }
第三步,User类的代码请看前面的socket二中的代码,没有修改。
第四步,修改SocketServer的服务端的代码后如下:
package com.socket.server; import java.io.IOException; import java.io.InputStream; import java.io.ObjectInputStream; import java.io.OutputStream; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import com.socket.Thread.ServerThread; import com.socket.entity.User; /** * 服务器端 * * @author lfc 对于这个客户端以及服务端,运行的时候,必须先服务端开始运行起来,开始监听客户端的程序请求 * 缺点:如果是登录程序中只能监听一个用户登录程序就会进入死亡转态了 * 为了解决多用户能够同时进行请求,需要用多线程序来改造代码 */ public class SocketServer { public static void main(String[] args) { try { // 1:创建一个服务端的ServerScoket,绑定端口开始监听 ServerSocket serverScoket = new ServerSocket(8800); // 2:使用accept()方法阻塞等待连接,获得新的连接 Socket socket = null; //加入一个统计来自客户端的请求的数目 int num=0; //一直处于监听的运行转态 while (true) { socket=serverScoket.accept(); ServerThread serverThread=new ServerThread(socket); //启动线程 serverThread.start(); num++; System.out.println("客户端请求的次数为:"+num); } } catch (IOException e) { e.printStackTrace(); } } }
第五步:客户端的代码 loginClient代码没有修改,请查看前面的socket二中的客户端的代码:
第六步:运行服务器端的代码:如下图所示,服务器处于监听转态:
第七步,运行客户端的代码,如下图所示
第八步,此时再次查看服务器端打印出来的内容如下图所示:
第九步,我们修改客户端的User的名字为jack 密码也修改下,然后运行一次客户端的代码,再次查看服务器端的输出内容:
到此为止,我们就实现了利用socket面向对象编程,并且实现对用户同时发送请求,如果还想要好玩点,可以把服务器端的代码放到另外的一台电脑上运行,多个客户端在电脑上,同时发送请求,主要修改的地方时,客户端发送请求的ip要需改为对应服务器端电脑的ip地址即可。
发表评论
-
jdk1.8切换1.7失效问题
2019-12-24 00:02 420项目需要jdk1.7,高了启动不了。会报错。 然而,我安装j ... -
map集合遍历
2017-09-05 16:10 522public class Test{ pu ... -
JVM调优总结(十)-调优方法
2017-07-30 21:45 0http://pengjiaheng.iteye.com/bl ... -
框架整合目标
2017-07-21 21:35 01, spring+hibernate+struts2+my ... -
java利用jxl.jar生成excel文档
2017-06-28 15:05 371java代码: package com.test.read ... -
利用jxl读取excel文件里面的内容
2017-06-28 14:23 468excel里面的内容: ... -
数组与集合互相转化
2017-04-21 20:20 369package com.ray.util; impo ... -
数组转化为集合
2017-04-16 21:07 849package com.ray.test; im ... -
快速排序
2017-03-31 14:32 375public class QuickSort { publ ... -
归并排序
2017-03-31 14:20 424public class mergeSort { ... -
希尔排序
2017-03-31 13:44 343public class shellSort { ... -
插入排序
2017-03-31 11:55 299插入排序的代码实现虽然没有冒泡排序和选择排序那么简单粗暴,但它 ... -
选择排序
2017-03-31 10:02 450选择排序是一种简单直观的排序算法,数据规模越小越好。唯一的好处 ... -
HTTP协议详解(真的很经典)
2017-03-27 14:14 381[b][b]HTTP是一个属于应用层的面向对象的协议,由于其简 ... -
多线程学习的几篇文章
2017-02-06 17:55 383Java多线程(一)、多线程的基本概念和使用 http:// ... -
java实现可变参数的方法
2017-02-06 17:16 365/** * * * @author Administr ... -
java实现日期的时间的加减
2017-02-06 17:11 1063/** * 时间的加减 * @author Adminis ... -
冒泡排序算法java
2016-12-07 15:22 432今天突然被人问到冒泡排序怎么解决,一时之间自己竟 ... -
FTP上传文件功能
2016-12-06 09:31 404ftp上传功能是很多的应用软件都必备的一个基础功能,特别是CM ... -
java基础之map集合遍历
2016-11-04 16:27 453由于map集合在平时用的时候都是直接get(key)取出单个值 ...
相关推荐
在本文中,我们将深入探讨MFC(Microsoft Foundation Classes)中的Socket编程,特别是如何实现一个TCP服务端与多个客户端之间的通信。MFC是微软提供的一套C++类库,用于简化Windows应用程序开发,其中包括对网络...
在本文中,我们将深入探讨如何使用C#编程语言通过Socket实现一个简单的聊天系统,使得服务器可以与多个客户端进行通信。Socket在计算机网络编程中扮演着重要角色,它提供了进程间通信(IPC)的能力,允许不同计算机...
5. **多线程或异步处理**:在实际应用中,服务器可能会同时处理多个客户端的连接请求,这可能需要使用多线程或者异步IO模型,如 select、poll 或者 epoll 等。 6. **错误处理**:在编写 Socket 程序时,需要对可能...
C#语言开发多线程Socket服务器端程序,实现一个服务器同时与多个客户端连接对话。这里,我们将详细讲解如何使用C#语言开发多线程Socket服务器端程序,实现一个服务器同时与多个客户端连接对话。 多线程Socket服务器...
当一个客户端连接到服务器时,服务器会为该连接创建一个新的线程,这样就能同时处理多个客户端的请求。Java中的ServerSocket类可以用于监听客户端的连接请求。 描述中提到的“上线提示”,意味着服务端需要记录在线...
在本文中,我们将深入探讨如何使用C#编程语言在Windows Forms(Winform)环境中实现一个服务端和多个客户端之间的通信。TCP(传输控制协议)和Socket是网络编程中常用的技术,用于建立可靠的、面向连接的数据传输。...
在IT领域,网络通信是不可或缺的一部分,而Socket编程则是实现这一目标的核心技术。TCP(Transmission Control Protocol)是一种面向连接的、可靠的传输协议,它保证了数据的有序、无损传输。本资源旨在帮助初学者...
总的来说,使用Socket和多线程技术,我们可以构建出能够高效处理多个客户端请求的服务器。这种模型广泛应用于各种网络服务,如Web服务器、邮件服务器、数据库服务器等。理解并熟练掌握这些技术对于任何IT专业人员来...
Socket聊天程序是一个基于C#编程语言实现的网络通信应用,它允许一个服务端与多个客户端进行实时交互。在本文中,我们将深入探讨Socket编程的基本概念、C#中的Socket类、服务器端与客户端的设计以及如何实现多用户...
标题中的“WPF-Socket服务端对多个客户端_新”表明这是一个更新过的版本,解决了之前版本的一些问题,使得服务端能够有效地处理来自多个客户端的数据传输。 Socket编程是一种基于网络通信协议(如TCP/IP)的应用...
本文将深入解析如何利用PHP中的Socket编程技术实现客户端与服务端之间的通信,通过分析提供的代码示例,我们将理解其工作原理、关键步骤以及在实际应用中的注意事项。 ### Socket编程基础 Socket编程是一种用于...
Java编程Socket实现多个客户端连接同一...Java编程Socket实现多个客户端连接同一个服务端代码是Java编程中的一种常见应用场景,使用Socket可以实现客户端和服务端之间的通信,并满足了多个客户端同时连接服务端的需求。
Java的`java.nio`包提供了非阻塞I/O的支持,可以同时处理多个客户端连接,提高了服务器的并发能力。 总结起来,基于TCP的Socket编程是构建网络应用的基础,涉及网络连接的建立、数据的可靠传输和通信链路的维护。...
标题 "c++实现socket:一个服务器对应多个客户端相互传递信息" 指的是利用C++的socket API创建一个服务器程序,该服务器可以同时处理来自多个客户端的连接请求,并允许这些客户端之间交换数据。这种设计模式通常称为...
- **接受连接(Accept)**:当有客户端请求连接时,服务端调用`accept`函数接收连接,并返回一个新的socket句柄用于和客户端通信。 4. **客户端编程**: - **连接(Connect)**:客户端使用`connect`函数向服务端...
"qt tcp 一个服务端对多个客户端"的场景常见于例如聊天应用、在线游戏或者数据同步等应用中。下面我们将详细探讨如何使用Qt实现这样的通信模型。 1. **TCP基础**:TCP是一种面向连接的、可靠的、基于字节流的传输层...
当有客户端请求连接时,使用`accept()`函数接收连接并返回一个新的socket描述符,用于处理客户端的数据。 ```c struct sockaddr_in client; int client_sock = accept(socket_desc, (struct sockaddr *)&client...
例如,服务器可能需要使用线程池或事件驱动模型来并发处理来自多个客户端的请求。 压缩包文件"TCPSocket"可能包含了示例代码,这些代码可以帮助初学者更好地理解TCP Socket编程的实践。通过阅读和运行这些代码,你...
- **多线程/异步处理**: 对于高并发场景,服务端可能需要使用多线程或异步操作来处理多个客户端请求,避免阻塞。 在提供的压缩包文件"SuperSocket"中,你应该能找到更详细的示例代码和文档,帮助你进一步理解和实践...
当有客户端连接时,会创建一个新的线程来处理这个连接,这样可以同时处理多个客户端请求。`ServerThread`类负责读取客户端发送的数据,打印出来,并将接收到的消息原样返回给客户端。 接着,我们看客户端的实现。...