【求教】高手讲下C#Socket的长连接和短连接的问题

2024-11-02 14:48:48
推荐回答(3个)
回答(1):

这个和C#无关,而是和SOCKET你如何用有比较大的关系,和具体场景无关。

现在有服务器A,客户端B、C

长连接:顾名思义,就是连接一旦连上就保持连接状态不关闭,举个例子,B现在要跟C聊天,然后通过服务器A中转后和C连接上了,B完成和C聊天后,这个用于发送消息的SOCKET不关闭而仍然维持连接状态就是长连接(只是举个例子,比如软件考虑到B和C可能过一阵还会聊天)了。

短连接:顾名思义,就是维持时间比较短的连接,在实际中就是该SOCKET当前任务一旦结束就关闭连接。用到上面的例子就是B和C聊完后,SOCKET就关闭了,下次需要聊天的时候重新连接。

关于长连接和短连接以前讨论的人很多,一般认为长连接效率高,因为不需要反复去连接,但是容易堵塞,那就麻烦了,到底丢了多少包都不清楚。而短连接恰好相反。

一般在用的时候,尽可能的SOCKET专用,即发送消息的SOCKET专门发送消息,传文件的SOCKET专门传文件。如果要用长连接,最好在自己的协议上考虑到心跳包,即过一阵发一个心跳包看对方是否有响应来确定是否SOCKET阻塞了,是否掉线了等等。

这个就不需要代码了吧,几句话就通了

回答(2):

一般的短连接就是普通的ajax请求
长连接,一般可以理解为comet服务器推技术

建议看一下ibm的comet介绍

http://www.ibm.com/developerworks/cn/web/wa-lo-comet/

回答(3):

在前台页面写翻页:
上一页>
下一页
后台的CS页面需要写的:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
ViewState["pageindex"] = "0";
databind();


public void databind()
{
string sql = "select * from anli order by addtime desc ";
DataTable dt = DBhelper.Command(sql);//这个不知道是不是,反正意思就是把查询出来的结果放入 DataTable
DataView objView = dt.DefaultView;
PagedDataSource objPds = new PagedDataSource();
objPds.DataSource = objView;
objPds.AllowPaging = true;
objPds.PageSize = 5;//每页的数据显示数量
objPds.CurrentPageIndex = int.Parse(ViewState["pageindex"].ToString());
if (!objPds.IsFirstPage)
{
lkPre.Visible = true;
}
else
{
lkPre.Visible = false;
}

if (!objPds.IsLastPage)
{
lkNext.Visible = true;
}
else
{
lkNext.Visible = false;
}

dt2.DataSource = objPds;
dt2.DataBind();
}
protected void IndexChanging(object sender, EventArgs e)
{
string strCommand = ((LinkButton)sender).CommandArgument.ToString();

int pageindex = int.Parse(ViewState["pageindex"].ToString());

if (strCommand == "pre")
{
pageindex = pageindex - 1;
}
else
{
pageindex = pageindex + 1;
}

ViewState["pageindex"] = pageindex;

databind();
}

如果对您有帮助,请记得采纳为满意答案,谢谢!祝您生活愉快!

vaela