在网页中使用Socket编程

本文探讨了在ASP.NET环境中如何解决HTTP协议无状态特性带来的Socket连接问题,提出利用Session来保存连接状态的方法,并讨论了如何区分不同用户的连接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景:要完成的任务是这样的,要通过网页对一个服务器进行操作,服务器接受Socket TCP连接。

一开始,在网页里创建Socket,然后连接服务器,没有做其它特殊的处理,结果数据只能发送一次,Socket便断开。

原来,HTTP协议是无连接、无状态的,网页的生命周期仅是从页面的请求到页面装载完成,一量装载完毕,网页中的所有对像便被销毁。状态的只在需要门的技术,在ASP.NET中可以用Cookie、Application、Session、ViewState等方法,因为Socket连接是WEB服务器与另外一台服务器连接,状态保存到服务器比较好,如果保存在客户端则在每次请求时还需要把状态返回到服务器;从生存周期上考虑,状态只需要保存到用户关闭浏览器,而无而长期保存。鉴于以上考虑,采用Session非常合适。

程序流程如下:客户请求网页,创建两个线程分别用于Socket发送和接收,然后将线程的引用存入Session,这样线程的引用便被保存下来,下次再请求页面时便不用再重新连接,可以直接发送或接收数据。当用户退出时,要求用户点击退出按钮,服务器响应该事件,断开Socket连接并销毁线程即可,而Session会在用户关闭浏览器后20分钟内自动失效销毁。

(2007-01-29)
但这样有一个问题,这样多个客户都可以通过浏览器打开该页面,但是各个页面使用的Session是一个,所以使用的线程也是一个,这样就导致多个用户之间发送的指令相混。

想到一种方法,还没有实现,就是每个线程使用一个随机生成的数字作为Session的ID,这样基本上可以保证多个用户不使用同一个线程,而这个ID保存在客户端,每次发送数据时Request就保存了其Cookie信息,这样便避免了所有客户端使用同一Session的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值