真心求教C#常连接

我看你有戏 2007-06-28 06:06:24
C#常连接

有没有人熟悉的,给点提示吧

感觉每次发完包后就close连接比较浪费资源

先谢谢了

弄了好几天了

如提示有帮助必定给分
...全文
622 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
TT老老 2008-08-28
  • 打赏
  • 举报
回复
学习 :)
ksoft_luo 2007-07-02
  • 打赏
  • 举报
回复
http1.1支持长链接的
warensoft1 2007-07-01
  • 打赏
  • 举报
回复
上面的兄弟在讨论这个问题的时候一定要知道,为什么HTTP的连接可以不用就不连?
原因是这样的,在我们第一次访问该网站的时候服务器会为我们第一个用户建立一个session而这个session的ID会被存在我们本机的COOKIE中(不信的话你可以试试把COOKIE禁用,看看还能不能保存你的匿名用户信息),这样,下次再一次连接的时候服务器会根据COOKIE中的SESSIONID再找到你是用哪个session保存会话状态的。
而我们在作Socket编程的时候,一般客户端的IP的PORT号都有可能是随机的,一但是断线的并且再一次连接的话,客户端的SOCKET就可能发生改变。
因此,要想实现这总不用就不连的方式,我们也要考虑能不能像HTTP一样想办法在客户端上作一个类似COOKIE的东西,用来保存服务器上的会话状态
xiaoliangwh 2007-06-30
  • 打赏
  • 举报
回复
up
我看你有戏 2007-06-29
  • 打赏
  • 举报
回复
我看了你的文章
是长连接的话怎么还要
close Socket 呢?

http://www.cnblogs.com/wzd24/archive/2007/06/13/782833.html

private void ReceiveCallBack(IAsyncResult ar)
{
UserInfo info = (UserInfo)ar.AsyncState;
Socket handler = info.socket;
int readCount = 0;
try
{
readCount = handler.EndReceive(ar);//调用这个函数来结束本次接收并返回接收到的数据长度。
}
catch (SocketException)//出现Socket异常就关闭连接
{
CloseSocket(info);//这个函数用来关闭客户端连接
return;
}
catch
{
}
if (readCount > 0)
{
byte[] buffer = new byte[readCount];
Buffer.BlockCopy(info.Buffer, 0, buffer, 0, readCount);
Analyzer(info, buffer);//这个函数用来处理接收到的信息。
try
{
handler.BeginReceive(info.Buffer, 0, info.Buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveCallBack), info);//向系统投递下一个接收请求
}
catch (SocketException) //出现Socket异常就关闭连接
{
CloseSocket(info);
}
catch
{
}
}
else //如果接收到0字节的数据说明客户端关闭了Socket,那我们也要关闭Socket
{
CloseSocket(info);
}
}
wzd24 2007-06-29
  • 打赏
  • 举报
回复
我文章里的Socket就是这样处理的!
我一般都是做长连接的!
我看你有戏 2007-06-29
  • 打赏
  • 举报
回复


我的问题是

Socket一次连接后发包 n 次

发了n次后

Socket才close

而不是发一次包就需要连接一次,关闭一次

先谢谢大家的回复

期待更加精彩的答案
wzd24 2007-06-29
  • 打赏
  • 举报
回复
看看我的BLOG:http://wzd24.cnblogs.com
我几了几篇关于Socket的文章。觉得有用就给我分吧!
呵呵………………
lshvs2005 2007-06-29
  • 打赏
  • 举报
回复
偶 只知道常连接与短连接 下,WINDOWS的方送方式不一样,

所以程序也就完全不一样。
effun 2007-06-29
  • 打赏
  • 举报
回复
HTTP不都是短连接吗?所以在我的程序里都是用短连接的。
我看你有戏 2007-06-29
  • 打赏
  • 举报
回复

我说的是 Socket 连接,不是数据库连接
greenery 2007-06-29
  • 打赏
  • 举报
回复
我记得我们以前用的时候,也是要求用完就要关闭连接的。
但是,有些像ftp软件,他们就会做这个保持连接的事情,他们会每隔一定时间,向对方发送一个命令,来保持连接不断开。要不你参考ftp的做法看行不行。
elzero 2007-06-29
  • 打赏
  • 举报
回复
不用就要关
greenery 2007-06-29
  • 打赏
  • 举报
回复
什么叫常链接啊
wzd24 2007-06-29
  • 打赏
  • 举报
回复
chanfengsr(巉沨散人) ( ) 信誉:100 Blog 加为好友 2007-06-29 14:27:13 得分: 0


用连接池,即使CLOSE调了,一定数量得连接还是保持着,一段时间不用后自己会释放。

-----------------------------------------------------------------------------------
Socket连接池??呵呵…………
根本就没有这个东西!
chanfengsr 2007-06-29
  • 打赏
  • 举报
回复
用连接池,即使CLOSE调了,一定数量得连接还是保持着,一段时间不用后自己会释放。
wzd24 2007-06-29
  • 打赏
  • 举报
回复
出异常和客户端断开了当然要Close掉!
RedGoldFish 2007-06-29
  • 打赏
  • 举报
回复
按LZ的要求是长连接比较好,在Socket操作中,建立连接是最耗时间和资源的操作,保持一个连接比每次重新建立更合算,尤其是在对反应速度和效率要求高的情况下. 我们自己做的Socket 服务器都是长连接的.

在HTTP下是短连接,这很大程度是因为在Web环境下Socket连接并不稳定. 我估计LZ用的环境很可能是在稳定的LAN环境中,即使是WAN也有比叫可靠和快速的连接.
RedGoldFish 2007-06-28
  • 打赏
  • 举报
回复
LZ 说的是什么连接? Socket 连接还是 数据库的 Connection ?
guyehanxinlei 2007-06-28
  • 打赏
  • 举报
回复
用完对象及时关掉会好一点
加载更多回复(2)

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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