解决方案 »
- 数据库连接超时后自动连接另一台数据库服务器
- 正则表达式的问题
- 水晶报表ActiveX打印控件安装后无法使用
- .net 皮肤是否可以约定html空间的样式
- 如何在aspx中读取session的值
- 在Application_Start里用过Timer和StreamWriter定时生成文件
- 有想业余赚点外快的朋友吗???(要熟悉WEBGIS和JAVASCRIPT,才有机会哈)
- ieunit 获取富文本编辑器中的文本框(textarea)的事件
- DataGrid自定义分页问题?
- 朋友们,帮我看看那个朋友教我的关于数据库 表 和字段命名规范的方法对吗?
- ASP.net后台如何控制网页显示的位置
- [200] 两个问题
IPAddress serverIp = IPAddress.Parse("192.168.0.3");
IPEndPoint iep = new IPEndPoint(serverIp, 2222);
socket.Connect(iep); //连接服务器
TcpListener listener = new TcpListener(new IPEndPoint(IPAddress.Any, 2222)); //2222端口
public FrmReceive()
{
InitializeComponent();
listener.Start(); //开始侦听端口
Thread acceptThread = new Thread(new ThreadStart(AcceptWorkThread));
acceptThread.Start(); //接受客户端请求
}
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/adsdassadfasdfasdf/archive/2010/05/11/5579602.aspx
不知道函数回调行不行,正在想办法.
寻求更好的解决方法3楼贴的那些TCP侦听的代码我都已经实现了.还是谢谢你哦.
建议 采用Comet模式进行吧
也就是4楼说的服务器推的方法可以百度相关例子
我会考虑这种方法的.
不过据我所知,WCF可以实现我要的功能,只是我还没有学到这方面的资料,呵呵.
其实这样也有一个问题,web服务器和你服务器上去调用单片机的程序算不上一个整体,单机程序从单片机上获取到反馈信息后,把这个信息,通过web服务器推动到客户端,就这个过程就很难实现!还不如让客户端定时的上服务器请求一次,看看是否有反馈信息!只要请求时间设置合理,效率不会太低的
也感谢10楼的朋友建议的Comet模式.
按照你的思路,那么解决方法就是:
当客户端(WebForm)发送一个命令后,Winform负责把单片机传回来的数据在某个介质中存储起来,然后Webform定时读取介质中的数据了?我现在在想能不能把Webform和Winform合成一个整体,
我以前看到另一篇帖子中说,可以做成一个Web服务来侦听,然后Webform来请求这个Web服务,这样就可以不用Winform,直接在Webform中处理就行了,但是我不知道具体应该怎样做,我希望做过类似项目的朋友提供一个完整的思路,谢谢.
可惜的是,第一种因为采用长连接,会很影响并发,第二种因为是个定时的轮询,所以也比较耗资源.
因为HTTP的协议限制,目前好像就这有这2种算法,当然貌似用flash或者activeX可以实现socket,这个我没了解过.还有,winform和web服务的通信 你可以用数据库,也可以在web端(我这里不是指服务 windowsservice,而是你通过IIS部署的web网站)写一个socket(用WCF也行),与winform连接进行交互.一般现成的例子,你可以去找 web客服 这种项目. 当然他的服务端(指客服人员操作部分)并不一定是用winfrom实现的.参考:
http://blog.csdn.net/21aspnet/archive/2008/11/20/3341805.aspx
然后会根据服务器发送来的命令返回一些数据.如果不做成Web的,那还是比较简单的.
但是要做成Web的话,好伤脑筋哦,虽然我知道问题不是很复杂的,但是已经困扰我一个月了
我也想到过Webform和winform间用Socket来通信这样的话,
Winform要建立一个TCP侦听来处理单片机的数据,
还要建立一个SOCKET侦听来处理Webform的请求,
哈哈,不错,不过学习了一阵WCF,暂时还没有解决方法,
不过我相信用WCF可以解决,
1.web和单片机无关,web只和数据库关联,间隔请求服务器,刷新数据.
2.平时 服务器(Winform程序)侦听单片机发来的数据 都组织入库。
3.服务器捕捉到web请求后,联系单片机,单片机返回的数据入库。下次web请求查库就能取到这条。 web中嵌个iframe或ajax来处理间隔请求.
我就写Webform,Winform,还有单片中的通信模块
单片机的数目不定,但是在通信报文中可以根据单片机的出厂日期来区分,这个通信规约中可以处理.如果用数据库来暂存不行的话,我看要想一下Winform和Webform间也用Socket来通信了不过我想不用Socket,用WCF应该也可以的啊,正在研究中....
哈哈,我又来啦.
早上顶一顶帖子,不腰疼,也不头晕了.希望可以得到各位朋友用WCF解决这个技术的建议,
或者是不能用WCF解决的理由.谢谢.
但是还没有解决 服务器把结果回传给客户端的问题,因为当服务器发送命令给单片时,是需要一定的等待时候才能收到数据的,所以不知道怎样处理这个等待过程,
用while循环空等肯定不行,
如果用消息侦听的话,可以把侦听到的消息返回给客户,
但是,因为客户端很多,存在并发问题,又不知道怎样区分这些客户端,把这些结果准确地返回.汗...
要继续努力啊.
B/S的结构注定无法实时的通信,除非使用server push技术,使用ajax方案定时去取服务器的数据应该是可以接受的。
首先从客户端浏览器发出指令给服务器,由于服务器无法立即返回结果,所以开启一个线程去执行耗时的指令,再返回一个等待消息给客户端。线程处理完成后把结果存到session中,客户端再通过ajax去取结果,最终呈现给用户。
比较常见的处理是轮询的方式,但个人觉得效率太低,就是把反馈的结果放到一公共区域,然后由你的WINFORM服务器轮询,有数据了,则分析数据,根据数据发送给单片机端。单片机和WINFORM可以用SOCKET。至于你说异步回调,可以尝试下
1〉winform负责同单片机通信,并把取得的数据存储在数据库里面。
2〉webservice负责同webform/winform通信,
3〉浏览器的指令通过webservice传递给winform,
4〉浏览器需要的数据通过webservice取得并返回到webform
BHO 挂钩程序或IE插件程序就可以轻松搞定
他是用定时器不停的向单片机发送命令,然后获取数据的,会有当单片机下一个数据过来的时候,PC程序还在处理上一个数据的情况,此时定时器的上一个处理过程没有结束,但下一个数据还是会进入定时器的。那么这时就有两条数据在同时处理,有点多线程的意思。
不过我不知道C#中的定时器是否也有这种效果,或者你可以直接用多线程
现在难点是第四点,就是数据返回给Webform了,但是显示不出来我是用WCF双工回调的,请各位朋友帮我看看.