WEB中使用SOCKET的问题,请高手指点

loseme915 2011-11-22 08:57:15
系统结构是这样的,在服务器上安装了一个系统服务,该系统服务打开了一个SOCKET端口进行监听,在C/S结构下,已经实现了客户端到服务端的连接通讯,现在系统要求跨平台使用,原本系统是跑在WINDOWS平台上,现在需要兼容android系统,我打算加入一个WEB服务,然后通过浏览器在客户端那边使用SOCKET连接到服务程序进行网络通讯,系统是一个实时控制系统,网页上可能就是多个按钮,按下按钮以后发送控制命令,以及状态返回显示。

实现这些功能需要哪些技术,请指点一下,最好介绍一下大体方法。。。谢谢
...全文
182 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
loseme915 2011-11-23
  • 打赏
  • 举报
回复
非常感谢Crazywa,结了
Crazywa 2011-11-22
  • 打赏
  • 举报
回复

if (window.WebSocket) {
var ws = new WebSocket("ws://localhost:8080/WebSocketDemo/counter-socket");
ws.onmessage = function(e) {
var msg = e.data;
};

ws.onclose = function() {
};

ws.onopen = function() {
ws.send("Hello, Server!");
};
}else{
alert('浏览器不支持websocket');
}

开始的时候是http协议,服务器返回特定的header之后才会升级为socket长连接。
http://code.google.com/p/phpwebsocket/
这里是一个php实现的websocket协议,其中的$upgrade变量是要返回给html页面的header,页面接到这个header之后就讲http协议升级成websocket协议
Crazywa 2011-11-22
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 loseme915 的回复:]

引用 5 楼 crazywa 的回复:
引用 3 楼 loseme915 的回复:

引用 1 楼 crazywa 的回复:
JScript code


if (window.WebSocket) {
var ws = new WebSocket("ws://localhost:8080/WebSocketDemo/counter-socket");
ws.onmessage……
[/Quote]
是这个样子的。
即,用户通过浏览器访问web页面,页面中的javascript执行,打开websocket连接到socket服务器,socket回应一个升级协议(被成为websocket握手),就是那段字符串,浏览器接收到之后建立长连接,然后就可以实现双向双工通信。
http://www.kindcent.com/blog/view/vc-plus-plus-websocket-handshake 这里在网上帮你搜了一个C++实现的websocket握手,希望能帮到你。
WebSocket是 html5 的一部分,Android系统自带的浏览器是支持html5的 所以可以通过这个实现socket。但是如果考虑Android上其他浏览器,比如UC浏览器、IE手机版之类的,就不支持html5了,也就是说,如果需求里面要求考虑兼容性的话,楼主可能就要考虑用多种实现了。
目前电脑上的兼容性处理方案是,优先考虑websocket,若不支持,则添加flash,使用flash的socket,若还不支持,则采用ajax推送stream,若还不支持,则用ajax轮询。
这个方面的话,有个框架做的比较好,叫nodejs,其中有个模块叫socket.io,为开发者做好了兼容性处理,开发者只需要编码就可以了。
http://nodejs.org/
http://socket.io/
其中第一个网站左侧的demo链接就是一个socket聊天例子。
loseme915 2011-11-22
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 crazywa 的回复:]
引用 3 楼 loseme915 的回复:

引用 1 楼 crazywa 的回复:
JScript code


if (window.WebSocket) {
var ws = new WebSocket("ws://localhost:8080/WebSocketDemo/counter-socket");
ws.onmessage = function(e) {
var ……
[/Quote]
我这么理解是否正确,首先我用IIS或者其他WEB服务程序搭建一个站点,然后建立一个页面,页面中包含你提供的那个JScript,然后我用C写一个服务,监听那个端口,当客户端访问该页面的时候,JScript会被执行,那么就发起了连接,连接过来以后,我发送那个构造的字符串,这个时候客户端的网页代码中的WS是否就直接可以跟我用C写的服务进行通讯了?还是需要其他服务程序来支持?
Crazywa 2011-11-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 loseme915 的回复:]

引用 1 楼 crazywa 的回复:
JScript code


if (window.WebSocket) {
var ws = new WebSocket("ws://localhost:8080/WebSocketDemo/counter-socket");
ws.onmessage = function(e) {
var msg = e.data;
};

……
……
[/Quote]
监听上面的 ws:// 协议的端口,然后建立链接之后返回我给你的链接中的 $upgrade 变量后面的那一串字符串就可以了(php中字符串的连接符号是"."点号)。
flash的话有两个问题:一个是可能会不支持,另一个是flash与页面的元素之间交互的话涉及到js和as交互,复杂度提高了。
楼主如果还是不明白的话,可以上网搜一下java或者C#之类你熟悉的语言为websocket写服务器端代码。我只会写一些php的。。。
loseme915 2011-11-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 xiage 的回复:]
有个思路可以使用Flash来和server建立连接.
http://blog.csdn.net/xiage/article/details/4528877
[/Quote]
如果引入这个技术的话,后期是否会带来问题?Adobe已经宣布不再对移动设备做FLASH开发了。
还是谢谢这位兄弟
loseme915 2011-11-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 crazywa 的回复:]
JScript code


if (window.WebSocket) {
var ws = new WebSocket("ws://localhost:8080/WebSocketDemo/counter-socket");
ws.onmessage = function(e) {
var msg = e.data;
};

……
[/Quote]
谢谢兄弟,但还有不明白的地方,就是在网页里加入这些代码以后,服务器需要做什么支持么?我对WEB开发是门外汉。
xiage 2011-11-22
  • 打赏
  • 举报
回复
有个思路可以使用Flash来和server建立连接.
http://blog.csdn.net/xiage/article/details/4528877

87,901

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧