-
UDTv4服务端和客户端通讯源码
2020-11-27 14:16:34本人开发的在用的UDTv4服务端和客户端通讯源码。本代码涉及较广,socket WEB网页请求、本地读取QQ号信息、本地读取网卡信息、数据存入本地文本(当数据库使用)、获取本地时间等 -
客户端之间通讯问题
2010-04-04 15:43:00最近想用c#做个通讯的程序,具体描述如下,望各位高手指点想实现一个有c/s的程序和b/s的程序通讯,在c/s程序中输入一个手机号后该程序把这个手机号发送到局域网内的另一台pc中b/s结构程序的的pop网页中,该pc机上的...最近想用c#做个通讯的程序,具体描述如下,望各位高手指点
想实现一个有c/s的程序和b/s的程序通讯,在c/s程序中输入一个手机号后该程序把这个手机号发送到局域网内的另一台pc中b/s结构程序的的pop网页中,该pc机上的网页根据实时发送来的手机号来更新网页中的相关信息!,这两个程序都是在局域网,局域网中有多个这样的操作终端器,其网络结构如图
其中相关数据都存储在总服务器上,下面区域的各个终端通过该区域的主机(1,2,3,4…)来访问总服务器的数据,而每一个主机好比是一个区域的服务器,下面的终端(D,E,F)分别是通过该区域中的主机来访问总服务器的数据,终端D,E,F分别是c/s的程序,显示器A,B,C是b/s的。如:区域主机1中终端显示器A中显示的数据是根据该区域中的终端D中手机号的变化来改变的,而显示器B中数据的变化是根据终端E中手机号的变化来改变的!其中b/s中的数据变化是实时根据终端的变化而变化的,不知道用那种实时通讯方式能达到这样的效果?web servers?,socket?,通道?,不知道那个方式能够实现,希望各位能给指点一下!
-
WebSocket集成XMPP网页即时通讯1:Java Web Project服务端/客户端Jetty9开发初探
2016-09-18 17:39:34Web 应用的信息交互过程通常是客户端通过浏览器发出一个请求,服务器端接收和审核完请求后进行处理并返回结果给客户端,然后客户端浏览器将信息呈现出来,这种机制对于信息变化不是特别频繁的应用尚能相安无事,但是...Web 应用的信息交互过程通常是客户端通过浏览器发出一个请求,服务器端接收和审核完请求后进行处理并返回结果给客户端,然后客户端浏览器将信息呈现出来,这种机制对于信息变化不是特别频繁的应用尚能相安无事,但是对于那些实时要求比较高的应用来说,比如说在线游戏、在线证券、设备监控、新闻在线播报、RSS 订阅推送等等,当客户端浏览器准备呈现这些信息的时候,这些信息在服务器端可能已经过时了。所以保持客户端和服务器端的信息同步是实时 Web 应用的关键要素,对 Web 开发人员来说也是一个难题。在 WebSocket 规范出来之前,开发人员想实现这些实时的 Web 应用,不得不采用一些折衷的方案,其中最常用的就是轮询 (Polling) 和 Comet 技术(AJAX)。
但AJAX有显著缺点:
1、浏览器需要不断的向服务器发出请求,然而HTTP request 的header是非常长的,里面包含的有用数据可能只是一个很小的值,这样会占用很多的带宽。
2、客户端和服务器端的编程实现都比较复杂,在实际的应用中,为了模拟比较真实的实时效果,开发人员往往需要构造两个 HTTP 连接来模拟客户端和服务器之间的双向通讯,一个连接用来处理客户端到服务器端的数据传输,一个连接用来处理服务器端到客户端的数据传输。
WebSocket API是下一代客户端-服务器的异步通信方法。该通信取代了单个的TCP套接字,使用ws或wss(ssl加密)协议,可用于任意的客户端和服务器程序。WebSocket目前由W3C进行标准化。WebSocket已经受到Firefox 4、Chrome 4、Opera 10.70、Edge以及Safari 5等浏览器的支持。
WebSocket API最伟大之处在于服务器和客户端可以在给定的时间范围内(IdleTime)的任意时刻,相互推送信息。WebSocket并不限于以Ajax(或XHR)方式通信,因为Ajax技术需要客户端发起请求,而WebSocket服务器和客户端可以彼此相互推送信息;XHR受到域的限制,而WebSocket允许跨域通信。
为方便开发,用了Jetty服务器,在网上很多例子都是基于jetty7.0的。但jetty9.0以后WebSocket的基类代码变化很多,于是自己动手开发,参考jetty官网:
http://www.eclipse.org/jetty/documentation/current/websocket-jetty.html#jetty-websocket-api
首先在Eclipse新建一个Dynamic web project
请自行下载安装jetty,另外需要在Eclipse安装Jetty工具,便于调试。
工程目录结构:
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <context-param> <param-name>debug</param-name> <param-value>false</param-value> </context-param> <session-config> <!-- 10 minutes --> <session-timeout>10</session-timeout> </session-config> <servlet> <servlet-name>MyServlet</servlet-name> <servlet-class>MyServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>MyServlet</servlet-name> <url-pattern>/wsexample</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> </web-app>
ant用惯了,懒得去查maven的dependencies了。
build.xml
jetty.lib.dir、deploy.path请自行修改
<?xml version="1.0" encoding="UTF-8"?> <project name="WebSocket" default="compile"> <property name="name" value="ws"/> <property environment="env"/> <property name="src.dir" value="src"/> <property name="web.dir" value="WebContent" /> <property name="build.dir" location="${web.dir}/WEB-INF/classes"/> <property name="jetty.lib.dir" location="D:/Software/jetty93/lib"/> <property name="dist.dir" location="dist"/> <property name="deploy.path" location="D:/Software/jetty93/webapps"/> <path id="compile.classpath"> <fileset dir="${jetty.lib.dir}"/> </path> <target name="init"> <mkdir dir="${build.dir}"/> <mkdir dir="${dist.dir}"/> </target> <target name="compile" depends="init"> <javac srcdir="${src.dir}" destdir="${build.dir}" includeantruntime="false"> <classpath refid="compile.classpath"/> </javac> <echo>Compilation completed</echo> </target> <target name="archive" depends="compile"> <war destfile="${dist.dir}/${name}.war" needxmlfile="false"> <fileset dir="${web.dir}"/> </war> <echo>Archive created</echo> </target> <target name="clean" depends="init"> <delete dir="${build.dir}"/> <delete dir="${dist.dir}"/> <echo>Cleaning completed</echo> </target> <target name="deploy" depends="archive"> <copy file="${dist.dir}/${name}.war" overwrite="true" todir="${deploy.path}"/> <echo>Archive deployed</echo> </target> </project>
index.html
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>你好!websocket</title> </head> <body> hello,WebSocket <script src="index.js"></script> </body> </html>
index.js
var ws = new WebSocket("ws://localhost:8080/ws/wsexample"); ws.onopen = function() { document.write("WebSocket opened <br>"); ws.send("Hello Server"); }; ws.onmessage = function(evt) { document.write("Message: " + evt.data); }; ws.onclose = function() { document.write("<br>WebSocket closed"); }; ws.onerror = function(err) { document.write("Error: " + err); };
其中 ws://localhost:8080/ws/wsexample 是WebSocket 服务器地址,是服务器端的Servelt,通过MyServlet.java实现
WebSocketServlet 类中 configure(WebSocketServletFactory factory) 用来注册socket处理类和设置连接时长,在这个时长内,保持长连接。
官网的定义:
http://www.eclipse.org/jetty/documentation/current/jetty-websocket-server-api.htmlMyServlet.java
暂不理会HTTP GET请求的处理.
import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.annotation.WebServlet; import org.eclipse.jetty.websocket.servlet.WebSocketServlet; import org.eclipse.jetty.websocket.servlet.WebSocketServletFactory; @WebServlet(name = "MyServlet", urlPatterns = { "/wsexample" }) public class MyServlet extends WebSocketServlet { private static final long serialVersionUID = 1L; @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.getWriter().println("HTTP GET method not implemented."); } @Override public void configure(WebSocketServletFactory factory) { factory.getPolicy().setIdleTimeout(10000); factory.register(MySocket.class); } }
MySocket.java 是socket具体处理类,写法在jetty7和jetty9有很大的不同。
import java.io.IOException; import org.eclipse.jetty.websocket.api.Session; import org.eclipse.jetty.websocket.api.annotations.OnWebSocketClose; import org.eclipse.jetty.websocket.api.annotations.OnWebSocketConnect; import org.eclipse.jetty.websocket.api.annotations.OnWebSocketError; import org.eclipse.jetty.websocket.api.annotations.OnWebSocketMessage; import org.eclipse.jetty.websocket.api.annotations.WebSocket; @WebSocket public class MySocket { Session WebSession; @OnWebSocketClose public void onClose(int statusCode, String reason) { System.out.println("Close: " + reason); } @OnWebSocketError public void onError(Throwable t) { System.out.println("Error: " + t.getMessage()); } //客户端连接 @OnWebSocketConnect public void onConnect(Session session) { WebSession = session; System.out.println("Connect: " + session.getRemoteAddress().getAddress()); try { session.getRemote().sendString("你好!客户端。我是服务端。<br>"); } catch (IOException e) { System.out.println("IO Exception"); } } //接收到客户端的文本消息 @OnWebSocketMessage public void onMessage(String message) { System.out.println("客户端消息: " + message); try { WebSession.getRemote().sendString("客户端,我收到这条消息了:" + message); } catch (IOException e) { System.out.println("IO Exception"); } } }
测试一下吧
客户端运行结果:
完整源代码下载 : source code
-
服务器和客户端的区别
2020-09-23 20:41:47服务端:服务端是为客户端服务的,服务的内容诸如向客户端提供资源,保存客户端...因特网发展以后,较常用的用户端包括了如万维网使用的网页浏览器,收寄电子邮件时的电子邮件客户端,以及即时通讯的客户端软件等。对服务端:服务端是为客户端服务的,服务的内容诸如向客户端提供资源,保存客户端数据。是实现游戏特色化的重要途径,也是最直接可以通过游戏表现出来的技术,比如你要修改某个NPC的参数,重加载后,在游戏内立刻体现出来。
客户端:客户端(Client)或称为用户端,是指与服务器相对应,为客户提供本地服务的程序。除了一些只在本地运行的应用程序之外,一般安装在普通的客户机上,需要与服务端互相配合运行。因特网发展以后,较常用的用户端包括了如万维网使用的网页浏览器,收寄电子邮件时的电子邮件客户端,以及即时通讯的客户端软件等。对于这一类应用程序,需要网络中有相应的服务器和服务程序来提供相应的服务,如数据库服务,电子邮件服务等等,这样在客户机和服务器端,需要建立特定的通信连接,来保证应用程序的正常运行。
客户端:在web中是以request对象存在的,发送请求给服务器端处理,具体的使用方法可以查找javaee的servletrequest以及其子类。
服务端:顾名思义是服务的,客户端发送的请求交给服务器端处理,是以response对象存在,服务器端处理完毕后反馈给客户端。
一般我们访问网站,都是客户端(浏览器、app)发出请求,然后对方服务器端(sina,sohu)响应,结果就是返回了页面路径给我们,我们再根据路径看到了网页。对应网站来说
你的网站存放的位置就是服务端,访客看到的就是客户端(比如浏览器)。
-
大部分 android 或者 ios 客户端 的网络通讯其实都是在 模仿 网页浏览器
2014-06-13 10:40:56ios客户端,和浏览器的 后台,其实都是同一个东西 web server ,都是使用的 下面的 http 规则 当你在浏览器输入 www.baidu.com 并回车,浏览器实际做的事情就是, 跟 百度服务器建立 tcp 连接,并将一下ASCII虽然很初级的知识,但是还是想 写篇文章来 声明一下,让后来者明白一下。
当我们 ios开发,使用 asihttprequest 或者 afnetwork 类库 进行 网络请求的时候,其实我们就是在模拟 浏览器 。
ios客户端,和浏览器的 后台,其实都是同一个东西 http server ,都是使用的 下面的 http 规则
当我们使用 asihttprequest 或者 afnetwork 向 www.baidu.com 发起get请求,其实是跟你在浏览器地址栏中输入 www.baidu.com 并回车效果是一样的 ,实际做的事情就是, 跟 百度服务器建立 tcp 连接,并将一下ASCII 文本发给了 百度服务器。
其他的 post 还有 上传 下载 一类的 asihttprequest 操作 也都 与 浏览器类似 ,不再赘述
GET / HTTP/1.1Host: www.baidu.comUser-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/536.30.1 (KHTML, like Gecko) Version/6.0.5 Safari/536.30.1Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language: zh-cnAccept-Encoding: gzip, deflateCookie: BDRCVFR[feWj1Vr5u3D]=I67x6TjHwwYf0; 这个 根据浏览纪录不同回有所变化Connection: keep-alive
浏览器收到的百度服务器返回的东西为下面的ascii 字符文本,浏览器会 解析下面的 http 相应报文 ,并把 html document 文档 显示在浏览器上:
HTTP/1.1 200 OKDate: Mon, 23 Dec 2013 06:23:00 GMTContent-Type: text/htmlTransfer-Encoding: chunkedConnection: Keep-AliveCache-Control: privateExpires: Mon, 23 Dec 2013 06:23:00 GMTContent-Encoding: gzipServer: BWS/1.1BDPAGETYPE: 2BDQID: 0x60479b2158dfb43dBDUSERID: 309616024Set-Cookie: BDSVRTM=132; path=/Set-Cookie: H_PS_PSSID=4486_1436_4634_4261; path=/; domain=.baidu.com
< html> <header><ti tle>百度一下你就知道<title/><header/><body>……^^^^^^这里省略一个网页 页面的 标签描述^^^^^^^^^^^< body/> <html/> -
java web xmpp_WebSocket集成XMPP网页即时通讯1:Java Web Project服务端/客户端Jetty9开发初探...
2021-02-13 02:28:09Web 应用的信息交互过程通常是客户端通过浏览器发出一个请求,服务器端接收和审核完请求后进行处理并返回结果给客户端,然后客户端浏览器将信息呈现出来,这种机制对于信息变化不是特别频繁的应用尚能相安无事,但是... -
websocket和web网页通讯插件
2018-01-30 16:10:21此插件的作用是可以把数据推送到网页端(原理是把C#d的程序当作服务器,网页端是一个客户端) -
客户端
2014-04-29 17:13:00因特网发展以后,较常用的用户端包括了如万维网使用的网页浏览器,收寄电子邮件时的电子邮件客户端,以及即时通讯的客户端软件等。 对于这一类应用程序,需要网络中有相应的服务器和服务程序来提供相应的服务,如... -
基于node.js的ws模块和net模块实现的浏览器与tcp客户端实时通讯小例程
2018-11-23 10:32:14适用于物联网设备的接入,网页端实时监控终端数据的场景项目运行新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格... -
了解基于客户端的网页应用程序,AJAX和ASP.NET 'Atlas'[翻译]
2006-09-29 10:01:00了解基于客户端的网页应用程序,AJAX和ASP.NET 'Atlas' 介绍 在这一些个年里,我们编写客户端程序都使用JavaScript。而近段时间主流的浏览器已经引入了一个特性—XMLHTTPRequest对象,它能够完成和服务器端的异步... -
WebSocket介绍和使用nodejs+socket.io搭建服务器和客户端
2018-05-30 10:29:31WebSocket介绍与原理 ...它实现了浏览器与服务器全双工通信(full-...网站上的即时通讯是很常见的,比如网页的QQ,聊天系统等。按照以往的技术能力通常是采用轮询、Comet技术解决。 HTTP协议是非持久化的,单向的... -
网页版本微信通讯协议分析
2014-03-03 22:56:00没事分析了下网页版本微信的通训协议,并且用java实现了登录,发送和接收消息,以后可以用来集成到后台,作为一个业务通知系统,就是每次登录需要扫码比较费事。 登录步骤: 1.打开首页,分配一个随机用户id, ... -
java websocket 桌面_怎样用java web和websocket实现网页即时通讯
2021-02-26 19:24:1062616964757a686964616fe59b9ee7ad9431333363396433现很多网站为了实现即时通讯,所用的技术都是轮询(polling)。轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出HTTP request,然后由服务器返回最新的数据... -
如何开启outlook邮箱的pop3和smtp_常用邮箱客户端设置指南
2020-12-06 08:27:37大部分电子邮件供应商都提供了网页端登录界面,或者和自有的手机端app结合的功能,但在通用的邮件客户端如Outlook或者手机端自带的及第三方邮件终端中配置邮件,仍然是一项非常重要的工作,可以免去每次收发邮件都要... -
企信通短信平台 客户端WEB网页版源代码 全协议网关
2011-11-18 16:06:05北信正通电信级短信平台MC-SMS在通讯模块、数据接受和发送模块、数据处理模块等方面据具有强大的海量处理能力。平台支持现行运营商的所有短信通信协议(包括Cmpp3.0、Cmpp2.0、Sgip1.2、Sgip2.0、Isag\Ismp以及其他... -
客户端开发和服务器端开发哪个有前途?自学跟培训的区别?
2021-02-03 16:22:20因特网发展以后,较常用的用户端包括了如万维网使用的网页浏览器,收寄电子邮件时的电子邮件客户端,以及即时通讯的客户端软件等。对于这一类应用程序,需要网络中有相应的服务器和服务程序来提供相应的服务,如... -
JAVA实现简单的websocket网页回声(网页与服务器即时通讯)
2019-10-24 10:52:25WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。 ... -
Google WebRtc Android 使用详解(包括客户端和服务端代码)
2019-09-14 07:35:42WebRTC(Web Real-Time Communication)实现了基于网页的视频会议,标准是WHATWG 协议,目的是通过浏览器提供简单的javascript就可以达到实时通讯(Real-Time Communications (RTC))能力。提供了视频会议的核心技术... -
ESFramework的最简化应用案例(控制台服务端和客户端,支持文本,振铃提醒,文件传输)
2019-03-16 14:10:26答:分布式通信的系统如:即时通讯,多人在线游戏、在线网页游戏、文件传送、数据采集、分布式OA系统、远程教育系统等。 问:平台要求? 答:直接构建在.NET Framework 2.0上. 问:具体怎么写? 答:引擎初始化(服务端) ... -
《ASP.NET AJAX程序设计——第II卷:客户端Microsoft AJAX Library与异步通讯层》前言...
2019-07-18 02:16:46在最近的一年以及今后的三五年内,我们有理由相信Web应用程序将受到更多开发者和用户的青睐。作为领路人Google的一系列基于Web的产品完全地颠覆了传统的网页概念,让用户甚至不敢相信基于浏览器的程序竟能实现如此... -
一个简单混合协议通讯列子,物联网和互联网通讯。
2019-04-20 08:05:34长连接和长连接通讯,长连接和短连接通讯。其他协议同理可得 Tcp: 代表硬件设备 WebSocket: 代表客户端 http: 代表网页 复制代码 本列子是基于one框架 github.com/lizhichao/o… 开发. 配置协议 监听端口 由于... -
通过网页实时查看远程主机特定socket通讯数据实现方法
2016-04-06 14:25:22我需要通过网页监视设备数据,所以我的思路是,我在我的主机上建立一个TCPservice,客服端通过HTML网页能访问我的主机,主机通过HTML把TCPservice和设备之间的通讯数据打印在HTML上给客户端看,需要什么语言或开发... -
Beetle在TCP通讯中使用AMF3协议和Flash通讯
2019-10-05 02:28:19Flash是现有网页中最流行的富客户端表现软件,所以组件支持Flash对象协议通讯也是非常有必要的事情.由于组件可以通过扩展协议分析器来兼容不同协议处理,所以可以通过使用FluorineFx就可以简单地实现基于AMF3的协议和... -
新浪微博iOS客户端架构与优化之路
2019-10-04 23:40:19与电商和通讯工具类App不同,微博客户端具有多信息流、内容丰富多样、对数据量和延迟敏感等特点。微博的信息流承载着文字、网页、照片、视频、直播等多样的内容形式,所以复杂信息流对团队的开发效率、App... -
第三方微信电脑客户端 微信布布 v1.1
2019-11-05 07:14:21请注意,这不是一个模拟器版的微信电脑客户端,它是一个由第三方出品,真正运行在windows平台上的微信电脑客户端。电脑版微信除了支持所有网页版的功能外,还增加了消息提醒等必备功能,立刻下载使用吧! 微信... -
微服务端口号设置_常用邮箱客户端设置指南
2021-01-13 08:02:55大部分电子邮件供应商都提供了网页端登录界面,或者和自有的手机端app结合的功能,但在通用的邮件客户端如Outlook或者手机端自带的及第三方邮件终端中配置邮件,仍然是一项非常重要的工作,可以免去每次收发邮件都要...