📄 neta.htm
字号:
<p class=MsoNormalIndent><span style='font-family:宋体'>程序是多线程的,可以处理多个连接。由于程序主要用于测试目的,所以在性能上未做过多考虑。</span></p>
<h2 style='margin-left:40.9pt'><a name="_Toc47170158"><span lang=EN-US>1.2<span
style='font:7.0pt "Times New Roman"'> </span></span><span
style='font-family:宋体'>安装与设置</span></a></h2>
<p class=MsoNormalIndent><span style='font-family:宋体'>安装目录设定:</span></p>
<p class=MsoNormalIndent><span class=a><span lang=EN-US style='font-size:9.0pt;
line-height:150%'>netAgent\</span></span></p>
<p class=MsoNormalIndent style='margin-left:36.0pt;text-indent:0cm'><span
class=a><span lang=EN-US style='font-size:9.0pt;line-height:150%'>netAgent.Exe</span></span></p>
<p class=MsoNormalIndent style='text-indent:36.0pt'><span class=a><span
lang=EN-US style='font-size:9.0pt;line-height:150%'>netAgent.ini</span></span></p>
<p class=MsoNormalIndent style='text-indent:36.0pt'><span class=a><span
lang=EN-US style='font-size:9.0pt;line-height:150%'>+--\Log </span></span><span
class=a><span style='font-size:9.0pt;line-height:150%;font-family:宋体'>存放日志</span></span></p>
<p class=MsoNormalIndent style='text-indent:36.0pt'><span class=a><span
lang=EN-US style='font-size:9.0pt;line-height:150%'>+--\Data </span></span><span
class=a><span style='font-size:9.0pt;line-height:150%;font-family:宋体'>存放客户端和服务器端间交换的数据</span></span></p>
<p class=MsoNormalIndent><span lang=EN-US> </span></p>
<p class=MsoNormalIndent><span style='font-family:宋体'>运行程序的方法:</span></p>
<p class=MsoNormalIndent><span style='font-family:宋体'>启动参数:</span><span
lang=EN-US>netAgent SvrName</span><span style='font-family:宋体'>,<span
style='color:red'>不指定参数则无法启动</span>。</span></p>
<p class=MsoNormalIndent><span lang=EN-US>SvrName</span><span style='font-family:
宋体'>为代理名称,定义代理名称,在同一系统中唯一,同一名称的程序不能第二次启动。</span></p>
<p class=MsoNormalIndent><span style='font-family:宋体'>此外读取</span><span
lang=EN-US>INI</span><span style='font-family:宋体'>文件中的相应的</span><span
lang=EN-US>SvrName</span><span style='font-family:宋体'>段的数据作为配置参数。</span></p>
<p class=MsoNormalIndent><span lang=EN-US>netAgent.ini</span><span
style='font-family:宋体'>文件参数设置:</span></p>
<p class=MsoNormalIndent><span lang=EN-US>INI</span><span style='font-family:
宋体'>文件设置,假设程序以:</span><span lang=EN-US>netAgent test</span><span
style='font-family:宋体'>启动,</span><span lang=EN-US>INI</span><span
style='font-family:宋体'>文件中必须有</span><span lang=EN-US>test</span><span
style='font-family:宋体'>段</span></p>
<p class=MsoNormalIndent><span class=a><span lang=EN-US style='font-size:9.0pt;
line-height:150%'>[test]</span></span></p>
<p class=MsoNormalIndent><span class=a><span lang=EN-US style='font-size:9.0pt;
line-height:150%'>;</span></span><span class=a><span style='font-size:9.0pt;
line-height:150%;font-family:宋体'>本服务器名称,建议与启动参数相同</span></span></p>
<p class=MsoNormalIndent><span class=a><span lang=EN-US style='font-size:9.0pt;
line-height:150%'>desc=test_svr </span></span></p>
<p class=MsoNormalIndent><span class=a><span lang=EN-US style='font-size:9.0pt;
line-height:150%'>;</span></span><span class=a><span style='font-size:9.0pt;
line-height:150%;font-family:宋体'>服务器地址</span></span></p>
<p class=MsoNormalIndent><span class=a><span lang=EN-US style='font-size:9.0pt;
line-height:150%'>server_ip=192.168.0.1 </span></span></p>
<p class=MsoNormalIndent><span class=a><span lang=EN-US style='font-size:9.0pt;
line-height:150%'>;</span></span><span class=a><span style='font-size:9.0pt;
line-height:150%;font-family:宋体'>服务器端口</span></span></p>
<p class=MsoNormalIndent><span class=a><span lang=EN-US style='font-size:9.0pt;
line-height:150%'>server_port=8080</span></span></p>
<p class=MsoNormalIndent><span class=a><span lang=EN-US style='font-size:9.0pt;
line-height:150%'>;</span></span><span class=a><span style='font-size:9.0pt;
line-height:150%;font-family:宋体'>本地</span></span><span class=a><span
lang=EN-US style='font-size:9.0pt;line-height:150%'>IP</span></span><span
class=a><span style='font-size:9.0pt;line-height:150%;font-family:宋体'>地址,留空表示所有</span></span><span
class=a><span lang=EN-US style='font-size:9.0pt;line-height:150%'>IP</span></span><span
class=a><span style='font-size:9.0pt;line-height:150%;font-family:宋体'>地址</span></span></p>
<p class=MsoNormalIndent><span class=a><span lang=EN-US style='font-size:9.0pt;
line-height:150%'>local_ip=</span></span></p>
<p class=MsoNormalIndent><span class=a><span lang=EN-US style='font-size:9.0pt;
line-height:150%'>;</span></span><span class=a><span style='font-size:9.0pt;
line-height:150%;font-family:宋体'>本地监听端口</span></span><span class=a><span
lang=EN-US style='font-size:9.0pt;line-height:150%'> </span></span></p>
<p class=MsoNormalIndent><span class=a><span lang=EN-US style='font-size:9.0pt;
line-height:150%'>local_port=8080</span></span></p>
<p class=MsoNormalIndent><span class=a><span lang=EN-US style='font-size:9.0pt;
line-height:150%'>;1MB</span></span><span class=a><span style='font-size:9.0pt;
line-height:150%;font-family:宋体'>,数据交换缓冲区字节数</span></span></p>
<p class=MsoNormalIndent><span class=a><span lang=EN-US style='font-size:9.0pt;
line-height:150%'>max_length=1024000 </span></span></p>
<p class=MsoNormalIndent><span class=a><span lang=EN-US style='font-size:9.0pt;
line-height:150%'>;</span></span><span class=a><span style='font-size:9.0pt;
line-height:150%;font-family:宋体'>保留,目前未使用此数据</span></span></p>
<p class=MsoNormalIndent><span class=a><span lang=EN-US style='font-size:9.0pt;
line-height:150%'>timeout=30000 </span></span></p>
<p class=MsoNormalIndent><span class=a><span lang=EN-US style='font-size:9.0pt;
line-height:150%'>;</span></span><span class=a><span style='font-size:9.0pt;
line-height:150%;font-family:宋体'>是否输出接收到的数据到文件,</span></span><span class=a><span
lang=EN-US style='font-size:9.0pt;line-height:150%'>1</span></span><span
class=a><span style='font-size:9.0pt;line-height:150%;font-family:宋体'>:输出,</span></span><span
class=a><span lang=EN-US style='font-size:9.0pt;line-height:150%'>0</span></span><span
class=a><span style='font-size:9.0pt;line-height:150%;font-family:宋体'>:不输出</span></span></p>
<p class=MsoNormalIndent><span class=a><span lang=EN-US style='font-size:9.0pt;
line-height:150%'>debug_out=1</span></span></p>
<p class=MsoNormalIndent><span class=a><span lang=EN-US style='font-size:9.0pt;
line-height:150%'>;</span></span><span class=a><span style='font-size:9.0pt;
line-height:150%;font-family:宋体'>记录本次启动后所有数据记录文件的前缀,建议不要手工修改</span></span></p>
<p class=MsoNormalIndent><span class=a><span lang=EN-US style='font-size:9.0pt;
line-height:150%'>;</span></span><span class=a><span style='font-size:9.0pt;
line-height:150%;font-family:宋体'>文件名为:</span></span><span class=a><span
lang=EN-US style='font-size:9.0pt;line-height:150%'>Data\"cur_seq"_xxxxxx.txt
</span></span></p>
<p class=MsoNormalIndent><span class=a><span lang=EN-US style='font-size:9.0pt;
line-height:150%'>cur_seq=21</span></span></p>
<h2 style='margin-left:40.9pt'><a name="_Toc47170159"><span lang=EN-US>1.3<span
style='font:7.0pt "Times New Roman"'> </span></span><span
style='font-family:宋体'>程序的运行</span></a></h2>
<p class=MsoNormalIndent><span style='font-family:宋体'>可以按照下面的方式建立启动文件,</span><span
lang=EN-US>test.bat</span><span style='font-family:宋体'>内容:</span></p>
<p class=MsoNormalIndent><span lang=EN-US>title server_test</span></p>
<p class=MsoNormalIndent><span lang=EN-US>cls</span></p>
<p class=MsoNormalIndent><span lang=EN-US>netAgent test</span></p>
<p class=MsoNormalIndent><span style='font-family:宋体'>程序运行时,屏幕显示如下:</span></p>
<p class=MsoNormalIndent><span lang=EN-US><img width=476 height=307
src="neta_files/image001.jpg"></span></p>
<p class=MsoNormalIndent><span style='font-family:宋体'>程序安装目录下的</span><span
lang=EN-US>Log</span><span style='font-family:宋体'>目录会按天创建程序运行日志。</span></p>
<p class=MsoNormalIndent><span style='font-family:宋体'>程序安装目录下的</span><span
lang=EN-US>Data</span><span style='font-family:宋体'>目录会记录客户端和服务器端交换的数据的具体内容。目录名称为:</span></p>
<p class=MsoNormalIndent><span lang=EN-US>20_test_netsockcontain_1_client_2_server.txt</span><span
style='font-family:宋体'>,各部分含义如下:</span></p>
<p class=MsoNormalIndent style='margin-left:42.0pt;text-indent:-21.0pt'><span
lang=EN-US style='font-family:Wingdings'>l<span style='font:7.0pt "Times New Roman"'>
</span></span><span lang=EN-US>20</span><span style='font-family:宋体'>:程序启动序号,每次启动程序时会递增</span></p>
<p class=MsoNormalIndent style='margin-left:42.0pt;text-indent:-21.0pt'><span
lang=EN-US style='font-family:Wingdings'>l<span style='font:7.0pt "Times New Roman"'>
</span></span><span lang=EN-US>test</span><span style='font-family:宋体'>:启动服务器的参数</span></p>
<p class=MsoNormalIndent style='margin-left:42.0pt;text-indent:-21.0pt'><span
lang=EN-US style='font-family:Wingdings'>l<span style='font:7.0pt "Times New Roman"'>
</span></span><span lang=EN-US>1</span><span style='font-family:宋体'>:本次启动后第</span><span
lang=EN-US>1</span><span style='font-family:宋体'>次连接,每次连接时会递增</span></p>
<p class=MsoNormalIndent style='margin-left:42.0pt;text-indent:-21.0pt'><span
lang=EN-US style='font-family:Wingdings'>l<span style='font:7.0pt "Times New Roman"'>
</span></span><span lang=EN-US>client_2_server or server_2_client</span><span
style='font-family:宋体'>:数据发送方向</span></p>
<p class=MsoNormalIndent><span style='font-family:宋体'>退出程序时强制关闭进程即可。</span></p>
<h1><a name="_Toc47170160"><span lang=EN-US>第 2 章<span style='font:7.0pt "Times New Roman"'>
</span></span><span style='font-family:宋体'>程序设计说明</span></a></h1>
<h2 style='margin-left:40.9pt'><a name="_Toc47170161"><span lang=EN-US>2.1<span
style='font:7.0pt "Times New Roman"'> </span></span><span
style='font-family:宋体'>流程</span></a></h2>
<h3 style='margin-left:54.0pt'><a name="_Toc47170162"><span lang=EN-US>2.1.1<span
style='font:7.0pt "Times New Roman"'> </span></span><span
style='font-family:宋体'>监听线程的创建</span></a></h3>
<p class=MsoNormalIndent><span style='font-family:宋体'>主进程启动后首先进行环境初始化。</span></p>
<p class=MsoNormalIndent><span style='font-family:宋体'>然后创建监听线程</span><span
lang=EN-US>NetworkListenThread</span><span style='font-family:宋体'>,监听线程负责等待并处理客户端连接。</span></p>
<p class=MsoNormalIndent><span style='font-family:宋体'>然后等待监听线程的退出,并退出主进程。</span></p>
<h3 style='margin-left:54.0pt'><a name="_Toc47170163"><span lang=EN-US>2.1.2<span
style='font:7.0pt "Times New Roman"'> </span></span><span
style='font-family:宋体'>通信线程的创建和运行</span></a></h3>
<p class=MsoNormalIndent style='margin-left:6.0pt;text-indent:15.0pt'><span
style='font-family:宋体'>当监听</span><span lang=EN-US>Socket</span><span
style='font-family:宋体'>上有连接到达时会首先创建一个</span><span lang=EN-US>CNetSocketContainer</span><span
style='font-family:宋体'>的对象,用于保存客户端连接信息。</span></p>
<p class=MsoNormalIndent style='margin-left:6.0pt;text-indent:15.0pt'><span
style='font-family:宋体'>然后把</span><span lang=EN-US>CNetSocketContainer</span><span
style='font-family:宋体'>对象作为参数,来创建通信线程</span><span lang=EN-US>ClientAndServerDataExchange
</span><span style='font-family:宋体'>。</span></p>
<p class=MsoNormalIndent style='margin-left:18.0pt;text-indent:3.0pt'><span
style='font-family:宋体'>通信线程</span><span lang=EN-US>ClientAndServerDataExchange</span><span
style='font-family:宋体'>会建立到服务器的连接,然后将</span><span lang=EN-US>CtoS</span><span
style='font-family:宋体'>与</span><span lang=EN-US>StoC</span><span
style='font-family:宋体'>之间的数据进行转发。</span></p>
<h3 style='margin-left:54.0pt'><a name="_Toc47170164"><span lang=EN-US>2.1.3<span
style='font:7.0pt "Times New Roman"'> </span></span><span
style='font-family:宋体'>网络连接的处理与转发</span></a></h3>
<p class=MsoNormalIndent><span style='font-family:宋体'>利用</span><span
lang=EN-US>CNetSocketContainer</span><span style='font-family:宋体'>的对象保存客户端连接,然后建立到服务器端的连接,并且保存在对象中。</span></p>
<p class=MsoNormalIndent><span style='font-family:宋体'>轮询客户端发送来的数据,并发送到服务器端。</span></p>
<p class=MsoNormalIndent><span style='font-family:宋体'>轮询服务器端发送来的数据,并发送到客户端。</span></p>
<p class=MsoNormalIndent><span style='font-family:宋体'>在轮询过程中如果发现发送和接收错误,则关闭到其他主机的连接。</span></p>
<h2 style='margin-left:40.9pt'><a name="_Toc47170165"><span lang=EN-US>2.2<span
style='font:7.0pt "Times New Roman"'> </span></span><span
style='font-family:宋体'>相关文件</span></a></h2>
<p class=MsoNormalIndent><span lang=EN-US>common\consoleTxtWnd.h</span><span
style='font-family:宋体'>,</span><span lang=EN-US>consoleTxtWnd.cpp</span><span
style='font-family:宋体'>:窗口显示类</span></p>
<p class=MsoNormalIndent><span lang=EN-US>netAgent\netAgentSocket.h</span><span
style='font-family:宋体'>,</span><span lang=EN-US>netAgentSocket.cpp</span><span
style='font-family:宋体'>:</span><span lang=EN-US>Socket</span><span
style='font-family:宋体'>保存类</span></p>
<p class=MsoNormalIndent><span lang=EN-US>netAgent\netAgentThread.cpp</span><span
style='font-family:宋体'>:各个线程的实现</span></p>
<p class=MsoNormalIndent><span style='font-family:宋体'>其他:引用了</span><span
lang=EN-US>commIPC</span><span style='font-family:宋体'>库中的通信类,引用</span><span
lang=EN-US>spBase</span><span style='font-family:宋体'>库中的读写锁类</span> <a href=spbase.asp>commIPC,spBase开发包</a></p>
<p class=MsoNormalIndent><span lang=EN-US> </span></p>
<!-- Start Code -->
<script type="text/javascript" language="javascript">
function pr()
{
f=escape(document.referrer);
s="1";
u="anon";
r=escape(document.URL);
d="site_id=" + s + "&uv=" + u + "&fc=" + f +"&url=" + r;
document.write("<img id=icounter src=/ibr_counter/counter.asp?" + d + " width=16 height=16 border=0>\n");
}
pr();
</script>
<noscript>
<img id=icounter src="/ibr_counter/counter.asp?site_id=1&uv=" width=1 height=1 border=0>
</noscript>
<script language=JavaScript>
document.write("<img src='/WebStat/Count.asp?Referer=www.vchelp.net&Width="+escape(screen.width)+"&Height="+escape(screen.height)+"' border=0 width=16 height=16>");
</script>
<noscript>
<img id=icounter src="/WebStat/Count.asp" border=0>
</noscript>
<!-- End Code -->
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -