【求教】高手讲下C#Socket的长连接和短连接的问题 请教关于socket的长连接问题
socket\u662f\u957f\u8fde\u63a5\u8fd8\u662f\u77ed\u8fde\u63a5\u957f\u8fde\u63a5\uff0c\u6307\u5728\u4e00\u4e2aTCP\u8fde\u63a5\u4e0a\u53ef\u4ee5\u8fde\u7eed\u53d1\u9001\u591a\u4e2a\u6570\u636e\u5305\uff0c\u5728TCP\u8fde\u63a5\u4fdd\u6301\u671f\u95f4\uff0c\u5982\u679c\u6ca1\u6709\u6570\u636e\u5305\u53d1\u9001\uff0c\u9700\u8981\u53cc\u65b9\u53d1\u68c0\u6d4b\u5305\u4ee5\u7ef4\u6301\u6b64\u8fde\u63a5\uff0c\u4e00\u822c\u9700\u8981\u81ea\u5df1\u505a\u5728\u7ebf\u7ef4\u6301\u3002
\u77ed\u8fde\u63a5\uff0c\u662f\u6307\u901a\u4fe1\u53cc\u65b9\u6709\u6570\u636e\u4ea4\u4e92\u65f6\uff0c\u5c31\u5efa\u7acb\u4e00\u4e2aTCP\u8fde\u63a5\uff0c\u6570\u636e\u53d1\u9001\u5b8c\u6210\u540e\uff0c\u5219\u65ad\u5f00\u6b64TCP\u8fde\u63a5\uff0c\u4e00\u822c\u94f6\u884c\u90fd\u4f7f\u7528\u77ed\u8fde\u63a5\u3002
\u6bd4\u5982http\u7684\uff0c\u53ea\u662f\u8fde\u63a5\u3001\u8bf7\u6c42\u3001\u5173\u95ed\uff0c\u8fc7\u7a0b\u65f6\u95f4\u8f83\u77ed,\u670d\u52a1\u5668\u82e5\u662f\u4e00\u6bb5\u65f6\u95f4\u5185\u6ca1\u6709\u6536\u5230\u8bf7\u6c42\u5373\u53ef\u5173\u95ed\u8fde\u63a5\u3002
\u5176\u5b9e\u957f\u8fde\u63a5\u662f\u76f8\u5bf9\u4e8e\u901a\u5e38\u7684\u77ed\u8fde\u63a5\u800c\u8bf4\u7684\uff0c\u4e5f\u5c31\u662f\u957f\u65f6\u95f4\u4fdd\u6301\u5ba2\u6237\u7aef\u4e0e\u670d\u52a1\u7aef\u7684\u8fde\u63a5\u72b6\u6001\u3002
\u6240\u4ee5\u8bf4socket \u6709\u957f\u8fde\u63a5,\u4e5f\u6709\u77ed\u8fde\u63a5,\u8fd8\u6709\u65e0\u8fde\u63a5,\u6bd4\u5982UDP.
\u957f\u8fde\u63a5\uff0c\u6307\u5728\u4e00\u4e2aTCP\u8fde\u63a5\u4e0a\u53ef\u4ee5\u8fde\u7eed\u53d1\u9001\u591a\u4e2a\u6570\u636e\u5305\uff0c\u5728TCP\u8fde\u63a5\u4fdd\u6301\u671f\u95f4\uff0c\u5982\u679c\u6ca1\u6709\u6570\u636e\u5305\u53d1\u9001\uff0c\u9700\u8981\u53cc\u65b9\u53d1\u68c0\u6d4b\u5305\u4ee5\u7ef4\u6301\u6b64\u8fde\u63a5\uff0c\u4e00\u822c\u9700\u8981\u81ea\u5df1\u505a\u5728\u7ebf\u7ef4\u6301\u3002
\u77ed\u8fde\u63a5\uff0c\u662f\u6307\u901a\u4fe1\u53cc\u65b9\u6709\u6570\u636e\u4ea4\u4e92\u65f6\uff0c\u5c31\u5efa\u7acb\u4e00\u4e2aTCP\u8fde\u63a5\uff0c\u6570\u636e\u53d1\u9001\u5b8c\u6210\u540e\uff0c\u5219\u65ad\u5f00\u6b64TCP\u8fde\u63a5\uff0c\u4e00\u822c\u94f6\u884c\u90fd\u4f7f\u7528\u77ed\u8fde\u63a5\u3002
\u6bd4\u5982http\u7684\uff0c\u53ea\u662f\u8fde\u63a5\u3001\u8bf7\u6c42\u3001\u5173\u95ed\uff0c\u8fc7\u7a0b\u65f6\u95f4\u8f83\u77ed,\u670d\u52a1\u5668\u82e5\u662f\u4e00\u6bb5\u65f6\u95f4\u5185\u6ca1\u6709\u6536\u5230\u8bf7\u6c42\u5373\u53ef\u5173\u95ed\u8fde\u63a5\u3002
\u5176\u5b9e\u957f\u8fde\u63a5\u662f\u76f8\u5bf9\u4e8e\u901a\u5e38\u7684\u77ed\u8fde\u63a5\u800c\u8bf4\u7684\uff0c\u4e5f\u5c31\u662f\u957f\u65f6\u95f4\u4fdd\u6301\u5ba2\u6237\u7aef\u4e0e\u670d\u52a1\u7aef\u7684\u8fde\u63a5\u72b6\u6001\u3002
\u6240\u4ee5\u8bf4socket \u6709\u957f\u8fde\u63a5,\u4e5f\u6709\u77ed\u8fde\u63a5,\u8fd8\u6709\u65e0\u8fde\u63a5,\u6bd4\u5982UDP.
现在有服务器A,客户端B、C
长连接:顾名思义,就是连接一旦连上就保持连接状态不关闭,举个例子,B现在要跟C聊天,然后通过服务器A中转后和C连接上了,B完成和C聊天后,这个用于发送消息的SOCKET不关闭而仍然维持连接状态就是长连接(只是举个例子,比如软件考虑到B和C可能过一阵还会聊天)了。
短连接:顾名思义,就是维持时间比较短的连接,在实际中就是该SOCKET当前任务一旦结束就关闭连接。用到上面的例子就是B和C聊完后,SOCKET就关闭了,下次需要聊天的时候重新连接。
关于长连接和短连接以前讨论的人很多,一般认为长连接效率高,因为不需要反复去连接,但是容易堵塞,那就麻烦了,到底丢了多少包都不清楚。而短连接恰好相反。
一般在用的时候,尽可能的SOCKET专用,即发送消息的SOCKET专门发送消息,传文件的SOCKET专门传文件。如果要用长连接,最好在自己的协议上考虑到心跳包,即过一阵发一个心跳包看对方是否有响应来确定是否SOCKET阻塞了,是否掉线了等等。
这个就不需要代码了吧,几句话就通了
一般的短连接就是普通的ajax请求
长连接,一般可以理解为comet服务器推技术
建议看一下ibm的comet介绍
http://www.ibm.com/developerworks/cn/web/wa-lo-comet/
在前台页面写翻页:
<asp:linkbutton ID="lkPre" OnCommand="IndexChanging" CommandArgument="pre" runat="server" >上一页></asp:linkbutton>
<asp:linkbutton ID="lkNext" OnCommand="IndexChanging" CommandArgument="next" runat="server" >下一页</asp:linkbutton>
后台的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
绛旓細绠鍗曡屾繁鍏ョ粰浣璁蹭笅浣犲氨浼氭槑鐧斤細鎵璋搃nt,float,double,char,short绛夐噺涓轰粈涔堣鍒掑垎鎬庝箞澶氬憿锛熶互涓哄湪浜哄鐞嗕簨鐨勪簨鎯呭熀鏈湪杩欎釜鑼冨洿涔嬪唴锛屽皯浜嗕笉澶熺敤锛屽浜嗘氮璐圭┖闂淬傝嫢浣犳兂璁惧叾浠栫被鍨嬪彉閲忛兘琛屻侰璇█鏋勯犱綋鍙互瀹炵幇锛堝彧涓嶈繃涓嶆槸鍏抽敭瀛楄屽凡锛夊湪鍐呭瓨涓牴鎹被鍨嬪彧涓嶈繃鍒掑垎涓涓嬬┖闂村ぇ灏忥紝鍐呭瓨鍙堜笉璁よ瘑閭d簺浠涔...
绛旓細//姝ゅ嚱鏁板姛鑳戒负鎵惧瓧绗︿覆涓渶澶х殑瀛楃锛//灏嗘渶澶у瓧绗︾殑鍓嶉潰鐨勫瓧绗﹀潎鍚戝悗绉诲姩1浣嶏紝//灏嗘渶澶х殑瀛楃鏀惧湪瀛楃涓查 include<stdio.h> main(){ char str[80],*p,max,*q;p=str;//灏嗘寚閽堟寚鍚戞暟缁勯鍦板潃 gets(p);//浠庢爣鍑嗚緭鍏ヨ鍙栧瓧绗︿覆 q=p;//鏈澶х殑瀛楃鎵鍦ㄧ殑浣嶇疆 max=*(p++);//灏嗙涓...
绛旓細褰撹緭鍏2473<鍥炶溅>,鍙橀噺c鐨勫煎垎鍒负'2'銆'4'銆'7'銆'3'锛'鍥炶溅'.1.c='2'鏃,鎵ц case 0:case 1: putchar(c+4);case 2: putchar(c+4) ;break;杈撳嚭:66 2.c='4'鏃,鎵ц case 2: putchar(c+4) ;break;杈撳嚭:8 3.c='7'鏃,鎵ц default: putchar(c+2);break;杈撳嚭:9 4...
绛旓細鈶1=p2;鐨勬剰鎬濓細銆恜1鎸囧悜鐨勫湴鍧涓簆2鎸囧悜鐨勫湴鍧銆戔懀涓轰簡鍔犳繁浣犲鎸囬拡鐨勭悊瑙o紝鎴戜滑鍙互杩欎箞璁や负锛歱1鏄竴寮犵焊鏉,涓婇潰鍐欑潃鎴块棿鍙凤紝p2涔熸槸銆俻1=p2;鏄妸p1绾告潯涓婄殑鎴块棿鍙锋摝鎺夛紝鏀规垚p2绾告潯涓婄殑鎴块棿鍙枫俻1=*p2;鏄妸p2绾告潯涓婂搴旂殑鎴块棿鍙风殑鎴块棿閲岀殑鎵鏈変笢瑗挎惉鍒皃1绾告潯鍐欑殑鎴块棿鍐呫傗懁灏唒1鐨勬寚閽堟寚鍚慴锛...
绛旓細锛堟湁闂鍙互鍒版垜鐨勫崥瀹細www.52vcc.com鐣欒█锛夛紝缃戠珯鐨勮瘽鎴戝彧鎺ㄨ崘CSDN锛岃櫧鐒剁幇鍦–SDN涔熸按浜嗭紝浣嗘槸涓婇潰姣曠珶杩樻槸楂樻墜濡備簯鍢涖傞棶棰5銆乧鍜宒elphi鍝璇█鐢ㄥ緱鏇村锛岃繖涓氨璁╂垜浠敤鏁版嵁鏉ヨ璇濆惂 涓嬮潰鏄潈濞佺綉绔欑粰鍑虹殑缂栫▼璇█浣跨敤鎺掑悕锛歨ttp://www.tiobe.com/index.php/content/paperinfo/tpci/index.html ...
绛旓細锛坢 =a>b锛&&(n=c>d)&& 鎿嶄綔绗︼紝濡傛灉鍓嶄竴涓〃杈惧紡 涓哄惁 涓嶈绠楃浜屼釜琛ㄨ揪寮 (m=a>b )=0 鍚庝竴涓〃杈惧紡鍗硁=c>b 涓嶈绠 n涓哄師鍊 n=2
绛旓細a1 = 0x01; //0000 0001 a2 = 0x00; //0000 0000 a3 = 0x03; //0000 0011 a4 = 0x02; //0000 0010 b1 = a1 ^ a2; //0000 0001 b2 = a1 ^ a3; //0000 0010 b3 = a1 ^ a4; //0000 0011 ^寮傛垨杩愮畻绗,浣嶅肩浉鍚屼负0,涓嶅悓涓1,瑙佷笂绀轰緥....
绛旓細鑰屽湪1973骞达紝B璇█涔熺粰浜衡滅叜鈥濅簡涓涓嬶紝缇庡浗璐濆皵瀹為獙瀹ょ殑D.M.RITCHIE鍦˙璇█鐨勫熀纭涓婃渶缁堣璁″嚭浜嗕竴绉嶆柊鐨勮瑷锛屼粬鍙栦簡BGPL鐨勭浜屼釜瀛楁瘝浣滀负杩欑璇█鐨勫悕瀛楋紝杩欏氨鏄C璇█銆備负浜嗕娇UNIX鎿嶄綔绯荤粺鎺ㄥ箍锛1977骞碊ennis M.Ritchie 鍙戣〃浜嗕笉渚濊禆浜庡叿浣撴満鍣ㄧ郴缁熺殑C璇█缂栬瘧鏂囨湰銆婂彲绉绘鐨凜璇█缂栬瘧绋嬪簭銆嬨19...
绛旓細鏈夎鍚э紵UNUSED鐨勫畯瀹氫箟鏄彉閲忕被鍨嬶紝鑰屼唬鐮佷腑UNUSED(ud)鐨剈d鏄寚閽堝晩锛佸鏋滃畯瀹氫箟鏄#define UNUSED(x) ((void *)(x))鐨勮瘽灏辨纭簡銆
绛旓細绛旀锛C A锛氭槸濡傛灉a>b,鍒欎竴绋嬪簭涓鐩存墽琛屽埌鈥渂=c;鈥濓紝鏁堟灉鏄崲a涓巄鐨勫硷紱B锛氭槸濡傛灉a>b,鍒欐墽琛寋 }閲岀殑璇彞锛屾晥鏋滄槸浜ゆ崲a涓巄鐨勫硷紱C锛氭槸濡傛灉a>b,鍒欐墽琛宑=a; 鏃犺a鏄惁澶т簬b锛宑鐨勫奸兘瑕佺粰a锛宎-b;娌′粈涔堜綔鐢紱D锛氭槸濡傛灉a>b,鍒欐晥鏋滄槸浜ゆ崲a涓巄鐨勫硷紝c鐩稿綋浜庝腑杞珯锛宎-b;娌′粈涔...