- 浏览: 139066 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (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 383项目需要jdk1.7,高了启动不了。会报错。 然而,我安装j ... -
map集合遍历
2017-09-05 16:10 484public 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 337java代码: package com.test.read ... -
利用jxl读取excel文件里面的内容
2017-06-28 14:23 425excel里面的内容: ... -
数组与集合互相转化
2017-04-21 20:20 323package com.ray.util; impo ... -
数组转化为集合
2017-04-16 21:07 798package com.ray.test; im ... -
快速排序
2017-03-31 14:32 347public class QuickSort { publ ... -
归并排序
2017-03-31 14:20 376public class mergeSort { ... -
希尔排序
2017-03-31 13:44 314public class shellSort { ... -
插入排序
2017-03-31 11:55 267插入排序的代码实现虽然没有冒泡排序和选择排序那么简单粗暴,但它 ... -
选择排序
2017-03-31 10:02 423选择排序是一种简单直观的排序算法,数据规模越小越好。唯一的好处 ... -
HTTP协议详解(真的很经典)
2017-03-27 14:14 351[b][b]HTTP是一个属于应用层的面向对象的协议,由于其简 ... -
多线程学习的几篇文章
2017-02-06 17:55 355Java多线程(一)、多线程的基本概念和使用 http:// ... -
java实现可变参数的方法
2017-02-06 17:16 332/** * * * @author Administr ... -
java实现日期的时间的加减
2017-02-06 17:11 1017/** * 时间的加减 * @author Adminis ... -
冒泡排序算法java
2016-12-07 15:22 398今天突然被人问到冒泡排序怎么解决,一时之间自己竟 ... -
FTP上传文件功能
2016-12-06 09:31 371ftp上传功能是很多的应用软件都必备的一个基础功能,特别是CM ... -
java基础之map集合遍历
2016-11-04 16:27 411由于map集合在平时用的时候都是直接get(key)取出单个值 ...
相关推荐
实现方式:所有的Socket 编程方式全部采用Windows API 函数调用,未采用封装好的C++ socket 类进行实现,适用于底层编程的参考和学习,采用多线程的方式实现并发处理,支持多个客户端同时访问服务端 适用范围和参考...
一个Socket实例代表了TCP连接的一个客户端,而一个ServerSocket实例代表了TCP连接的一个服务器端,一般在TCP Socket编程中,客户端有多个,而服务器端只有一个,客户端TCP向服务器端TCP发送连接请求,服务器端的...
2)服务端程序能响应单个或任意多个客户端连接请求;服务端能向单个客户发送消息,支持群发消息给所有客户端; 3)通信的双方具备异常响应功能,包括对方异常退出的处理。如果客户端退出,服务器有响应;反之亦然。 ...
2)服务端程序能响应单个或任意多个客户端连接请求;服务端能向单个客户发送消息,支持群发消息给所有客户端; 3)通信的双方具备异常响应功能,包括对方异常退出的处理。如果客户端退出,服务器有响应;反之亦然。
掌握 C 语言形式的 Socket 编程接口用法,能够正确发送和接收网络数据包 开发一个客户端,实现人机交互界面和与服务器的通信 开发一个服务端,实现并发处理多个客户端的请求程序界面不做要求,使用命令行或最简单的...
范例,首先,服务端有一个进程(或多个进程)在指定的端口等待客户来 连接,服务程序 等待客户的连接信息,一旦连接上之后,就可以按设计的数据交换方法和格式进行数据传输。 客户端在需要的时刻发出向服务端的连接...
根据自定义的协议规范,使用 Socket 编程接口编写基本的网络应用软件。掌握 C 语言形式的 Socket 编程接口用法,...开发一个服务端,实现并发处理多个客户端的请求。程序界面不做要求,使用命令行或最简单的窗体即可。
Socket编程:基于Socket套接字,通过TCP或UDP协议进行网络通信。通过创建Socket对象,程序可以在网络上进行数据传输和通信。 URL和URLConnection:Java提供了java.net.URL和java.net.URLConnection等类,用于访问...
支持多个客户端接入,实现聊天室基本功能 2.启动服务,建立监听端口等待客户端连接 3.使用epoll机制实现并发,增加效率 4.客户端连接时,发送欢迎消息,并存储连接记录 5.客户端发送消息时,根据消息类型,广播...
通过TServerSocket和TClientSocket组件开发客户端和服务端程序,ServerSocket组件可以同时接受一个或多个...因此,一个服务器端可以为多个客户端服务。 压缩包里包含编译后的exe,还有完整的客户端和服务端源代码。
该项目是在linux下采用C/C++编程,基于TCP协议,服务器端采用多进程长连接的socket的通信方式,并采用开源的负载均衡器G6作为客户端请求与服务端响应的中间件分发器。考虑到服务器端如果每接收到一个请求fork一个...
从原理上解释一下采用Socket接口的网络通讯,这里以最常用的C/S模式作为范例,首先,服务端有一个进程(或多个进程)在指定的端口等待客户来连接,服务程序等待客户的连接信息,一旦连接上之后,就可以按设计的数据...
首先从原理上解释一下采用Socket接口的网络通讯,这里以最常用的C/S模式作为范例,首先,服务端有一个进程(或多个进程)在指定的端口等待客户来连接,服务程序等待客户的连接信息,一旦连接上之后,就可以按设计的...
在网络编程中分客户端和服务端两种角色,比如通过打开浏览器访问到挂在Web软件上的网页,从程序角度上来看,即客户端(浏览器)发起了一个Socket请求到服务器端,服务器把网页内容返回到浏览器解析后展示。在客户端和...
首先从原理上解释一下采用Socket 接口的网络通讯,这里以最常用的 C/S 模式作为范例,首先,服务端有一个进程(或多个进程)在指定的端口等待客户来 连接,服务程序等待客户的连接信息,一旦连接上之后,就可以按...
本文首先介绍了可以实现局域网监控基础Socket编程的基本概念及其调用的方法,多线程的相关概念及套接字的使用方法,接着从建立Socket套接字开始,完成各功能模块的系统实施,主要包括从鼠标锁定,到关机,到时时截屏...
①主要功能模块: 开发此系统的需求源于:用户与用户之间点对点的交流,信息传送,文件共享。 该系统包含服务端与客户端 ... 该系统用的是C/S架构,MVC三层设计模式 ,里面主要用到了Socket编程以及多线程。
一种基于Java企业内部及时通讯软件设计 摘要:基于Socket的局域网通讯软件能为企业局域网提供一种安全、快速的通信机制, 使用Java Swing 技术设计系统界面,以Derby作为数据库服务器,用Socket编程技术实现网络通讯...
NetWorkHomeWork 计算机网络作业 初次涉及网络编程,多有不足之处。 题目一: 实现最基础的Socket...客户端可请求服务端可以提供的文件列表,客户端请求服务端的某个文件,服务端将该文件传输给客户端保存 服务器端:
客户端请求,将客户端请求词封装成任务,再用锁机制 将任务添加到线程池中的任务队列中。工作线程通过互 斥量和条件变量访问任务队列,实现线程同步,使得线 程池有序工作。 每个工作线程独立完成自己的任务:到...