📄 如何写一个稳定,高效的socket服务器程序。 _net技术 - c# - csdn社区 community_csdn_net.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<!-- saved from url=(0048)http://topic.csdn.net/t/20030327/22/1586528.html -->
<HTML lang=zh-CN xml:lang="zh-CN"
xmlns="http://www.w3.org/1999/xhtml"><HEAD><TITLE>如何写一个稳定,高效的socket服务器程序。 .NET技术 / C# - CSDN社区 community.csdn.net</TITLE>
<META content=all name=robots>
<META http-equiv=Content-Language content=zh-CN>
<META http-equiv=Content-Type content="text/html; charset=utf-8"><LINK
href="如何写一个稳定,高效的socket服务器程序。 _NET技术 - C# - CSDN社区 community_csdn_net.files/topic.css"
type=text/css rel=stylesheet>
<SCRIPT
src="如何写一个稳定,高效的socket服务器程序。 _NET技术 - C# - CSDN社区 community_csdn_net.files/Topic.js"
type=text/javascript></SCRIPT>
<META content=".net c# 线程 端口 应用程序 服务器 连接 执行 socket swait .NET技术 C#"
name=Keywords>
<META
content=我写了个多线程socket服务程序,当大批量的数据访问时,发现有不稳定情况。出现很多客户端无法访问的情况,有时仍至整个服务down掉。请csdn高手帮助,提供解决方案,思路,或参考书籍,网站都可以,最好有作个此类程序的人援手。万分感谢。
name=description>
<META content="MSHTML 6.00.2900.3059" name=GENERATOR></HEAD>
<BODY>
<DIV id=wrapper>
<DIV id=innerWrapper>
<TABLE class=CSDN-PHF id=CSDNPHL cellSpacing=1 cellPadding=0 border=0>
<TBODY>
<TR>
<TD><A href="http://www.csdn.net/" rel=external>CSDN首页</A></TD>
<TD><A href="http://news.csdn.net/" rel=external>新闻</A></TD>
<TD><A href="http://bbs.csdn.net/" rel=external><STRONG>论坛</STRONG></A></TD>
<TD><A href="http://groups.csdn.net/"
rel=external><STRONG>小组</STRONG></A></TD>
<TD><A href="http://blog.csdn.net/"
rel=external><STRONG>Blog</STRONG></A></TD>
<TD><A href="http://dev.csdn.net/" rel=external>文档</A></TD>
<TD><A href="http://download.csdn.net/" rel=external>下载</A></TD>
<TD><A href="http://book.csdn.net/" rel=external>读书</A></TD>
<TD><A href="http://tag.csdn.net/"
rel=external><STRONG>Tag</STRONG></A></TD>
<TD><A href="http://wz.csdn.net/" rel=external><STRONG>网摘</STRONG></A></TD>
<TD><A href="http://search.csdn.net/"
rel=external><STRONG>搜索</STRONG></A></TD>
<TD><A href="http://dotnet.csdn.net/"
rel=external><STRONG>.NET</STRONG></A></TD>
<TD><A href="http://java.csdn.net/"
rel=external><STRONG>Java</STRONG></A></TD>
<TD><A href="http://gamedev.csdn.net/" rel=external>游戏</A></TD>
<TD><A href="http://live.csdn.net/" rel=external>视频</A></TD>
<TD><A href="http://job.csdn.net/" rel=external>人才</A></TD>
<TD><A href="http://prj.csdn.net/" rel=external>外包</A></TD>
<TD><A href="http://www.dearbook.com.cn/" rel=external>第二书店</A></TD>
<TD><A href="http://www.programmer.com.cn/"
rel=external>程序员</A></TD></TR></TBODY></TABLE>
<DIV id=logo><A href="http://community.csdn.net/" rel=external><IMG class=logo
alt=CSDN社区
src="如何写一个稳定,高效的socket服务器程序。 _NET技术 - C# - CSDN社区 community_csdn_net.files/logo_csdn.gif"></A><A
href="http://book.csdn.net/" rel=external><IMG alt=""
src="如何写一个稳定,高效的socket服务器程序。 _NET技术 - C# - CSDN社区 community_csdn_net.files/book_468_60.gif"></A><A
href="http://search.codechina.net/" rel=external><IMG alt=""
src="如何写一个稳定,高效的socket服务器程序。 _NET技术 - C# - CSDN社区 community_csdn_net.files/codesearch_120_60.gif"></A>
<IMG style="DISPLAY: none" alt=""
src="如何写一个稳定,高效的socket服务器程序。 _NET技术 - C# - CSDN社区 community_csdn_net.files/pv.htm">
</DIV>
<DIV id=navigation>
<DIV id=search>
<DIV id=innerSearch><INPUT id=key onfocus="value=''"><A
onclick="return Search()"
href="http://topic.csdn.net/t/20030327/22/1586528.html#">搜索</A> | <A
title=功能强大的网络收藏夹,一秒钟操作就可以轻松实现保存带来的价值、分享带来的快乐
href="javascript:d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(saveit=window.open('http://wz.csdn.net/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'saveit','scrollbars=no,width=590,height=300,left=75,top=20,status=no,resizable=yes'));saveit.focus();">收藏</A> | <A
onclick="return Print()"
href="http://topic.csdn.net/t/20030327/22/1586528.html#">打印</A> | <A
onclick="return Close()"
href="http://topic.csdn.net/t/20030327/22/1586528.html#">关闭</A> </DIV></DIV>
<DIV><A class=CSDNRoom href="http://community.csdn.net/"
rel=external>CSDN社区</A> > <A
href="http://community.csdn.net/Expert/ForumsList.asp?typenum=1&roomid=52"
rel=external>.NET技术</A> > <A
href="http://community.csdn.net/Expert/ForumList.asp?typenum=1&roomid=5201"
rel=external>C#</A> </DIV></DIV>
<DIV id=mainWrapper>
<DIV id=pageContent>
<DIV id=innerContent>
<H1>如何写一个稳定,高效的socket服务器程序。</H1>
<DIV class=author><A class=anchor name=Top>楼主</A>zkp(zkp)<INPUT class=user1 title="一级用户 该版得分小于等于100分" type=button>2003-03-27
22:15:06 在 .NET技术 / C# 提问</DIV>
<P>我写了个多线程socket服务程序,当大批量的数据访问时,发现有不稳定情况。出现 <BR>
很多客户端无法访问的情况,有时仍至整个服务down掉。请csdn高手帮助,提供解决 <BR>
方案,思路,或参考书籍,网站都可以,最好有作个此类程序的人援手。万分感谢。 <SPAN>问题点数:100、回复次数:31</SPAN><A
href="http://topic.csdn.net/t/20030327/22/1586528.html#">Top</A> </P>
<DIV class=tagad><IFRAME
src="如何写一个稳定,高效的socket服务器程序。 _NET技术 - C# - CSDN社区 community_csdn_net.files/Board.htm"
frameBorder=0 scrolling=no></IFRAME></DIV>
<H3><STRONG><A class=anchor name=r_10499446>1 楼</A>ArLi2003(阿利,MSN:url@163.com)<INPUT class=star2 title="二星用户 该版得分小于等于30000分,大于10000分" type=button></STRONG><SPAN>回复于
2003-03-28 07:28:36 得分 0 </SPAN></H3>
<P>1,保证该端口没有受到爆洪之类的数据包攻击 <BR> 2,保证无效连接有及时.close <BR>
3,将客户端 socket 错误号贴上来我试试,或者是连不上该端口? <BR>
<BR> 我以前写socket 有过不少经验,C# 写还在学习中。。<A
href="http://topic.csdn.net/t/20030327/22/1586528.html#">Top</A></P>
<H3><STRONG><A class=anchor name=r_10500026>2 楼</A>zwztu(做自己想做的事)<INPUT class=star2 title="二星用户 该版得分小于等于30000分,大于10000分" type=button></STRONG><SPAN>回复于
2003-03-28 08:28:31 得分 0 </SPAN></H3>
<P>强烈关注<A href="http://topic.csdn.net/t/20030327/22/1586528.html#">Top</A></P>
<H3><STRONG><A class=anchor name=r_10502356>3 楼</A>duebbin(xh)<INPUT class=user5 title="五级用户 该版得分小于等于5000分,大于2000分" type=button></STRONG><SPAN>回复于
2003-03-28 09:32:16 得分 <EM>10</EM></SPAN></H3>
<P>用完成端口的方法可以承受大规模的连接 <BR> 完成端口 <BR> <BR>
一个完成端口其实就是一个通知队列,由操作系统把已经完成的重叠I/O请求的通知放入其中。当某项I/O操作一旦完成,某个可以对该操作结果进行处理的工作者线程就会收到一则通知。而套接字在被创建后,可以在任何时候与某个完成端口进行关联。
<BR> <BR>
通常情况下,我们会在应用程序中创建一定数量的工作者线程来处理这些通知。线程数量取决于应用程序的特定需要。理想的情况是,线程数量等于处理器的数量,不过这也要求任何线程都不应该执行诸如同步读写、等待事件通知等阻塞型的操作,以免线程阻塞。每个线程都将分到一定的CPU时间,在此期间该线程可以运行,然后另一个线程将分到一个时间片并开始执行。如果某个线程执行了阻塞型的操作,操作系统将剥夺其未使用的剩余时间片并让其它线程开始执行。也就是说,前一个线程没有充分使用其时间片,当发生这样的情况时,应用程序应该准备其它线程来充分利用这些时间片。<A
href="http://topic.csdn.net/t/20030327/22/1586528.html#">Top</A></P>
<H3><STRONG><A class=anchor name=r_10502744>4 楼</A>ajex(仙桃人在珠海)<INPUT class=star2 title="二星用户 该版得分小于等于30000分,大于10000分" type=button></STRONG><SPAN>回复于
2003-03-28 09:41:05 得分 0 </SPAN></H3>
<P>建议异步!<A href="http://topic.csdn.net/t/20030327/22/1586528.html#">Top</A></P>
<H3><STRONG><A class=anchor name=r_10504574>5 楼</A>hong98514(David_c#)<INPUT class=user2 title="二级用户 该版得分小于等于500分,大于100分" type=button></STRONG><SPAN>回复于
2003-03-28 10:23:58 得分 0 </SPAN></H3>
<P>强烈关注 <BR> <A
href="http://topic.csdn.net/t/20030327/22/1586528.html#">Top</A></P>
<H3><STRONG><A class=anchor name=r_10504904>6 楼</A>engine_(engine)<INPUT class=user3 title="三级用户 该版得分小于等于1000分,大于500分" type=button></STRONG><SPAN>回复于
2003-03-28 10:30:49 得分 0 </SPAN></H3>
<P>up<A href="http://topic.csdn.net/t/20030327/22/1586528.html#">Top</A></P>
<H3><STRONG><A class=anchor name=r_10507472>7 楼</A>qimini(循序渐进)<INPUT class=star2 title="二星用户 该版得分小于等于30000分,大于10000分" type=button></STRONG><SPAN>回复于
2003-03-28 11:24:37 得分 0 </SPAN></H3>
<P>关注,有没高手愿意将经验贴出来啊?<A
href="http://topic.csdn.net/t/20030327/22/1586528.html#">Top</A></P>
<H3><STRONG><A class=anchor name=r_10507945>8 楼</A>gujianxin(木头象)<INPUT class=user5 title="五级用户 该版得分小于等于5000分,大于2000分" type=button></STRONG><SPAN>回复于
2003-03-28 11:34:45 得分 <EM>50</EM></SPAN></H3>
<P>我用异步,感觉还行,贴点垃圾 <BR>
/////////////////////////////////////////////////// <BR> //#define
LAN <BR> using System; <BR> using
System.Net; <BR> using System.Net.Sockets; <BR>
using System.Text; <BR> using System.IO;
<BR> <BR> using EII.Base; <BR>
<BR> namespace EII.Upload <BR> { <BR>
<BR> /// <summary> <BR> ///
TUploadServer 的摘要说明。 <BR> /// </summary>
<BR> class TUploadServer <BR> { <BR>
private Socket sWait = null; //wait Socket <BR>
private EIIByte m_byte = null; <BR> private ASCIIEncoding
m_ascn ; <BR> <BR>
<BR> /// <summary> <BR> /// Const
define <BR> /// </summary> <BR> private
const int PORT = 5656; <BR> <BR> private
const int MAX_CONNECT = 50; <BR> #if LAN
<BR> private const int ONCE_COUNT =
1024 * 1024; //once count byte <BR>
#else <BR> private const int ONCE_COUNT
= 1024; <BR> #endif <BR> <BR>
const int OPEN_FILE_FAILED = 2, <BR> FILE_ALWAYS_OPENED = 3,
<BR> ALL_RIGHT = 1; <BR> <BR> const short
CMD_C_REQUERY = 0x0301, //客户端发送要求上传命令 <BR> CMD_S_REQUERY = 0x0302,
//服务器响应 <BR> CMD_C_DETAIL = 0x0303, //客户端发送上传文件内容 <BR>
CMD_S_DETAIL = 0x0304, //响应 <BR> CMD_S_CHECK = 0x0306; //服务器心跳检测
<BR> <BR> private int nSocketNum =0;
<BR> private TSocketPacket[] aSock; <BR>
<BR> private byte[] bSend; <BR> private
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -