diff --git a/ChangeLog.txt b/ChangeLog.txt
index ecf94f691..7063d5d29 100644
--- a/ChangeLog.txt
+++ b/ChangeLog.txt
@@ -1,3 +1,20 @@
+==========================================================================================
+v3.5.2 更新:
+==========================================================================================
+
+> 组件接口调整:
+-----------------
+1、IClient 组件 Start() 方法默认连接方式改为异步连接
+2、IClient 组件 Start() 方法增加可选参数 lpszBindAddress,设置绑定地址
+3、HP-Socket 4C 增加导出方法 HP_Client_StartWithBindAddress() 方法,可设置绑定地址
+4、IUdpCast 组件删除接口方法 Get/SetBindAddress()
+5、IServer 接口 增加 GetLocalAddress() 方法用于获取连接的本地地址信息
+6、增加全局函数 SYS_GetSocketLocalAddress() 和 SYS_GetSocketRemoteAddress() 分别用于获取 SOCKET 本地和远程地址信息
+
+> 升级说明:
+-----------------
+1、HP-Socket v3.5.2 完全兼容 HP-Socket v3.5.1 版本,可以直接替换升级
+
==========================================================================================
v3.5.1 更新:
==========================================================================================
diff --git a/Doc/HP-Socket Class Diagram - v3.5.jpg b/Doc/HP-Socket Class Diagram - v3.5.jpg
new file mode 100644
index 000000000..8315725a6
Binary files /dev/null and b/Doc/HP-Socket Class Diagram - v3.5.jpg differ
diff --git a/Doc/HP-Socket Class Diagram - v3.5.uml b/Doc/HP-Socket Class Diagram - v3.5.uml
new file mode 100644
index 000000000..70f17c5df
--- /dev/null
+++ b/Doc/HP-Socket Class Diagram - v3.5.uml
@@ -0,0 +1,29510 @@
+
+
+
+
+
+
+UMLStandard
+
+
+
+
+HP-Socket
+5
+
+Use Case Model
+UMLStandard
+useCaseModel
+eUBxTmzIc0q+cSu3hl5+hQAA
+
+
+Analysis Model
+UMLStandard
+analysisModel
+eUBxTmzIc0q+cSu3hl5+hQAA
+
+
+Design Model
+UMLStandard
+designModel
+eUBxTmzIc0q+cSu3hl5+hQAA
+8
+
+IAgent
+jvfBmo6uGkC61ckI99TMgAAA
+
+7r43eRqUAUeehz+M/cmZ+wAA
+13
+
+clMaroon
+$00B9FFFF
+10
+400
+212
+616
+612
+True
+SqNjwMrIrEaWmScJhNPQOwAA
+
+
+3
+IComplexSocket
+
+
+False
+
+
+False
+
+
+
+False
+SqNjwMrIrEaWmScJhNPQOwAA
+
+
+SqNjwMrIrEaWmScJhNPQOwAA
+
+
+False
+SqNjwMrIrEaWmScJhNPQOwAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+452
+912
+514
+68
+True
+tc20+9LmREuR1dUMSybNdQAA
+
+
+1
+IAgent
+
+
+False
+
+
+False
+
+
+
+False
+tc20+9LmREuR1dUMSybNdQAA
+
+
+tc20+9LmREuR1dUMSybNdQAA
+
+
+False
+tc20+9LmREuR1dUMSybNdQAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+708,912;708,823
+dx6I5RGr20SmTHCEMdZ9nAAA
+S5CdZWL+bEWmCJb9qIaNogAA
+QK3KaQ4YV0Wt4DUTuGttgwAA
+
+False
+1.5707963267949
+15
+dx6I5RGr20SmTHCEMdZ9nAAA
+
+
+False
+1.5707963267949
+30
+dx6I5RGr20SmTHCEMdZ9nAAA
+
+
+False
+-1.5707963267949
+15
+dx6I5RGr20SmTHCEMdZ9nAAA
+
+
+
+clMaroon
+$00ACFFD6
+10
+392
+1068
+630
+180
+True
+ilTzVOgexUSPHrK2FSqS9wAA
+
+
+1
+ITcpAgent
+
+
+False
+
+
+False
+
+
+
+False
+ilTzVOgexUSPHrK2FSqS9wAA
+
+
+ilTzVOgexUSPHrK2FSqS9wAA
+
+
+False
+ilTzVOgexUSPHrK2FSqS9wAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+707,1068;708,979
+T7qvCRD8oEeFVhOYfk7D4wAA
+QK3KaQ4YV0Wt4DUTuGttgwAA
+qWQ9xcWqTk+Q37ac+Zc5cwAA
+
+False
+1.5707963267949
+15
+T7qvCRD8oEeFVhOYfk7D4wAA
+
+
+False
+1.5707963267949
+30
+T7qvCRD8oEeFVhOYfk7D4wAA
+
+
+False
+-1.5707963267949
+15
+T7qvCRD8oEeFVhOYfk7D4wAA
+
+
+
+clMaroon
+$0000C4C4
+10
+820
+1268
+411
+84
+True
+BaqYQl/65Uy16GMJC7nLawAA
+
+
+1
+IPullSocket
+
+
+False
+
+
+False
+
+
+
+False
+BaqYQl/65Uy16GMJC7nLawAA
+
+
+BaqYQl/65Uy16GMJC7nLawAA
+
+
+False
+BaqYQl/65Uy16GMJC7nLawAA
+
+
+
+clMaroon
+$00FFD9FF
+10
+724
+1440
+279
+68
+True
+QvkeGvTpWU2SJ0MXVIx/AwAA
+
+
+1
+ITcpPullAgent
+
+
+False
+
+
+False
+
+
+
+False
+QvkeGvTpWU2SJ0MXVIx/AwAA
+
+
+QvkeGvTpWU2SJ0MXVIx/AwAA
+
+
+False
+QvkeGvTpWU2SJ0MXVIx/AwAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+896,1440;984,1351
+krwZJNbQpUee1OjG3HesgAAA
+XJoHYNGE7keWE488T/cGaQAA
++2HvTQsUAk+HjQ5fXiU8owAA
+
+False
+1.5707963267949
+15
+krwZJNbQpUee1OjG3HesgAAA
+
+
+False
+1.5707963267949
+30
+krwZJNbQpUee1OjG3HesgAAA
+
+
+False
+-1.5707963267949
+15
+krwZJNbQpUee1OjG3HesgAAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+847,1440;751,1247
+Vo9KdG21TU67s/EtgyfoVQAA
+qWQ9xcWqTk+Q37ac+Zc5cwAA
++2HvTQsUAk+HjQ5fXiU8owAA
+
+False
+1.5707963267949
+15
+Vo9KdG21TU67s/EtgyfoVQAA
+
+
+False
+1.5707963267949
+30
+Vo9KdG21TU67s/EtgyfoVQAA
+
+
+False
+-1.5707963267949
+15
+Vo9KdG21TU67s/EtgyfoVQAA
+
+
+
+clMaroon
+$0000C4C4
+10
+160
+1268
+332
+116
+True
+Pv24uWWaqUu82r7VGD3ZNwAA
+
+
+1
+IPackSocket
+
+
+False
+
+
+False
+
+
+
+False
+Pv24uWWaqUu82r7VGD3ZNwAA
+
+
+Pv24uWWaqUu82r7VGD3ZNwAA
+
+
+False
+Pv24uWWaqUu82r7VGD3ZNwAA
+
+
+
+clMaroon
+$00FFD9FF
+10
+408
+1440
+291
+68
+True
+vjFkGLWb/kSPpbp9R+skbAAA
+
+
+1
+ITcpPackAgent
+
+
+False
+
+
+False
+
+
+
+False
+vjFkGLWb/kSPpbp9R+skbAAA
+
+
+vjFkGLWb/kSPpbp9R+skbAAA
+
+
+False
+vjFkGLWb/kSPpbp9R+skbAAA
+
+
+
+clMaroon
+$00B9FFFF
+502,1440;414,1383
+WUHNHDfka0O+CbvKWj/7kQAA
+2NPkGxsE60eclahgOjVMgAAA
+mDfdT1ptZk64YFRjy+qMOgAA
+
+False
+1.5707963267949
+15
+WUHNHDfka0O+CbvKWj/7kQAA
+
+
+False
+1.5707963267949
+30
+WUHNHDfka0O+CbvKWj/7kQAA
+
+
+False
+-1.5707963267949
+15
+WUHNHDfka0O+CbvKWj/7kQAA
+
+
+
+clMaroon
+$00B9FFFF
+569,1440;662,1247
+lqZ7xgrWKkewtFXoEKU2+AAA
+qWQ9xcWqTk+Q37ac+Zc5cwAA
+mDfdT1ptZk64YFRjy+qMOgAA
+
+False
+1.5707963267949
+15
+lqZ7xgrWKkewtFXoEKU2+AAA
+
+
+False
+1.5707963267949
+30
+lqZ7xgrWKkewtFXoEKU2+AAA
+
+
+False
+-1.5707963267949
+15
+lqZ7xgrWKkewtFXoEKU2+AAA
+
+
+
+
+
+IServer
+jvfBmo6uGkC61ckI99TMgAAA
+
+XkkHyTpx50CZnVOHpJQXdAAA
+15
+
+clMaroon
+$00AAFFD5
+10
+796
+992
+356
+164
+True
+KqnhKB+uXkKxW6LqS8YzcgAA
+
+
+1
+IUdpServer
+
+
+False
+
+
+False
+
+
+
+False
+KqnhKB+uXkKxW6LqS8YzcgAA
+
+
+KqnhKB+uXkKxW6LqS8YzcgAA
+
+
+False
+KqnhKB+uXkKxW6LqS8YzcgAA
+
+
+
+clMaroon
+$00FFE1FF
+10
+692
+1420
+289
+68
+True
+gJKazn/X+U6+FJp/F2soRAAA
+
+
+1
+ITcpPullServer
+
+
+False
+
+
+False
+
+
+
+False
+gJKazn/X+U6+FJp/F2soRAAA
+
+
+gJKazn/X+U6+FJp/F2soRAAA
+
+
+False
+gJKazn/X+U6+FJp/F2soRAAA
+
+
+
+clMaroon
+$00AAFFD5
+10
+152
+992
+630
+212
+True
+YNdJIJRIm0SpW7CG17MtyAAA
+
+
+1
+ITcpServer
+
+
+False
+
+
+False
+
+
+
+False
+YNdJIJRIm0SpW7CG17MtyAAA
+
+
+YNdJIJRIm0SpW7CG17MtyAAA
+
+
+False
+YNdJIJRIm0SpW7CG17MtyAAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+802,1420;576,1203
+RvwWYNXraU2xkdsooYM/NwAA
+yPFqE92KlUeCTsjNeQePJAAA
+PK1lPcGwCkO4ClijCg6U4QAA
+
+False
+1.5707963267949
+15
+RvwWYNXraU2xkdsooYM/NwAA
+
+
+False
+1.5707963267949
+30
+RvwWYNXraU2xkdsooYM/NwAA
+
+
+False
+-1.5707963267949
+15
+RvwWYNXraU2xkdsooYM/NwAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+360
+824
+485
+68
+True
+GoHMKPRtzES/2hlDzLtwnAAA
+
+
+1
+IServer
+
+
+False
+
+
+False
+
+
+
+False
+GoHMKPRtzES/2hlDzLtwnAAA
+
+
+GoHMKPRtzES/2hlDzLtwnAAA
+
+
+False
+GoHMKPRtzES/2hlDzLtwnAAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+526,992;583,891
+qrDg6u3xU0KpgYiFoJBZ1AAA
+P2r46P+bY0avZFfVkwtncQAA
+yPFqE92KlUeCTsjNeQePJAAA
+
+False
+1.5707963267949
+15
+qrDg6u3xU0KpgYiFoJBZ1AAA
+
+
+False
+1.5707963267949
+30
+qrDg6u3xU0KpgYiFoJBZ1AAA
+
+
+False
+-1.5707963267949
+15
+qrDg6u3xU0KpgYiFoJBZ1AAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+834,992;660,891
+rcZqqPur/USLxxaOeNdjswAA
+P2r46P+bY0avZFfVkwtncQAA
+DCejEAT0mUabtDsSdi+dvQAA
+
+False
+1.5707963267949
+15
+rcZqqPur/USLxxaOeNdjswAA
+
+
+False
+1.5707963267949
+30
+rcZqqPur/USLxxaOeNdjswAA
+
+
+False
+-1.5707963267949
+15
+rcZqqPur/USLxxaOeNdjswAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+296
+116
+616
+612
+True
+SqNjwMrIrEaWmScJhNPQOwAA
+
+
+3
+IComplexSocket
+
+
+False
+
+
+False
+
+
+
+False
+SqNjwMrIrEaWmScJhNPQOwAA
+
+
+SqNjwMrIrEaWmScJhNPQOwAA
+
+
+False
+SqNjwMrIrEaWmScJhNPQOwAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+602,824;602,727
+9BTtNyRQHEu7yKoNswewcQAA
+MbT+AK7qSEilQO9f6kF5ugAA
+P2r46P+bY0avZFfVkwtncQAA
+
+False
+1.5707963267949
+15
+9BTtNyRQHEu7yKoNswewcQAA
+
+
+False
+1.5707963267949
+30
+9BTtNyRQHEu7yKoNswewcQAA
+
+
+False
+-1.5707963267949
+15
+9BTtNyRQHEu7yKoNswewcQAA
+
+
+
+clMaroon
+$0000C4C4
+10
+740
+1244
+411
+84
+True
+BaqYQl/65Uy16GMJC7nLawAA
+
+
+1
+IPullSocket
+
+
+False
+
+
+False
+
+
+
+False
+BaqYQl/65Uy16GMJC7nLawAA
+
+
+BaqYQl/65Uy16GMJC7nLawAA
+
+
+False
+BaqYQl/65Uy16GMJC7nLawAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+857,1420;918,1327
+ETiy7j/ak0iclwwFrOCPHwAA
+RHC6AHfVy0Gw4f4lr8UMCwAA
+PK1lPcGwCkO4ClijCg6U4QAA
+
+False
+1.5707963267949
+15
+ETiy7j/ak0iclwwFrOCPHwAA
+
+
+False
+1.5707963267949
+30
+ETiy7j/ak0iclwwFrOCPHwAA
+
+
+False
+-1.5707963267949
+15
+ETiy7j/ak0iclwwFrOCPHwAA
+
+
+
+clMaroon
+$0000C4C4
+10
+104
+1244
+332
+116
+True
+Pv24uWWaqUu82r7VGD3ZNwAA
+
+
+1
+IPackSocket
+
+
+False
+
+
+False
+
+
+
+False
+Pv24uWWaqUu82r7VGD3ZNwAA
+
+
+Pv24uWWaqUu82r7VGD3ZNwAA
+
+
+False
+Pv24uWWaqUu82r7VGD3ZNwAA
+
+
+
+clMaroon
+$00FFE1FF
+10
+316
+1420
+301
+68
+True
+aDgNVKZkT029alZKzju1xAAA
+
+
+1
+ITcpPackServer
+
+
+False
+
+
+False
+
+
+
+False
+aDgNVKZkT029alZKzju1xAAA
+
+
+aDgNVKZkT029alZKzju1xAAA
+
+
+False
+aDgNVKZkT029alZKzju1xAAA
+
+
+
+clMaroon
+$00B9FFFF
+423,1420;344,1359
+sgmcH4+s1Em05SzAjJdHjAAA
+XsluK/m59E+/IMf4Y9b0rAAA
+IxgSYDxQe0qqAConM0HORwAA
+
+False
+1.5707963267949
+15
+sgmcH4+s1Em05SzAjJdHjAAA
+
+
+False
+1.5707963267949
+30
+sgmcH4+s1Em05SzAjJdHjAAA
+
+
+False
+-1.5707963267949
+15
+sgmcH4+s1Em05SzAjJdHjAAA
+
+
+
+clMaroon
+$00B9FFFF
+466,1420;466,1203
+nzQ/3s2PQEG5Cz2AX+hkOgAA
+yPFqE92KlUeCTsjNeQePJAAA
+IxgSYDxQe0qqAConM0HORwAA
+
+False
+1.5707963267949
+15
+nzQ/3s2PQEG5Cz2AX+hkOgAA
+
+
+False
+1.5707963267949
+30
+nzQ/3s2PQEG5Cz2AX+hkOgAA
+
+
+False
+-1.5707963267949
+15
+nzQ/3s2PQEG5Cz2AX+hkOgAA
+
+
+
+
+
+IClient
+jvfBmo6uGkC61ckI99TMgAAA
+
+uCy/ysBYx02nqqthkKdfbgAA
+15
+
+clMaroon
+$00B9FFFF
+10
+744
+264
+503
+324
+True
+R8hLgFt1fEaSSxBO7KbEBQAA
+
+
+1
+IClient
+
+
+False
+
+
+False
+
+
+
+False
+R8hLgFt1fEaSSxBO7KbEBQAA
+
+
+R8hLgFt1fEaSSxBO7KbEBQAA
+
+
+False
+R8hLgFt1fEaSSxBO7KbEBQAA
+
+
+
+clMaroon
+$00B0FFD8
+10
+404
+668
+510
+148
+True
+CqUqbTfjd0mBGFOXrmWVDgAA
+
+
+1
+ITcpClient
+
+
+False
+
+
+False
+
+
+
+False
+CqUqbTfjd0mBGFOXrmWVDgAA
+
+
+CqUqbTfjd0mBGFOXrmWVDgAA
+
+
+False
+CqUqbTfjd0mBGFOXrmWVDgAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+736,668;822,587
+dOpAHC5JfkymmNyAgeRwWAAA
+IxwL95gLAk2VVqCaT07mZwAA
+nQs4ohjRpkGJ66FalNzxdwAA
+
+False
+1.5707963267949
+15
+dOpAHC5JfkymmNyAgeRwWAAA
+
+
+False
+1.5707963267949
+30
+dOpAHC5JfkymmNyAgeRwWAAA
+
+
+False
+-1.5707963267949
+15
+dOpAHC5JfkymmNyAgeRwWAAA
+
+
+
+clMaroon
+$00B0FFD8
+10
+1160
+668
+356
+132
+True
+s/XSjWMZB0WwUzzarQOzNgAA
+
+
+1
+IUdpClient
+
+
+False
+
+
+False
+
+
+
+False
+s/XSjWMZB0WwUzzarQOzNgAA
+
+
+s/XSjWMZB0WwUzzarQOzNgAA
+
+
+False
+s/XSjWMZB0WwUzzarQOzNgAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+1265,668;1175,587
+VhVmNVhKIEyRJWflThCsqQAA
+IxwL95gLAk2VVqCaT07mZwAA
+F1H1FgAQo0KwYhAVsIoSYQAA
+
+False
+1.5707963267949
+15
+VhVmNVhKIEyRJWflThCsqQAA
+
+
+False
+1.5707963267949
+30
+VhVmNVhKIEyRJWflThCsqQAA
+
+
+False
+-1.5707963267949
+15
+VhVmNVhKIEyRJWflThCsqQAA
+
+
+
+clMaroon
+$00B0FFD8
+10
+1160
+856
+496
+244
+True
+6HMIzI9avUGHDCpvqmkdqQAA
+
+
+1
+IUdpCast
+
+
+False
+
+
+False
+
+
+
+False
+6HMIzI9avUGHDCpvqmkdqQAA
+
+
+6HMIzI9avUGHDCpvqmkdqQAA
+
+
+False
+6HMIzI9avUGHDCpvqmkdqQAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+1160,976;1140,976;1038,587
+MejA8cLC00G/Y3QcvCU6BgAA
+IxwL95gLAk2VVqCaT07mZwAA
+pliWbIwkj0yRgSGaHICnEAAA
+
+False
+1.5707963267949
+15
+MejA8cLC00G/Y3QcvCU6BgAA
+
+
+False
+1.5707963267949
+30
+MejA8cLC00G/Y3QcvCU6BgAA
+
+
+False
+-1.5707963267949
+15
+MejA8cLC00G/Y3QcvCU6BgAA
+
+
+
+clMaroon
+$0000C4C4
+10
+796
+852
+291
+84
+True
+LPfLjDLmzkKy/sn51dyX7gAA
+
+
+1
+IPullClient
+
+
+False
+
+
+False
+
+
+
+False
+LPfLjDLmzkKy/sn51dyX7gAA
+
+
+LPfLjDLmzkKy/sn51dyX7gAA
+
+
+False
+LPfLjDLmzkKy/sn51dyX7gAA
+
+
+
+clMaroon
+$00FFE1FF
+10
+724
+1032
+265
+68
+True
+SjUoRiw3TUOE/FQirpeMogAA
+
+
+1
+ITcpPullClient
+
+
+False
+
+
+False
+
+
+
+False
+SjUoRiw3TUOE/FQirpeMogAA
+
+
+SjUoRiw3TUOE/FQirpeMogAA
+
+
+False
+SjUoRiw3TUOE/FQirpeMogAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+872,1032;920,935
+wIyBqLGeaEauN2RIkujQrAAA
+KeV/t2xsK0+PmCUPXcqplgAA
+zqmdKXYEt0GXqYV17S23CAAA
+
+False
+1.5707963267949
+15
+wIyBqLGeaEauN2RIkujQrAAA
+
+
+False
+1.5707963267949
+30
+wIyBqLGeaEauN2RIkujQrAAA
+
+
+False
+-1.5707963267949
+15
+wIyBqLGeaEauN2RIkujQrAAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+836,1032;703,815
+GJ1pEOa7xE+Vx6DHIVvLbwAA
+nQs4ohjRpkGJ66FalNzxdwAA
+zqmdKXYEt0GXqYV17S23CAAA
+
+False
+1.5707963267949
+15
+GJ1pEOa7xE+Vx6DHIVvLbwAA
+
+
+False
+1.5707963267949
+30
+GJ1pEOa7xE+Vx6DHIVvLbwAA
+
+
+False
+-1.5707963267949
+15
+GJ1pEOa7xE+Vx6DHIVvLbwAA
+
+
+
+clMaroon
+$0000C4C4
+10
+252
+852
+332
+116
+True
+tvyRlzR70kaEb8akK1WldwAA
+
+
+1
+IPackClient
+
+
+False
+
+
+False
+
+
+
+False
+tvyRlzR70kaEb8akK1WldwAA
+
+
+tvyRlzR70kaEb8akK1WldwAA
+
+
+False
+tvyRlzR70kaEb8akK1WldwAA
+
+
+
+clMaroon
+$00FFE1FF
+10
+432
+1032
+277
+68
+True
+NI0md/XcXk+UFEOqL+89owAA
+
+
+1
+ITcpPackClient
+
+
+False
+
+
+False
+
+
+
+False
+NI0md/XcXk+UFEOqL+89owAA
+
+
+NI0md/XcXk+UFEOqL+89owAA
+
+
+False
+NI0md/XcXk+UFEOqL+89owAA
+
+
+
+clMaroon
+$00B9FFFF
+538,1032;474,967
+xly9lJtUukKwQ90VKrZR2AAA
+iW4CiDDhyEqlkb7itLSOuQAA
+q5juGoWzLEGEpbKgLo4flwAA
+
+False
+1.5707963267949
+15
+xly9lJtUukKwQ90VKrZR2AAA
+
+
+False
+1.5707963267949
+30
+xly9lJtUukKwQ90VKrZR2AAA
+
+
+False
+-1.5707963267949
+15
+xly9lJtUukKwQ90VKrZR2AAA
+
+
+
+clMaroon
+$00B9FFFF
+579,1032;638,815
+l44zgodkDEuj17c7XdoPSQAA
+nQs4ohjRpkGJ66FalNzxdwAA
+q5juGoWzLEGEpbKgLo4flwAA
+
+False
+1.5707963267949
+15
+l44zgodkDEuj17c7XdoPSQAA
+
+
+False
+1.5707963267949
+30
+l44zgodkDEuj17c7XdoPSQAA
+
+
+False
+-1.5707963267949
+15
+l44zgodkDEuj17c7XdoPSQAA
+
+
+
+
+
+IServerListener
+jvfBmo6uGkC61ckI99TMgAAA
+
+xn9zLgCPSEOGJJQt03HCoAAA
+7
+
+clMaroon
+$00B9FFFF
+10
+516
+132
+571
+132
+9FsvxqZjkEyUqc9w2NDcQgAA
+
+
+1
+IComplexSocketListener
+
+
+False
+
+
+False
+
+
+
+False
+9FsvxqZjkEyUqc9w2NDcQgAA
+
+
+9FsvxqZjkEyUqc9w2NDcQgAA
+
+
+False
+9FsvxqZjkEyUqc9w2NDcQgAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+640
+328
+321
+52
+SX/KZkmsDk+r8uamHH4ZLgAA
+
+
+1
+IServerListener
+
+
+False
+
+
+False
+
+
+
+False
+SX/KZkmsDk+r8uamHH4ZLgAA
+
+
+SX/KZkmsDk+r8uamHH4ZLgAA
+
+
+False
+SX/KZkmsDk+r8uamHH4ZLgAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+800,328;800,263
+sCzG9DqxZkGTaKemcfKYcAAA
+EY7frgNjn025AVRzjddHWgAA
+1XW3u/7OaUqWSnACglXKhgAA
+
+False
+1.5707963267949
+15
+sCzG9DqxZkGTaKemcfKYcAAA
+
+
+False
+1.5707963267949
+30
+sCzG9DqxZkGTaKemcfKYcAAA
+
+
+False
+-1.5707963267949
+15
+sCzG9DqxZkGTaKemcfKYcAAA
+
+
+
+clMaroon
+$00FFFFDF
+10
+784
+444
+452
+52
+True
+ZMn2cmFZr0+GuJk5rQoyDgAA
+
+
+1
+IUdpServerListener
+
+
+False
+
+
+False
+
+
+
+False
+ZMn2cmFZr0+GuJk5rQoyDgAA
+
+
+ZMn2cmFZr0+GuJk5rQoyDgAA
+
+
+False
+ZMn2cmFZr0+GuJk5rQoyDgAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+964,444;847,379
+xHgTfxe+SkyBHjq4gN29qAAA
+1XW3u/7OaUqWSnACglXKhgAA
+Zp5gWO2/s0iv2bqlRzbEeAAA
+
+False
+1.5707963267949
+15
+xHgTfxe+SkyBHjq4gN29qAAA
+
+
+False
+1.5707963267949
+30
+xHgTfxe+SkyBHjq4gN29qAAA
+
+
+False
+-1.5707963267949
+15
+xHgTfxe+SkyBHjq4gN29qAAA
+
+
+
+clMaroon
+$00FFFFDF
+10
+376
+444
+400
+68
+True
+h8NmVuBtVUWgcCSKCdxePgAA
+
+
+1
+ITcpServerListener
+
+
+False
+
+
+False
+
+
+
+False
+h8NmVuBtVUWgcCSKCdxePgAA
+
+
+h8NmVuBtVUWgcCSKCdxePgAA
+
+
+False
+h8NmVuBtVUWgcCSKCdxePgAA
+
+
+
+clMaroon
+$00B9FFFF
+635,444;753,379
+2uOeA48ekEWyQBc6HVdLyAAA
+1XW3u/7OaUqWSnACglXKhgAA
+1gWIbf39QUqjUn/XGJtmLwAA
+
+False
+1.5707963267949
+15
+2uOeA48ekEWyQBc6HVdLyAAA
+
+
+False
+1.5707963267949
+30
+2uOeA48ekEWyQBc6HVdLyAAA
+
+
+False
+-1.5707963267949
+15
+2uOeA48ekEWyQBc6HVdLyAAA
+
+
+
+
+
+IAgentListener
+jvfBmo6uGkC61ckI99TMgAAA
+
+e6yvsmhXAEqtOj6MD3c4IAAA
+5
+
+clMaroon
+$00B9FFFF
+10
+352
+156
+571
+132
+True
+9FsvxqZjkEyUqc9w2NDcQgAA
+
+
+1
+IComplexSocketListener
+
+
+False
+
+
+False
+
+
+
+False
+9FsvxqZjkEyUqc9w2NDcQgAA
+
+
+9FsvxqZjkEyUqc9w2NDcQgAA
+
+
+False
+9FsvxqZjkEyUqc9w2NDcQgAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+416
+372
+444
+68
+True
+lJ5FZia7y0evV31w/xLmsAAA
+
+
+1
+IAgentListener
+
+
+False
+
+
+False
+
+
+
+False
+lJ5FZia7y0evV31w/xLmsAAA
+
+
+lJ5FZia7y0evV31w/xLmsAAA
+
+
+False
+lJ5FZia7y0evV31w/xLmsAAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+637,372;637,287
+u7n8K/7SVEOrbQ7qqBgw5gAA
+DW2yUJIctUaEVCg8tu3QxAAA
+J0BFOQn6q0qGw65bKVVPEwAA
+
+False
+1.5707963267949
+15
+u7n8K/7SVEOrbQ7qqBgw5gAA
+
+
+False
+1.5707963267949
+30
+u7n8K/7SVEOrbQ7qqBgw5gAA
+
+
+False
+-1.5707963267949
+15
+u7n8K/7SVEOrbQ7qqBgw5gAA
+
+
+
+clMaroon
+$00FFFFE1
+10
+476
+512
+317
+52
+True
+skl0Nm/UIUCTsqkUAIXmzAAA
+
+
+1
+ITcpAgentListener
+
+
+False
+
+
+False
+
+
+
+False
+skl0Nm/UIUCTsqkUAIXmzAAA
+
+
+skl0Nm/UIUCTsqkUAIXmzAAA
+
+
+False
+skl0Nm/UIUCTsqkUAIXmzAAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+635,512;636,439
+9cmaeBE4CUK4eiysDAdUBAAA
+J0BFOQn6q0qGw65bKVVPEwAA
+amWQQ3AliU6mio+Jb/FaJAAA
+
+False
+1.5707963267949
+15
+9cmaeBE4CUK4eiysDAdUBAAA
+
+
+False
+1.5707963267949
+30
+9cmaeBE4CUK4eiysDAdUBAAA
+
+
+False
+-1.5707963267949
+15
+9cmaeBE4CUK4eiysDAdUBAAA
+
+
+
+
+
+IClientListener
+jvfBmo6uGkC61ckI99TMgAAA
+
+l4NlnvJShk695D9BRlEbzAAA
+7
+
+clMaroon
+$00B9FFFF
+10
+416
+120
+543
+148
+BZTI/4OA7kG+nFfsclldCgAA
+
+
+1
+IClientListener
+
+
+False
+
+
+False
+
+
+
+False
+BZTI/4OA7kG+nFfsclldCgAA
+
+
+BZTI/4OA7kG+nFfsclldCgAA
+
+
+False
+BZTI/4OA7kG+nFfsclldCgAA
+
+
+
+clMaroon
+$00FFFFEC
+10
+400
+364
+289
+52
+HwLi+AyuiUa754Eutz2k5AAA
+
+
+1
+ITcpClientListener
+
+
+False
+
+
+False
+
+
+
+False
+HwLi+AyuiUa754Eutz2k5AAA
+
+
+HwLi+AyuiUa754Eutz2k5AAA
+
+
+False
+HwLi+AyuiUa754Eutz2k5AAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+562,364;633,267
+LHdDVg405EStLqtC9ACaJgAA
+q36mxdXyZE6WTwmuKuQ2vAAA
+e/+kw8IbbkOctNvnX+LZsQAA
+
+False
+1.5707963267949
+15
+LHdDVg405EStLqtC9ACaJgAA
+
+
+False
+1.5707963267949
+30
+LHdDVg405EStLqtC9ACaJgAA
+
+
+False
+-1.5707963267949
+15
+LHdDVg405EStLqtC9ACaJgAA
+
+
+
+clMaroon
+$00FFFFEC
+10
+856
+364
+121
+36
+r22NFz2+L0aq+kmESgCiYAAA
+
+
+1
+IUdpCastListener
+
+
+False
+
+
+False
+
+
+
+False
+r22NFz2+L0aq+kmESgCiYAAA
+
+
+r22NFz2+L0aq+kmESgCiYAAA
+
+
+False
+r22NFz2+L0aq+kmESgCiYAAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+895,364;777,267
+iH3ueDodB0OuqZ5awdjDeQAA
+q36mxdXyZE6WTwmuKuQ2vAAA
+i1mju6goyUCpVQPExOMCbwAA
+
+False
+1.5707963267949
+15
+iH3ueDodB0OuqZ5awdjDeQAA
+
+
+False
+1.5707963267949
+30
+iH3ueDodB0OuqZ5awdjDeQAA
+
+
+False
+-1.5707963267949
+15
+iH3ueDodB0OuqZ5awdjDeQAA
+
+
+
+clMaroon
+$00FFFFEC
+10
+712
+364
+128
+36
+/JHLRlaovkibrttO8nZPPgAA
+
+
+1
+IUdpClientListener
+
+
+False
+
+
+False
+
+
+
+False
+/JHLRlaovkibrttO8nZPPgAA
+
+
+/JHLRlaovkibrttO8nZPPgAA
+
+
+False
+/JHLRlaovkibrttO8nZPPgAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+767,364;722,267
+sN55Dgbmo0WZvNqCj0OqQwAA
+q36mxdXyZE6WTwmuKuQ2vAAA
+giFfOL+L5EqS2RmY8ylUDQAA
+
+False
+1.5707963267949
+15
+sN55Dgbmo0WZvNqCj0OqQwAA
+
+
+False
+1.5707963267949
+30
+sN55Dgbmo0WZvNqCj0OqQwAA
+
+
+False
+-1.5707963267949
+15
+sN55Dgbmo0WZvNqCj0OqQwAA
+
+
+
+
+
+HP-Socket Class Diagram - v3.5
+jvfBmo6uGkC61ckI99TMgAAA
+
+ze/Hc/i6d0uBL3aw+cFlmwAA
+114
+
+clMaroon
+$00EDDADA
+10
+304
+1988
+118
+116
+True
+False
+3KsfqnlMb0ieGw/IAO5hFQAA
+
+
+1
+EnServiceState
+
+
+<<enumeration>>
+
+
+False
+
+
+
+3KsfqnlMb0ieGw/IAO5hFQAA
+
+
+False
+3KsfqnlMb0ieGw/IAO5hFQAA
+
+
+
+clMaroon
+$00EDDADA
+10
+304
+2128
+133
+148
+True
+False
+bcrguJxo002HtvMUNvyx5QAA
+
+
+1
+EnSocketOperation
+
+
+<<enumeration>>
+
+
+False
+
+
+
+bcrguJxo002HtvMUNvyx5QAA
+
+
+False
+bcrguJxo002HtvMUNvyx5QAA
+
+
+
+clMaroon
+$00EDDADA
+10
+496
+1988
+118
+100
+True
+False
+2khtjHI2AUSz1nm7UQu8uwAA
+
+
+1
+EnHandleResult
+
+
+<<enumeration>>
+
+
+False
+
+
+
+2khtjHI2AUSz1nm7UQu8uwAA
+
+
+False
+2khtjHI2AUSz1nm7UQu8uwAA
+
+
+
+clMaroon
+$00EDDADA
+10
+492
+2128
+156
+100
+True
+False
+VQDDk4BU6UmBmig6SmOuoQAA
+
+
+1
+EnFetchResult
+
+
+<<enumeration>>
+
+
+False
+
+
+
+VQDDk4BU6UmBmig6SmOuoQAA
+
+
+False
+VQDDk4BU6UmBmig6SmOuoQAA
+
+
+
+clMaroon
+$00EDDADA
+10
+716
+1988
+118
+100
+True
+False
+p4RvBvwp3kOxyo/4mj2ZKwAA
+
+
+1
+EnSendPolicy
+
+
+<<enumeration>>
+
+
+False
+
+
+
+p4RvBvwp3kOxyo/4mj2ZKwAA
+
+
+False
+p4RvBvwp3kOxyo/4mj2ZKwAA
+
+
+
+clMaroon
+$00EDDADA
+10
+884
+1988
+198
+308
+True
+False
+R9EXi7T78E6Gt882nRMyDwAA
+
+
+1
+EnSocketError
+
+
+<<enumeration>>
+
+
+False
+
+
+
+R9EXi7T78E6Gt882nRMyDwAA
+
+
+False
+R9EXi7T78E6Gt882nRMyDwAA
+
+
+
+clMaroon
+$00EDDADA
+10
+716
+2128
+118
+84
+True
+False
+6zImDSI92UG9tawjYrSv0AAA
+
+
+1
+EnCastMode
+
+
+<<enumeration>>
+
+
+False
+
+
+
+6zImDSI92UG9tawjYrSv0AAA
+
+
+False
+6zImDSI92UG9tawjYrSv0AAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+2132
+8
+239
+132
+True
+False
+9FsvxqZjkEyUqc9w2NDcQgAA
+
+
+1
+IComplexSocketListener
+
+
+False
+
+
+False
+
+
+
+False
+9FsvxqZjkEyUqc9w2NDcQgAA
+
+
+9FsvxqZjkEyUqc9w2NDcQgAA
+
+
+False
+9FsvxqZjkEyUqc9w2NDcQgAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+2064
+888
+122
+52
+True
+False
+SX/KZkmsDk+r8uamHH4ZLgAA
+
+
+1
+IServerListener
+
+
+False
+
+
+False
+
+
+
+False
+SX/KZkmsDk+r8uamHH4ZLgAA
+
+
+SX/KZkmsDk+r8uamHH4ZLgAA
+
+
+False
+SX/KZkmsDk+r8uamHH4ZLgAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+2128,888;2241,139
+sCzG9DqxZkGTaKemcfKYcAAA
+gL3x0HKKs0C7DDVK9HdhLwAA
+yfVKcgxjhUa+TjjPZrtVYQAA
+
+False
+1.5707963267949
+15
+sCzG9DqxZkGTaKemcfKYcAAA
+
+
+False
+1.5707963267949
+30
+sCzG9DqxZkGTaKemcfKYcAAA
+
+
+False
+-1.5707963267949
+15
+sCzG9DqxZkGTaKemcfKYcAAA
+
+
+
+clMaroon
+$00BDFFDE
+10
+1960
+1072
+134
+68
+True
+False
+h8NmVuBtVUWgcCSKCdxePgAA
+
+
+1
+ITcpServerListener
+
+
+False
+
+
+False
+
+
+
+False
+h8NmVuBtVUWgcCSKCdxePgAA
+
+
+h8NmVuBtVUWgcCSKCdxePgAA
+
+
+False
+h8NmVuBtVUWgcCSKCdxePgAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+2043,1072;2111,939
+2uOeA48ekEWyQBc6HVdLyAAA
+yfVKcgxjhUa+TjjPZrtVYQAA
+bxQFxtW+e0KFZlCcgFO9AAAA
+
+False
+1.5707963267949
+15
+2uOeA48ekEWyQBc6HVdLyAAA
+
+
+False
+1.5707963267949
+30
+2uOeA48ekEWyQBc6HVdLyAAA
+
+
+False
+-1.5707963267949
+15
+2uOeA48ekEWyQBc6HVdLyAAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+1956
+1408
+137
+132
+True
+False
+nhHxAccKxEm2g0sPkFAnhwAA
+
+
+1
+CTcpServerListener
+
+
+False
+
+
+False
+
+
+
+False
+nhHxAccKxEm2g0sPkFAnhwAA
+
+
+nhHxAccKxEm2g0sPkFAnhwAA
+
+
+False
+nhHxAccKxEm2g0sPkFAnhwAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+2024,1408;2026,1139
+oU9IW4eh8ESLIhPxMDNlogAA
+bxQFxtW+e0KFZlCcgFO9AAAA
+afZfzoCg4Eq/XSFKvRAWKAAA
+
+False
+1.5707963267949
+15
+oU9IW4eh8ESLIhPxMDNlogAA
+
+
+False
+1.5707963267949
+30
+oU9IW4eh8ESLIhPxMDNlogAA
+
+
+False
+-1.5707963267949
+15
+oU9IW4eh8ESLIhPxMDNlogAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+1944
+2668
+159
+68
+True
+False
+9yFTOYs1vEa8s69V7MjeDgAA
+
+
+1
+CTcpPullServerListener
+
+
+False
+
+
+False
+
+
+
+False
+9yFTOYs1vEa8s69V7MjeDgAA
+
+
+9yFTOYs1vEa8s69V7MjeDgAA
+
+
+False
+9yFTOYs1vEa8s69V7MjeDgAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+2023,2668;2024,1539
+08VC9kxGKEmdHNOlu6NmbwAA
+afZfzoCg4Eq/XSFKvRAWKAAA
+120BkdYky02f0xbh3EF3XwAA
+
+False
+1.5707963267949
+15
+08VC9kxGKEmdHNOlu6NmbwAA
+
+
+False
+1.5707963267949
+30
+08VC9kxGKEmdHNOlu6NmbwAA
+
+
+False
+-1.5707963267949
+15
+08VC9kxGKEmdHNOlu6NmbwAA
+
+
+
+clMaroon
+$00BDFFDE
+10
+2144
+1072
+136
+52
+True
+False
+ZMn2cmFZr0+GuJk5rQoyDgAA
+
+
+1
+IUdpServerListener
+
+
+False
+
+
+False
+
+
+
+False
+ZMn2cmFZr0+GuJk5rQoyDgAA
+
+
+ZMn2cmFZr0+GuJk5rQoyDgAA
+
+
+False
+ZMn2cmFZr0+GuJk5rQoyDgAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+2199,1072;2136,939
+xHgTfxe+SkyBHjq4gN29qAAA
+yfVKcgxjhUa+TjjPZrtVYQAA
+GAyMC/pBC0uNZTrkQ2VX4wAA
+
+False
+1.5707963267949
+15
+xHgTfxe+SkyBHjq4gN29qAAA
+
+
+False
+1.5707963267949
+30
+xHgTfxe+SkyBHjq4gN29qAAA
+
+
+False
+-1.5707963267949
+15
+xHgTfxe+SkyBHjq4gN29qAAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+2140
+1408
+139
+116
+True
+False
+Z797Ei2tSUi6O/GTUGUZfgAA
+
+
+1
+CUdpServerListener
+
+
+False
+
+
+False
+
+
+
+False
+Z797Ei2tSUi6O/GTUGUZfgAA
+
+
+Z797Ei2tSUi6O/GTUGUZfgAA
+
+
+False
+Z797Ei2tSUi6O/GTUGUZfgAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+2209,1408;2211,1123
+7wiMv4rx/0CjGXfkMJ+fBgAA
+GAyMC/pBC0uNZTrkQ2VX4wAA
+58PT+RQQQEeK5sPeQ8LchgAA
+
+False
+1.5707963267949
+15
+7wiMv4rx/0CjGXfkMJ+fBgAA
+
+
+False
+1.5707963267949
+30
+7wiMv4rx/0CjGXfkMJ+fBgAA
+
+
+False
+-1.5707963267949
+15
+7wiMv4rx/0CjGXfkMJ+fBgAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+2332
+888
+135
+68
+True
+False
+lJ5FZia7y0evV31w/xLmsAAA
+
+
+1
+IAgentListener
+
+
+False
+
+
+False
+
+
+
+False
+lJ5FZia7y0evV31w/xLmsAAA
+
+
+lJ5FZia7y0evV31w/xLmsAAA
+
+
+False
+lJ5FZia7y0evV31w/xLmsAAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+2393,888;2262,139
+u7n8K/7SVEOrbQ7qqBgw5gAA
+gL3x0HKKs0C7DDVK9HdhLwAA
+AD2hOL2vpE+3hsFwE/MFuwAA
+
+False
+1.5707963267949
+15
+u7n8K/7SVEOrbQ7qqBgw5gAA
+
+
+False
+1.5707963267949
+30
+u7n8K/7SVEOrbQ7qqBgw5gAA
+
+
+False
+-1.5707963267949
+15
+u7n8K/7SVEOrbQ7qqBgw5gAA
+
+
+
+clMaroon
+$00BDFFDE
+10
+2332
+1072
+130
+52
+True
+False
+skl0Nm/UIUCTsqkUAIXmzAAA
+
+
+1
+ITcpAgentListener
+
+
+False
+
+
+False
+
+
+
+False
+skl0Nm/UIUCTsqkUAIXmzAAA
+
+
+skl0Nm/UIUCTsqkUAIXmzAAA
+
+
+False
+skl0Nm/UIUCTsqkUAIXmzAAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+2396,1072;2398,955
+9cmaeBE4CUK4eiysDAdUBAAA
+AD2hOL2vpE+3hsFwE/MFuwAA
+lZ1Q7w+edEej4hQluAnhMgAA
+
+False
+1.5707963267949
+15
+9cmaeBE4CUK4eiysDAdUBAAA
+
+
+False
+1.5707963267949
+30
+9cmaeBE4CUK4eiysDAdUBAAA
+
+
+False
+-1.5707963267949
+15
+9cmaeBE4CUK4eiysDAdUBAAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+2328
+1408
+135
+132
+True
+False
+HjFZEYW1wEOsKFuTmPnHegAA
+
+
+1
+CTcpAgentListener
+
+
+False
+
+
+False
+
+
+
+False
+HjFZEYW1wEOsKFuTmPnHegAA
+
+
+HjFZEYW1wEOsKFuTmPnHegAA
+
+
+False
+HjFZEYW1wEOsKFuTmPnHegAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+2395,1408;2396,1123
+RRh8s6Oze0Sz3Sygnu9oMQAA
+lZ1Q7w+edEej4hQluAnhMgAA
+geKQC6XZkEefI3E4l/VkGAAA
+
+False
+1.5707963267949
+15
+RRh8s6Oze0Sz3Sygnu9oMQAA
+
+
+False
+1.5707963267949
+30
+RRh8s6Oze0Sz3Sygnu9oMQAA
+
+
+False
+-1.5707963267949
+15
+RRh8s6Oze0Sz3Sygnu9oMQAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+2312
+2668
+155
+68
+True
+False
+hNuH1fWUHU2IT4Poty2GiwAA
+
+
+1
+CTcpPullAgentListener
+
+
+False
+
+
+False
+
+
+
+False
+hNuH1fWUHU2IT4Poty2GiwAA
+
+
+hNuH1fWUHU2IT4Poty2GiwAA
+
+
+False
+hNuH1fWUHU2IT4Poty2GiwAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+2389,2668;2395,1539
+xj1q7c1vdUK4s8CkFyDE3wAA
+geKQC6XZkEefI3E4l/VkGAAA
+eYGlKkdZLEutBTtuUOVCFAAA
+
+False
+1.5707963267949
+15
+xj1q7c1vdUK4s8CkFyDE3wAA
+
+
+False
+1.5707963267949
+30
+xj1q7c1vdUK4s8CkFyDE3wAA
+
+
+False
+-1.5707963267949
+15
+xj1q7c1vdUK4s8CkFyDE3wAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+1368
+332
+156
+324
+True
+False
+R8hLgFt1fEaSSxBO7KbEBQAA
+
+
+1
+IClient
+
+
+False
+
+
+False
+
+
+
+False
+R8hLgFt1fEaSSxBO7KbEBQAA
+
+
+R8hLgFt1fEaSSxBO7KbEBQAA
+
+
+False
+R8hLgFt1fEaSSxBO7KbEBQAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+704
+332
+184
+148
+True
+False
+BZTI/4OA7kG+nFfsclldCgAA
+
+
+1
+IClientListener
+
+
+False
+
+
+False
+
+
+
+False
+BZTI/4OA7kG+nFfsclldCgAA
+
+
+BZTI/4OA7kG+nFfsclldCgAA
+
+
+False
+BZTI/4OA7kG+nFfsclldCgAA
+
+
+
+clMaroon
+$00BDFFDE
+10
+543
+1072
+126
+52
+True
+False
+HwLi+AyuiUa754Eutz2k5AAA
+
+
+1
+ITcpClientListener
+
+
+False
+
+
+False
+
+
+
+False
+HwLi+AyuiUa754Eutz2k5AAA
+
+
+HwLi+AyuiUa754Eutz2k5AAA
+
+
+False
+HwLi+AyuiUa754Eutz2k5AAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+612,1072;775,479
+LHdDVg405EStLqtC9ACaJgAA
+KrTYF4Cl0UWAT3s9Q59oBAAA
+lkeOHiiD8k61jW8z3Jdf1AAA
+
+False
+1.5707963267949
+15
+LHdDVg405EStLqtC9ACaJgAA
+
+
+False
+1.5707963267949
+30
+LHdDVg405EStLqtC9ACaJgAA
+
+
+False
+-1.5707963267949
+15
+LHdDVg405EStLqtC9ACaJgAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+536
+1408
+135
+116
+True
+False
+c38EVYXmckWErbW5Cl4UwgAA
+
+
+1
+CTcpClientListener
+
+
+False
+
+
+False
+
+
+
+False
+c38EVYXmckWErbW5Cl4UwgAA
+
+
+c38EVYXmckWErbW5Cl4UwgAA
+
+
+False
+c38EVYXmckWErbW5Cl4UwgAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+603,1408;605,1123
+jMwPdcNgf0KaJMKQBOazIgAA
+lkeOHiiD8k61jW8z3Jdf1AAA
+JvAeKTqBzE+W2Tw+N4ESXQAA
+
+False
+1.5707963267949
+15
+jMwPdcNgf0KaJMKQBOazIgAA
+
+
+False
+1.5707963267949
+30
+jMwPdcNgf0KaJMKQBOazIgAA
+
+
+False
+-1.5707963267949
+15
+jMwPdcNgf0KaJMKQBOazIgAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+528
+1656
+151
+68
+True
+False
+4OTsa4LGqUqntun16mJ7kAAA
+
+
+1
+CTcpPullClientListener
+
+
+False
+
+
+False
+
+
+
+False
+4OTsa4LGqUqntun16mJ7kAAA
+
+
+4OTsa4LGqUqntun16mJ7kAAA
+
+
+False
+4OTsa4LGqUqntun16mJ7kAAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+603,1656;603,1523
+x9j97vQnoEStugksSdPSBwAA
+JvAeKTqBzE+W2Tw+N4ESXQAA
+7UPYyBmTk0StzHZNW+YJswAA
+
+False
+1.5707963267949
+15
+x9j97vQnoEStugksSdPSBwAA
+
+
+False
+1.5707963267949
+30
+x9j97vQnoEStugksSdPSBwAA
+
+
+False
+-1.5707963267949
+15
+x9j97vQnoEStugksSdPSBwAA
+
+
+
+clMaroon
+$00BDFFDE
+10
+732
+1072
+128
+36
+True
+False
+/JHLRlaovkibrttO8nZPPgAA
+
+
+1
+IUdpClientListener
+
+
+False
+
+
+False
+
+
+
+False
+/JHLRlaovkibrttO8nZPPgAA
+
+
+/JHLRlaovkibrttO8nZPPgAA
+
+
+False
+/JHLRlaovkibrttO8nZPPgAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+795,1072;795,479
+sN55Dgbmo0WZvNqCj0OqQwAA
+KrTYF4Cl0UWAT3s9Q59oBAAA
+4X4YjiGr1keUOnRkcKUhTQAA
+
+False
+1.5707963267949
+15
+sN55Dgbmo0WZvNqCj0OqQwAA
+
+
+False
+1.5707963267949
+30
+sN55Dgbmo0WZvNqCj0OqQwAA
+
+
+False
+-1.5707963267949
+15
+sN55Dgbmo0WZvNqCj0OqQwAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+729
+1407
+135
+100
+True
+False
+eLrcJo0DgE2AjvOF61yczQAA
+
+
+1
+CUdpClientListener
+
+
+False
+
+
+False
+
+
+
+False
+eLrcJo0DgE2AjvOF61yczQAA
+
+
+eLrcJo0DgE2AjvOF61yczQAA
+
+
+False
+eLrcJo0DgE2AjvOF61yczQAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+796,1407;795,1107
+ckrUyHyNEkqEIaDRIjKBrAAA
+4X4YjiGr1keUOnRkcKUhTQAA
+awRPnutzt0yg7s50bGBGLQAA
+
+False
+1.5707963267949
+15
+ckrUyHyNEkqEIaDRIjKBrAAA
+
+
+False
+1.5707963267949
+30
+ckrUyHyNEkqEIaDRIjKBrAAA
+
+
+False
+-1.5707963267949
+15
+ckrUyHyNEkqEIaDRIjKBrAAA
+
+
+
+clMaroon
+$00BDFFDE
+10
+928
+1072
+121
+36
+True
+False
+r22NFz2+L0aq+kmESgCiYAAA
+
+
+1
+IUdpCastListener
+
+
+False
+
+
+False
+
+
+
+False
+r22NFz2+L0aq+kmESgCiYAAA
+
+
+r22NFz2+L0aq+kmESgCiYAAA
+
+
+False
+r22NFz2+L0aq+kmESgCiYAAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+983,1072;816,479
+iH3ueDodB0OuqZ5awdjDeQAA
+KrTYF4Cl0UWAT3s9Q59oBAAA
+IpuoRM7390mIm+qG9Hl2bgAA
+
+False
+1.5707963267949
+15
+iH3ueDodB0OuqZ5awdjDeQAA
+
+
+False
+1.5707963267949
+30
+iH3ueDodB0OuqZ5awdjDeQAA
+
+
+False
+-1.5707963267949
+15
+iH3ueDodB0OuqZ5awdjDeQAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+920
+1407
+135
+100
+True
+False
+sJBjmKjtoEWtenBeaDLnjwAA
+
+
+1
+CUdpCastListener
+
+
+False
+
+
+False
+
+
+
+False
+sJBjmKjtoEWtenBeaDLnjwAA
+
+
+sJBjmKjtoEWtenBeaDLnjwAA
+
+
+False
+sJBjmKjtoEWtenBeaDLnjwAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+987,1407;988,1107
+FoyTfxOKQ0CcM6uuMKewkwAA
+IpuoRM7390mIm+qG9Hl2bgAA
+zefMvmnz2UK+gAC3E0jXgQAA
+
+False
+1.5707963267949
+15
+FoyTfxOKQ0CcM6uuMKewkwAA
+
+
+False
+1.5707963267949
+30
+FoyTfxOKQ0CcM6uuMKewkwAA
+
+
+False
+-1.5707963267949
+15
+FoyTfxOKQ0CcM6uuMKewkwAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+2936
+8
+199
+612
+True
+False
+SqNjwMrIrEaWmScJhNPQOwAA
+
+
+3
+IComplexSocket
+
+
+False
+
+
+False
+
+
+
+False
+SqNjwMrIrEaWmScJhNPQOwAA
+
+
+SqNjwMrIrEaWmScJhNPQOwAA
+
+
+False
+SqNjwMrIrEaWmScJhNPQOwAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+2736
+888
+126
+68
+True
+False
+GoHMKPRtzES/2hlDzLtwnAAA
+
+
+1
+IServer
+
+
+False
+
+
+False
+
+
+
+False
+GoHMKPRtzES/2hlDzLtwnAAA
+
+
+GoHMKPRtzES/2hlDzLtwnAAA
+
+
+False
+GoHMKPRtzES/2hlDzLtwnAAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+2861,897;2960,860;2993,619
+9BTtNyRQHEu7yKoNswewcQAA
+eiN6oYelCU++QjaXKMX8mAAA
+kiHq/1vHX0WZ96N8FA/STwAA
+
+False
+1.5707963267949
+15
+9BTtNyRQHEu7yKoNswewcQAA
+
+
+False
+1.5707963267949
+30
+9BTtNyRQHEu7yKoNswewcQAA
+
+
+False
+-1.5707963267949
+15
+9BTtNyRQHEu7yKoNswewcQAA
+
+
+
+clMaroon
+$00FFE3C8
+10
+2864
+1072
+156
+212
+True
+False
+YNdJIJRIm0SpW7CG17MtyAAA
+
+
+1
+ITcpServer
+
+
+False
+
+
+False
+
+
+
+False
+YNdJIJRIm0SpW7CG17MtyAAA
+
+
+YNdJIJRIm0SpW7CG17MtyAAA
+
+
+False
+YNdJIJRIm0SpW7CG17MtyAAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+2882,1072;2817,955
+qrDg6u3xU0KpgYiFoJBZ1AAA
+kiHq/1vHX0WZ96N8FA/STwAA
+Ll1QQzy89EqZaHquqLut4QAA
+
+False
+1.5707963267949
+15
+qrDg6u3xU0KpgYiFoJBZ1AAA
+
+
+False
+1.5707963267949
+30
+qrDg6u3xU0KpgYiFoJBZ1AAA
+
+
+False
+-1.5707963267949
+15
+qrDg6u3xU0KpgYiFoJBZ1AAA
+
+
+
+clMaroon
+$00FFE3C8
+10
+2584
+1072
+150
+164
+True
+False
+KqnhKB+uXkKxW6LqS8YzcgAA
+
+
+1
+IUdpServer
+
+
+False
+
+
+False
+
+
+
+False
+KqnhKB+uXkKxW6LqS8YzcgAA
+
+
+KqnhKB+uXkKxW6LqS8YzcgAA
+
+
+False
+KqnhKB+uXkKxW6LqS8YzcgAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+2707,1072;2778,955
+rcZqqPur/USLxxaOeNdjswAA
+kiHq/1vHX0WZ96N8FA/STwAA
+jbo8sT+vKUaLco+wapuQhwAA
+
+False
+1.5707963267949
+15
+rcZqqPur/USLxxaOeNdjswAA
+
+
+False
+1.5707963267949
+30
+rcZqqPur/USLxxaOeNdjswAA
+
+
+False
+-1.5707963267949
+15
+rcZqqPur/USLxxaOeNdjswAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+3400
+888
+74
+68
+True
+False
+tc20+9LmREuR1dUMSybNdQAA
+
+
+1
+IAgent
+
+
+False
+
+
+False
+
+
+
+False
+tc20+9LmREuR1dUMSybNdQAA
+
+
+tc20+9LmREuR1dUMSybNdQAA
+
+
+False
+tc20+9LmREuR1dUMSybNdQAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+3400,914;3108,860;3076,619
+dx6I5RGr20SmTHCEMdZ9nAAA
+eiN6oYelCU++QjaXKMX8mAAA
+n3rJyl0++kq9uoOsANKAUwAA
+
+False
+1.5707963267949
+15
+dx6I5RGr20SmTHCEMdZ9nAAA
+
+
+False
+1.5707963267949
+30
+dx6I5RGr20SmTHCEMdZ9nAAA
+
+
+False
+-1.5707963267949
+15
+dx6I5RGr20SmTHCEMdZ9nAAA
+
+
+
+clMaroon
+$00FFE3C8
+10
+3388
+1072
+145
+180
+True
+False
+ilTzVOgexUSPHrK2FSqS9wAA
+
+
+1
+ITcpAgent
+
+
+False
+
+
+False
+
+
+
+False
+ilTzVOgexUSPHrK2FSqS9wAA
+
+
+ilTzVOgexUSPHrK2FSqS9wAA
+
+
+False
+ilTzVOgexUSPHrK2FSqS9wAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+3451,1072;3439,955
+T7qvCRD8oEeFVhOYfk7D4wAA
+n3rJyl0++kq9uoOsANKAUwAA
+ROm4wdRu3kujC5L3DT4IAAAA
+
+False
+1.5707963267949
+15
+T7qvCRD8oEeFVhOYfk7D4wAA
+
+
+False
+1.5707963267949
+30
+T7qvCRD8oEeFVhOYfk7D4wAA
+
+
+False
+-1.5707963267949
+15
+T7qvCRD8oEeFVhOYfk7D4wAA
+
+
+
+clMaroon
+$00FFE3C8
+10
+1376
+1072
+145
+148
+True
+False
+CqUqbTfjd0mBGFOXrmWVDgAA
+
+
+1
+ITcpClient
+
+
+False
+
+
+False
+
+
+
+False
+CqUqbTfjd0mBGFOXrmWVDgAA
+
+
+CqUqbTfjd0mBGFOXrmWVDgAA
+
+
+False
+CqUqbTfjd0mBGFOXrmWVDgAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+1448,1072;1446,655
+dOpAHC5JfkymmNyAgeRwWAAA
+ylsx02qZaUiyvMjQBrZn+gAA
+J8pneqLZKkaDgX4DgXGzJwAA
+
+False
+1.5707963267949
+15
+dOpAHC5JfkymmNyAgeRwWAAA
+
+
+False
+1.5707963267949
+30
+dOpAHC5JfkymmNyAgeRwWAAA
+
+
+False
+-1.5707963267949
+15
+dOpAHC5JfkymmNyAgeRwWAAA
+
+
+
+clMaroon
+$00FFE3C8
+10
+1136
+1072
+150
+132
+True
+False
+s/XSjWMZB0WwUzzarQOzNgAA
+
+
+1
+IUdpClient
+
+
+False
+
+
+False
+
+
+
+False
+s/XSjWMZB0WwUzzarQOzNgAA
+
+
+s/XSjWMZB0WwUzzarQOzNgAA
+
+
+False
+s/XSjWMZB0WwUzzarQOzNgAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+1234,1072;1386,655
+VhVmNVhKIEyRJWflThCsqQAA
+ylsx02qZaUiyvMjQBrZn+gAA
+oleTxFsjKEWwtZuXdUKCNQAA
+
+False
+1.5707963267949
+15
+VhVmNVhKIEyRJWflThCsqQAA
+
+
+False
+1.5707963267949
+30
+VhVmNVhKIEyRJWflThCsqQAA
+
+
+False
+-1.5707963267949
+15
+VhVmNVhKIEyRJWflThCsqQAA
+
+
+
+clMaroon
+$00FFE3C8
+10
+1704
+1072
+150
+212
+True
+False
+6HMIzI9avUGHDCpvqmkdqQAA
+
+
+1
+IUdpCast
+
+
+False
+
+
+False
+
+
+
+False
+6HMIzI9avUGHDCpvqmkdqQAA
+
+
+6HMIzI9avUGHDCpvqmkdqQAA
+
+
+False
+6HMIzI9avUGHDCpvqmkdqQAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+1727,1072;1523,653
+MejA8cLC00G/Y3QcvCU6BgAA
+ylsx02qZaUiyvMjQBrZn+gAA
+YHlypkK/9EmsY5l1e8kckgAA
+
+False
+1.5707963267949
+15
+MejA8cLC00G/Y3QcvCU6BgAA
+
+
+False
+1.5707963267949
+30
+MejA8cLC00G/Y3QcvCU6BgAA
+
+
+False
+-1.5707963267949
+15
+MejA8cLC00G/Y3QcvCU6BgAA
+
+
+
+clMaroon
+$0000C4C4
+10
+2816
+2460
+165
+84
+True
+False
+BaqYQl/65Uy16GMJC7nLawAA
+
+
+1
+IPullSocket
+
+
+False
+
+
+False
+
+
+
+False
+BaqYQl/65Uy16GMJC7nLawAA
+
+
+BaqYQl/65Uy16GMJC7nLawAA
+
+
+False
+BaqYQl/65Uy16GMJC7nLawAA
+
+
+
+clMaroon
+$0000C4C4
+10
+1736
+2460
+159
+84
+True
+False
+LPfLjDLmzkKy/sn51dyX7gAA
+
+
+1
+IPullClient
+
+
+False
+
+
+False
+
+
+
+False
+LPfLjDLmzkKy/sn51dyX7gAA
+
+
+LPfLjDLmzkKy/sn51dyX7gAA
+
+
+False
+LPfLjDLmzkKy/sn51dyX7gAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+2496
+2668
+103
+68
+True
+False
+gJKazn/X+U6+FJp/F2soRAAA
+
+
+1
+ITcpPullServer
+
+
+False
+
+
+False
+
+
+
+False
+gJKazn/X+U6+FJp/F2soRAAA
+
+
+gJKazn/X+U6+FJp/F2soRAAA
+
+
+False
+gJKazn/X+U6+FJp/F2soRAAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+2598,2672;2824,2543
+ETiy7j/ak0iclwwFrOCPHwAA
+a0c9acKJG0SO2mD4HdFWdAAA
+vwPKwpBbd0GUOwpQTiwJIwAA
+
+False
+1.5707963267949
+15
+ETiy7j/ak0iclwwFrOCPHwAA
+
+
+False
+1.5707963267949
+30
+ETiy7j/ak0iclwwFrOCPHwAA
+
+
+False
+-1.5707963267949
+15
+ETiy7j/ak0iclwwFrOCPHwAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+2567,2668;2788,2312;2788,1352;2864,1265
+RvwWYNXraU2xkdsooYM/NwAA
+Ll1QQzy89EqZaHquqLut4QAA
+vwPKwpBbd0GUOwpQTiwJIwAA
+
+False
+1.5707963267949
+15
+RvwWYNXraU2xkdsooYM/NwAA
+
+
+False
+1.5707963267949
+30
+RvwWYNXraU2xkdsooYM/NwAA
+
+
+False
+-1.5707963267949
+15
+RvwWYNXraU2xkdsooYM/NwAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+2848
+2668
+99
+68
+True
+False
+QvkeGvTpWU2SJ0MXVIx/AwAA
+
+
+1
+ITcpPullAgent
+
+
+False
+
+
+False
+
+
+
+False
+QvkeGvTpWU2SJ0MXVIx/AwAA
+
+
+QvkeGvTpWU2SJ0MXVIx/AwAA
+
+
+False
+QvkeGvTpWU2SJ0MXVIx/AwAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+2897,2668;2898,2543
+krwZJNbQpUee1OjG3HesgAAA
+a0c9acKJG0SO2mD4HdFWdAAA
+bfxTyfA02Ue+pDo34ZXTAQAA
+
+False
+1.5707963267949
+15
+krwZJNbQpUee1OjG3HesgAAA
+
+
+False
+1.5707963267949
+30
+krwZJNbQpUee1OjG3HesgAAA
+
+
+False
+-1.5707963267949
+15
+krwZJNbQpUee1OjG3HesgAAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+2923,2668;3140,2392;3140,1376;3388,1209
+Vo9KdG21TU67s/EtgyfoVQAA
+ROm4wdRu3kujC5L3DT4IAAAA
+bfxTyfA02Ue+pDo34ZXTAQAA
+
+False
+1.5707963267949
+15
+Vo9KdG21TU67s/EtgyfoVQAA
+
+
+False
+1.5707963267949
+30
+Vo9KdG21TU67s/EtgyfoVQAA
+
+
+False
+-1.5707963267949
+15
+Vo9KdG21TU67s/EtgyfoVQAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+1768
+2672
+95
+68
+True
+False
+SjUoRiw3TUOE/FQirpeMogAA
+
+
+1
+ITcpPullClient
+
+
+False
+
+
+False
+
+
+
+False
+SjUoRiw3TUOE/FQirpeMogAA
+
+
+SjUoRiw3TUOE/FQirpeMogAA
+
+
+False
+SjUoRiw3TUOE/FQirpeMogAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+1815,2672;1815,2543
+wIyBqLGeaEauN2RIkujQrAAA
+3G0QePyBUU2U+ZdFBZdeaQAA
+JO73WwZwyUit/u2y4GvaEQAA
+
+False
+1.5707963267949
+15
+wIyBqLGeaEauN2RIkujQrAAA
+
+
+False
+1.5707963267949
+30
+wIyBqLGeaEauN2RIkujQrAAA
+
+
+False
+-1.5707963267949
+15
+wIyBqLGeaEauN2RIkujQrAAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+1772,2672;1628,2560;1628,1412;1498,1219
+GJ1pEOa7xE+Vx6DHIVvLbwAA
+J8pneqLZKkaDgX4DgXGzJwAA
+JO73WwZwyUit/u2y4GvaEQAA
+
+False
+1.5707963267949
+15
+GJ1pEOa7xE+Vx6DHIVvLbwAA
+
+
+False
+1.5707963267949
+30
+GJ1pEOa7xE+Vx6DHIVvLbwAA
+
+
+False
+-1.5707963267949
+15
+GJ1pEOa7xE+Vx6DHIVvLbwAA
+
+
+
+clMaroon
+$00DCB9FF
+10
+3356
+1408
+199
+804
+True
+False
++hvdtNLBPUeUmdoy9WnIywAA
+
+
+1
+CTcpAgent
+
+
+False
+
+
+False
+
+
+
+False
++hvdtNLBPUeUmdoy9WnIywAA
+
+
++hvdtNLBPUeUmdoy9WnIywAA
+
+
+False
++hvdtNLBPUeUmdoy9WnIywAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+3458,1408;3459,1251
+M9A+DWOIeUGk+YFgByCYmAAA
+ROm4wdRu3kujC5L3DT4IAAAA
+nninAmAC7U2238tYjDUvxQAA
+
+False
+1.5707963267949
+15
+M9A+DWOIeUGk+YFgByCYmAAA
+
+
+False
+1.5707963267949
+30
+M9A+DWOIeUGk+YFgByCYmAAA
+
+
+False
+-1.5707963267949
+15
+M9A+DWOIeUGk+YFgByCYmAAA
+
+
+
+clMaroon
+$00FFC8FF
+10
+1368
+1408
+164
+452
+True
+False
+rNsPUCIqcESb1NED1xr04AAA
+
+
+1
+CTcpClient
+
+
+False
+
+
+False
+
+
+
+False
+rNsPUCIqcESb1NED1xr04AAA
+
+
+rNsPUCIqcESb1NED1xr04AAA
+
+
+False
+rNsPUCIqcESb1NED1xr04AAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+1449,1408;1448,1219
+hwXxX+YbkkG6mY/KLykG4AAA
+J8pneqLZKkaDgX4DgXGzJwAA
+PGFFeARNxk+lxLKoUolRcgAA
+
+False
+1.5707963267949
+15
+hwXxX+YbkkG6mY/KLykG4AAA
+
+
+False
+1.5707963267949
+30
+hwXxX+YbkkG6mY/KLykG4AAA
+
+
+False
+-1.5707963267949
+15
+hwXxX+YbkkG6mY/KLykG4AAA
+
+
+
+clMaroon
+$00DCB9FF
+10
+2980
+2668
+185
+100
+True
+False
+JJbEayVgmEyWvR4C1WYpsAAA
+
+
+1
+CTcpPullAgent
+
+
+False
+
+
+False
+
+
+
+False
+JJbEayVgmEyWvR4C1WYpsAAA
+
+
+JJbEayVgmEyWvR4C1WYpsAAA
+
+
+False
+JJbEayVgmEyWvR4C1WYpsAAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+3033,2668;2932,2543
+SWj0s9+zMUW6Sa0s98LfDgAA
+a0c9acKJG0SO2mD4HdFWdAAA
+91D3350Tx0G/REKMBgAVcgAA
+
+False
+1.5707963267949
+15
+SWj0s9+zMUW6Sa0s98LfDgAA
+
+
+False
+1.5707963267949
+30
+SWj0s9+zMUW6Sa0s98LfDgAA
+
+
+False
+-1.5707963267949
+15
+SWj0s9+zMUW6Sa0s98LfDgAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+3139,2668;3200,2624;3200,2180;3356,1953
+IDQB44Q61kudclcYwyYEMwAA
+nninAmAC7U2238tYjDUvxQAA
+91D3350Tx0G/REKMBgAVcgAA
+
+False
+1.5707963267949
+15
+IDQB44Q61kudclcYwyYEMwAA
+
+
+False
+1.5707963267949
+30
+IDQB44Q61kudclcYwyYEMwAA
+
+
+False
+-1.5707963267949
+15
+IDQB44Q61kudclcYwyYEMwAA
+
+
+
+clMaroon
+$00FFC8FF
+10
+1532
+2672
+184
+100
+True
+False
+dUFVpJ56j0WxczyDxsGS+gAA
+
+
+1
+CTcpPullClient
+
+
+False
+
+
+False
+
+
+
+False
+dUFVpJ56j0WxczyDxsGS+gAA
+
+
+dUFVpJ56j0WxczyDxsGS+gAA
+
+
+False
+dUFVpJ56j0WxczyDxsGS+gAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+1666,2672;1778,2543
+t7BFiOV+U0+3Fzwd6nXwzgAA
+3G0QePyBUU2U+ZdFBZdeaQAA
+pHz4Yn9KW0u1EHHgf7i2PQAA
+
+False
+1.5707963267949
+15
+t7BFiOV+U0+3Fzwd6nXwzgAA
+
+
+False
+1.5707963267949
+30
+t7BFiOV+U0+3Fzwd6nXwzgAA
+
+
+False
+-1.5707963267949
+15
+t7BFiOV+U0+3Fzwd6nXwzgAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+1615,2672;1485,1859
+ZNw4OjQkUkmijjdgoAjX+gAA
+PGFFeARNxk+lxLKoUolRcgAA
+pHz4Yn9KW0u1EHHgf7i2PQAA
+
+False
+1.5707963267949
+15
+ZNw4OjQkUkmijjdgoAjX+gAA
+
+
+False
+1.5707963267949
+30
+ZNw4OjQkUkmijjdgoAjX+gAA
+
+
+False
+-1.5707963267949
+15
+ZNw4OjQkUkmijjdgoAjX+gAA
+
+
+
+clMaroon
+$00A6D2FF
+10
+2628
+2668
+190
+100
+True
+False
+5tmwPyb6D0Ki98vc8dVPhQAA
+
+
+1
+CTcpPullServer
+
+
+False
+
+
+False
+
+
+
+False
+5tmwPyb6D0Ki98vc8dVPhQAA
+
+
+5tmwPyb6D0Ki98vc8dVPhQAA
+
+
+False
+5tmwPyb6D0Ki98vc8dVPhQAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+2762,2668;2864,2543
+DLbR09fsFE6Bx8bzfHmD6AAA
+a0c9acKJG0SO2mD4HdFWdAAA
+pH4m1vGfz0+s2Byn9+X25QAA
+
+False
+1.5707963267949
+15
+DLbR09fsFE6Bx8bzfHmD6AAA
+
+
+False
+1.5707963267949
+30
+DLbR09fsFE6Bx8bzfHmD6AAA
+
+
+False
+-1.5707963267949
+15
+DLbR09fsFE6Bx8bzfHmD6AAA
+
+
+
+clMaroon
+$00A6D2FF
+10
+2840
+1408
+199
+836
+True
+False
+gWn1z7ujyEu9Gf7LdRrPIAAA
+
+
+1
+CTcpServer
+
+
+False
+
+
+False
+
+
+
+False
+gWn1z7ujyEu9Gf7LdRrPIAAA
+
+
+gWn1z7ujyEu9Gf7LdRrPIAAA
+
+
+False
+gWn1z7ujyEu9Gf7LdRrPIAAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+2940,1408;2941,1283
+O5dkSXpa9UWV4M9yJ7QzIwAA
+Ll1QQzy89EqZaHquqLut4QAA
+b5sh7cGyAEG5dKPNO5ax0wAA
+
+False
+1.5707963267949
+15
+O5dkSXpa9UWV4M9yJ7QzIwAA
+
+
+False
+1.5707963267949
+30
+O5dkSXpa9UWV4M9yJ7QzIwAA
+
+
+False
+-1.5707963267949
+15
+O5dkSXpa9UWV4M9yJ7QzIwAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+2734,2668;2840,2232
+UT9syzbMZEyZsIIcEMpphAAA
+b5sh7cGyAEG5dKPNO5ax0wAA
+pH4m1vGfz0+s2Byn9+X25QAA
+
+False
+1.5707963267949
+15
+UT9syzbMZEyZsIIcEMpphAAA
+
+
+False
+1.5707963267949
+30
+UT9syzbMZEyZsIIcEMpphAAA
+
+
+False
+-1.5707963267949
+15
+UT9syzbMZEyZsIIcEMpphAAA
+
+
+
+clMaroon
+$00FFC8FF
+10
+1696
+1408
+158
+516
+True
+False
+ukpy8IZAy0KEameLGY9mtQAA
+
+
+1
+CUdpCast
+
+
+False
+
+
+False
+
+
+
+False
+ukpy8IZAy0KEameLGY9mtQAA
+
+
+ukpy8IZAy0KEameLGY9mtQAA
+
+
+False
+ukpy8IZAy0KEameLGY9mtQAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+1776,1408;1777,1283
+Mrk3QXUHNk2R1/cHV9/5pAAA
+YHlypkK/9EmsY5l1e8kckgAA
+19i0QowlNkm9OgeAWSgS4wAA
+
+False
+1.5707963267949
+15
+Mrk3QXUHNk2R1/cHV9/5pAAA
+
+
+False
+1.5707963267949
+30
+Mrk3QXUHNk2R1/cHV9/5pAAA
+
+
+False
+-1.5707963267949
+15
+Mrk3QXUHNk2R1/cHV9/5pAAA
+
+
+
+clMaroon
+$00FFC8FF
+10
+1128
+1408
+165
+436
+True
+False
+ecegk3x5sEKpNtWGALy6NAAA
+
+
+1
+CUdpClient
+
+
+False
+
+
+False
+
+
+
+False
+ecegk3x5sEKpNtWGALy6NAAA
+
+
+ecegk3x5sEKpNtWGALy6NAAA
+
+
+False
+ecegk3x5sEKpNtWGALy6NAAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+1210,1408;1210,1203
+TevsU+ekCkCxrYsp/lugswAA
+oleTxFsjKEWwtZuXdUKCNQAA
+c825HJK3kEKsHWC48ErTtwAA
+
+False
+1.5707963267949
+15
+TevsU+ekCkCxrYsp/lugswAA
+
+
+False
+1.5707963267949
+30
+TevsU+ekCkCxrYsp/lugswAA
+
+
+False
+-1.5707963267949
+15
+TevsU+ekCkCxrYsp/lugswAA
+
+
+
+clMaroon
+$00A6D2FF
+10
+2548
+1408
+199
+788
+True
+False
+W+YbXZBJDU6NfEjOApatvwAA
+
+
+1
+CUdpServer
+
+
+False
+
+
+False
+
+
+
+False
+W+YbXZBJDU6NfEjOApatvwAA
+
+
+W+YbXZBJDU6NfEjOApatvwAA
+
+
+False
+W+YbXZBJDU6NfEjOApatvwAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+2654,1408;2657,1235
+j09xKlrPNkS8/NZ3JXD5MwAA
+jbo8sT+vKUaLco+wapuQhwAA
+bwCisxwrCEKKPJ3Eu3K44AAA
+
+False
+1.5707963267949
+15
+j09xKlrPNkS8/NZ3JXD5MwAA
+
+
+False
+1.5707963267949
+30
+j09xKlrPNkS8/NZ3JXD5MwAA
+
+
+False
+-1.5707963267949
+15
+j09xKlrPNkS8/NZ3JXD5MwAA
+
+
+
+clMaroon
+$00CCE8F4
+10
+600
+1880
+114
+42
+True
+False
+G8TfQngB3UemVJWZg5KbggAA
+
+
+1
+CONNID
+
+
+<<CppTypedef>>
+
+
+False
+
+
+
+False
+G8TfQngB3UemVJWZg5KbggAA
+
+
+False
+G8TfQngB3UemVJWZg5KbggAA
+
+
+False
+G8TfQngB3UemVJWZg5KbggAA
+
+
+
+clMaroon
+$0000C4C4
+10
+1072
+2460
+165
+116
+True
+False
+tvyRlzR70kaEb8akK1WldwAA
+
+
+1
+IPackClient
+
+
+False
+
+
+False
+
+
+
+False
+tvyRlzR70kaEb8akK1WldwAA
+
+
+tvyRlzR70kaEb8akK1WldwAA
+
+
+False
+tvyRlzR70kaEb8akK1WldwAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+1100
+2672
+103
+68
+True
+False
+NI0md/XcXk+UFEOqL+89owAA
+
+
+1
+ITcpPackClient
+
+
+False
+
+
+False
+
+
+
+False
+NI0md/XcXk+UFEOqL+89owAA
+
+
+NI0md/XcXk+UFEOqL+89owAA
+
+
+False
+NI0md/XcXk+UFEOqL+89owAA
+
+
+
+clMaroon
+$00B9FFFF
+1152,2672;1153,2575
+xly9lJtUukKwQ90VKrZR2AAA
+Yb89wcpcAk2cxvunkv6qmgAA
+32lcn4ak5UeWCJbHkp/gUwAA
+
+False
+1.5707963267949
+15
+xly9lJtUukKwQ90VKrZR2AAA
+
+
+False
+1.5707963267949
+30
+xly9lJtUukKwQ90VKrZR2AAA
+
+
+False
+-1.5707963267949
+15
+xly9lJtUukKwQ90VKrZR2AAA
+
+
+
+clMaroon
+$00B9FFFF
+1202,2674;1332,2596;1332,1400;1414,1219
+l44zgodkDEuj17c7XdoPSQAA
+J8pneqLZKkaDgX4DgXGzJwAA
+32lcn4ak5UeWCJbHkp/gUwAA
+
+False
+1.5707963267949
+15
+l44zgodkDEuj17c7XdoPSQAA
+
+
+False
+1.5707963267949
+30
+l44zgodkDEuj17c7XdoPSQAA
+
+
+False
+-1.5707963267949
+15
+l44zgodkDEuj17c7XdoPSQAA
+
+
+
+clMaroon
+$00FFC8FF
+10
+1292
+2672
+190
+174
+True
+False
+L/mIC87mmUWQBG3Zhl0iGQAA
+
+
+1
+CTcpPackClient
+
+
+False
+
+
+False
+
+
+
+L/mIC87mmUWQBG3Zhl0iGQAA
+
+
+L/mIC87mmUWQBG3Zhl0iGQAA
+
+
+False
+L/mIC87mmUWQBG3Zhl0iGQAA
+
+
+
+clMaroon
+$00B9FFFF
+1419,2672;1448,2596;1449,1859
+PhcJjlYZKkK5/K0LejildAAA
+PGFFeARNxk+lxLKoUolRcgAA
+yhdU0K3mvEeeVvCvv3kUNQAA
+
+False
+1.5707963267949
+15
+PhcJjlYZKkK5/K0LejildAAA
+
+
+False
+1.5707963267949
+30
+PhcJjlYZKkK5/K0LejildAAA
+
+
+False
+-1.5707963267949
+15
+PhcJjlYZKkK5/K0LejildAAA
+
+
+
+clMaroon
+$00B9FFFF
+1303,2672;1210,2575
+N9PjlD8Kvk26PvXMITpM2QAA
+Yb89wcpcAk2cxvunkv6qmgAA
+yhdU0K3mvEeeVvCvv3kUNQAA
+
+False
+1.5707963267949
+15
+N9PjlD8Kvk26PvXMITpM2QAA
+
+
+False
+1.5707963267949
+30
+N9PjlD8Kvk26PvXMITpM2QAA
+
+
+False
+-1.5707963267949
+15
+N9PjlD8Kvk26PvXMITpM2QAA
+
+
+
+clMaroon
+$0000C4C4
+10
+3356
+2460
+171
+116
+False
+Pv24uWWaqUu82r7VGD3ZNwAA
+
+
+1
+IPackSocket
+
+
+False
+
+
+False
+
+
+
+False
+Pv24uWWaqUu82r7VGD3ZNwAA
+
+
+Pv24uWWaqUu82r7VGD3ZNwAA
+
+
+False
+Pv24uWWaqUu82r7VGD3ZNwAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+3200
+2668
+111
+68
+False
+aDgNVKZkT029alZKzju1xAAA
+
+
+1
+ITcpPackServer
+
+
+False
+
+
+False
+
+
+
+False
+aDgNVKZkT029alZKzju1xAAA
+
+
+aDgNVKZkT029alZKzju1xAAA
+
+
+False
+aDgNVKZkT029alZKzju1xAAA
+
+
+
+clMaroon
+$00B9FFFF
+3288,2668;3382,2575
+sgmcH4+s1Em05SzAjJdHjAAA
+o4hWQrYZQkOmrY1zgQbErQAA
+kTpvQ8TEEkmzpYp6oZMMXwAA
+
+False
+1.5707963267949
+15
+sgmcH4+s1Em05SzAjJdHjAAA
+
+
+False
+1.5707963267949
+30
+sgmcH4+s1Em05SzAjJdHjAAA
+
+
+False
+-1.5707963267949
+15
+sgmcH4+s1Em05SzAjJdHjAAA
+
+
+
+clMaroon
+$00B9FFFF
+3255,2668;3256,1376;3019,1226
+nzQ/3s2PQEG5Cz2AX+hkOgAA
+Ll1QQzy89EqZaHquqLut4QAA
+kTpvQ8TEEkmzpYp6oZMMXwAA
+
+False
+1.5707963267949
+15
+nzQ/3s2PQEG5Cz2AX+hkOgAA
+
+
+False
+1.5707963267949
+30
+nzQ/3s2PQEG5Cz2AX+hkOgAA
+
+
+False
+-1.5707963267949
+15
+nzQ/3s2PQEG5Cz2AX+hkOgAA
+
+
+
+clMaroon
+$00A6D2FF
+10
+3344
+2668
+196
+164
+False
+1ED6OCTjl0y7E7dMMSTJqgAA
+
+
+1
+CTcpPackServer
+
+
+False
+
+
+False
+
+
+
+False
+1ED6OCTjl0y7E7dMMSTJqgAA
+
+
+1ED6OCTjl0y7E7dMMSTJqgAA
+
+
+False
+1ED6OCTjl0y7E7dMMSTJqgAA
+
+
+
+clMaroon
+$00B9FFFF
+3441,2668;3441,2575
+OH/WIarq+EioSJWJSZjh6AAA
+o4hWQrYZQkOmrY1zgQbErQAA
+3Oc58Cgr6Uet0hJOu0xXvgAA
+
+False
+1.5707963267949
+15
+OH/WIarq+EioSJWJSZjh6AAA
+
+
+False
+1.5707963267949
+30
+OH/WIarq+EioSJWJSZjh6AAA
+
+
+False
+-1.5707963267949
+15
+OH/WIarq+EioSJWJSZjh6AAA
+
+
+
+clMaroon
+$00B9FFFF
+3344,2680;2936,2392;2937,2243
+aQ1uf7mN+EuF/eGcASNwmgAA
+b5sh7cGyAEG5dKPNO5ax0wAA
+3Oc58Cgr6Uet0hJOu0xXvgAA
+
+False
+1.5707963267949
+15
+aQ1uf7mN+EuF/eGcASNwmgAA
+
+
+False
+1.5707963267949
+30
+aQ1uf7mN+EuF/eGcASNwmgAA
+
+
+False
+-1.5707963267949
+15
+aQ1uf7mN+EuF/eGcASNwmgAA
+
+
+
+clMaroon
+$00B9FFFF
+10
+3572
+2668
+107
+68
+False
+vjFkGLWb/kSPpbp9R+skbAAA
+
+
+1
+ITcpPackAgent
+
+
+False
+
+
+False
+
+
+
+False
+vjFkGLWb/kSPpbp9R+skbAAA
+
+
+vjFkGLWb/kSPpbp9R+skbAAA
+
+
+False
+vjFkGLWb/kSPpbp9R+skbAAA
+
+
+
+clMaroon
+$00B9FFFF
+3592,2668;3499,2575
+WUHNHDfka0O+CbvKWj/7kQAA
+o4hWQrYZQkOmrY1zgQbErQAA
+kXZKbMdJjEWlFo6Q0wMKUwAA
+
+False
+1.5707963267949
+15
+WUHNHDfka0O+CbvKWj/7kQAA
+
+
+False
+1.5707963267949
+30
+WUHNHDfka0O+CbvKWj/7kQAA
+
+
+False
+-1.5707963267949
+15
+WUHNHDfka0O+CbvKWj/7kQAA
+
+
+
+clMaroon
+$00B9FFFF
+3625,2668;3624,1376;3529,1251
+lqZ7xgrWKkewtFXoEKU2+AAA
+ROm4wdRu3kujC5L3DT4IAAAA
+kXZKbMdJjEWlFo6Q0wMKUwAA
+
+False
+1.5707963267949
+15
+lqZ7xgrWKkewtFXoEKU2+AAA
+
+
+False
+1.5707963267949
+30
+lqZ7xgrWKkewtFXoEKU2+AAA
+
+
+False
+-1.5707963267949
+15
+lqZ7xgrWKkewtFXoEKU2+AAA
+
+
+
+clMaroon
+$00DCB9FF
+10
+3712
+2668
+191
+164
+False
+P+YM5jdCmESvfv1Fet1QqAAA
+
+
+1
+CTcpPackAgent
+
+
+False
+
+
+False
+
+
+
+False
+P+YM5jdCmESvfv1Fet1QqAAA
+
+
+P+YM5jdCmESvfv1Fet1QqAAA
+
+
+False
+P+YM5jdCmESvfv1Fet1QqAAA
+
+
+
+clMaroon
+$00B9FFFF
+3712,2689;3526,2571
+v+HDY4XmuEqbLAgnV9F1XgAA
+o4hWQrYZQkOmrY1zgQbErQAA
+D/2eg6bkTEKcTZu0rbkM1wAA
+
+False
+1.5707963267949
+15
+v+HDY4XmuEqbLAgnV9F1XgAA
+
+
+False
+1.5707963267949
+30
+v+HDY4XmuEqbLAgnV9F1XgAA
+
+
+False
+-1.5707963267949
+15
+v+HDY4XmuEqbLAgnV9F1XgAA
+
+
+
+clMaroon
+$00B9FFFF
+3807,2668;3808,2064;3554,1881
+YVPRQLCk1keYCHnO8PWR/AAA
+nninAmAC7U2238tYjDUvxQAA
+D/2eg6bkTEKcTZu0rbkM1wAA
+
+False
+1.5707963267949
+15
+YVPRQLCk1keYCHnO8PWR/AAA
+
+
+False
+1.5707963267949
+30
+YVPRQLCk1keYCHnO8PWR/AAA
+
+
+False
+-1.5707963267949
+15
+YVPRQLCk1keYCHnO8PWR/AAA
+
+
+
+
+
+HP-Socket SSL Class Diagram - v3.5
+jvfBmo6uGkC61ckI99TMgAAA
+
+n8Jj0KelikisWfhtYxaJHwAA
+33
+
+clMaroon
+$0000C4C4
+10
+184
+1110
+165
+84
+True
+False
+BaqYQl/65Uy16GMJC7nLawAA
+
+
+1
+IPullSocket
+
+
+False
+
+
+False
+
+
+
+False
+BaqYQl/65Uy16GMJC7nLawAA
+
+
+BaqYQl/65Uy16GMJC7nLawAA
+
+
+False
+BaqYQl/65Uy16GMJC7nLawAA
+
+
+
+clMaroon
+$00FFE7B5
+10
+676
+840
+80
+30
+True
+False
++hvdtNLBPUeUmdoy9WnIywAA
+
+
+1
+CTcpAgent
+
+
+False
+
+
+False
+
+
+
+False
++hvdtNLBPUeUmdoy9WnIywAA
+
+
+False
++hvdtNLBPUeUmdoy9WnIywAA
+
+
+False
++hvdtNLBPUeUmdoy9WnIywAA
+
+
+
+clMaroon
+$00FFE7B5
+10
+228
+840
+84
+30
+True
+False
+gWn1z7ujyEu9Gf7LdRrPIAAA
+
+
+1
+CTcpServer
+
+
+False
+
+
+False
+
+
+
+False
+gWn1z7ujyEu9Gf7LdRrPIAAA
+
+
+False
+gWn1z7ujyEu9Gf7LdRrPIAAA
+
+
+False
+gWn1z7ujyEu9Gf7LdRrPIAAA
+
+
+
+clMaroon
+$0000C4C4
+10
+640
+1110
+171
+116
+True
+False
+Pv24uWWaqUu82r7VGD3ZNwAA
+
+
+1
+IPackSocket
+
+
+False
+
+
+False
+
+
+
+False
+Pv24uWWaqUu82r7VGD3ZNwAA
+
+
+Pv24uWWaqUu82r7VGD3ZNwAA
+
+
+False
+Pv24uWWaqUu82r7VGD3ZNwAA
+
+
+
+clMaroon
+$00A6D2FF
+10
+184
+944
+171
+94
+True
+False
+/a9O/IGkN0ucRkHiSn9HnAAA
+
+
+1
+CSSLServer
+
+
+False
+
+
+False
+
+
+
+/a9O/IGkN0ucRkHiSn9HnAAA
+
+
+/a9O/IGkN0ucRkHiSn9HnAAA
+
+
+False
+/a9O/IGkN0ucRkHiSn9HnAAA
+
+
+
+clMaroon
+$00A6D2FF
+10
+64
+1304
+191
+110
+True
+False
+P8xlD7KQ90q3n3d+bn8l1wAA
+
+
+1
+CSSLPullServer
+
+
+False
+
+
+False
+
+
+
+P8xlD7KQ90q3n3d+bn8l1wAA
+
+
+P8xlD7KQ90q3n3d+bn8l1wAA
+
+
+False
+P8xlD7KQ90q3n3d+bn8l1wAA
+
+
+
+clMaroon
+$00DCB9FF
+10
+520
+1304
+186
+110
+True
+False
+YWE1Hn3siEGR0iQqmll+qQAA
+
+
+1
+CSSLPullAgent
+
+
+False
+
+
+False
+
+
+
+YWE1Hn3siEGR0iQqmll+qQAA
+
+
+YWE1Hn3siEGR0iQqmll+qQAA
+
+
+False
+YWE1Hn3siEGR0iQqmll+qQAA
+
+
+
+clMaroon
+$00A6D2FF
+10
+276
+1304
+197
+174
+True
+False
+2Ii9/CL9N06CUPFe9+aVlAAA
+
+
+1
+CSSLPackServer
+
+
+False
+
+
+False
+
+
+
+2Ii9/CL9N06CUPFe9+aVlAAA
+
+
+2Ii9/CL9N06CUPFe9+aVlAAA
+
+
+False
+2Ii9/CL9N06CUPFe9+aVlAAA
+
+
+
+clMaroon
+$00DCB9FF
+10
+740
+1304
+192
+174
+True
+False
+FgE9SfcsvUyo0N5G6kkGtQAA
+
+
+1
+CSSLPackAgent
+
+
+False
+
+
+False
+
+
+
+FgE9SfcsvUyo0N5G6kkGtQAA
+
+
+FgE9SfcsvUyo0N5G6kkGtQAA
+
+
+False
+FgE9SfcsvUyo0N5G6kkGtQAA
+
+
+
+clMaroon
+$00B9FFFF
+269,944;269,869
+dYbvw1/fskefHEscBdgpZgAA
+qxTRLB0cx0KH3i5id+UidgAA
+d35WR8n7+UOgpuuGpsJT/gAA
+
+False
+1.5707963267949
+15
+dYbvw1/fskefHEscBdgpZgAA
+
+
+False
+1.5707963267949
+30
+dYbvw1/fskefHEscBdgpZgAA
+
+
+False
+-1.5707963267949
+15
+dYbvw1/fskefHEscBdgpZgAA
+
+
+
+clMaroon
+$00DCB9FF
+10
+636
+944
+166
+94
+True
+False
+IU9vkanSiEaFICg0rbzT8gAA
+
+
+1
+CSSLAgent
+
+
+False
+
+
+False
+
+
+
+IU9vkanSiEaFICg0rbzT8gAA
+
+
+IU9vkanSiEaFICg0rbzT8gAA
+
+
+False
+IU9vkanSiEaFICg0rbzT8gAA
+
+
+
+clMaroon
+$00B9FFFF
+717,944;715,869
+TfYW/muhnkCoBvGlNPHSNgAA
+4AOpRzJdoEe6n+U1thlGDwAA
+VLERt8k74k+Gz466zBHy6AAA
+
+False
+1.5707963267949
+15
+TfYW/muhnkCoBvGlNPHSNgAA
+
+
+False
+1.5707963267949
+30
+TfYW/muhnkCoBvGlNPHSNgAA
+
+
+False
+-1.5707963267949
+15
+TfYW/muhnkCoBvGlNPHSNgAA
+
+
+
+clMaroon
+$00B9FFFF
+187,1304;244,1193
+tdi+ObP8UEaZOtjDaYNnMwAA
+Jvi95wSHaUOQ7NJzuaLYowAA
+JRAkS2JnWECgZ7ODKbFltAAA
+
+False
+1.5707963267949
+15
+tdi+ObP8UEaZOtjDaYNnMwAA
+
+
+False
+1.5707963267949
+30
+tdi+ObP8UEaZOtjDaYNnMwAA
+
+
+False
+-1.5707963267949
+15
+tdi+ObP8UEaZOtjDaYNnMwAA
+
+
+
+clMaroon
+$00B9FFFF
+159,1304;160,1108;226,1037
+SH3SwMKS/UiRlJ4xtt2EGAAA
+d35WR8n7+UOgpuuGpsJT/gAA
+JRAkS2JnWECgZ7ODKbFltAAA
+
+False
+1.5707963267949
+15
+SH3SwMKS/UiRlJ4xtt2EGAAA
+
+
+False
+1.5707963267949
+30
+SH3SwMKS/UiRlJ4xtt2EGAAA
+
+
+False
+-1.5707963267949
+15
+SH3SwMKS/UiRlJ4xtt2EGAAA
+
+
+
+clMaroon
+$00B9FFFF
+375,1304;376,1109;311,1037
+pUlSo2/PGUGbOEtx9YGGkAAA
+d35WR8n7+UOgpuuGpsJT/gAA
+XdWAkkiMB0qHZvXQfp+tRAAA
+
+False
+1.5707963267949
+15
+pUlSo2/PGUGbOEtx9YGGkAAA
+
+
+False
+1.5707963267949
+30
+pUlSo2/PGUGbOEtx9YGGkAAA
+
+
+False
+-1.5707963267949
+15
+pUlSo2/PGUGbOEtx9YGGkAAA
+
+
+
+clMaroon
+$00B9FFFF
+566,1304;472,1192;348,1167
+6zlAYO2+JEmTh0JuwrP0jgAA
+Jvi95wSHaUOQ7NJzuaLYowAA
+4XXw9vfun0a24Xk6K/eqNwAA
+
+False
+1.5707963267949
+15
+6zlAYO2+JEmTh0JuwrP0jgAA
+
+
+False
+1.5707963267949
+30
+6zlAYO2+JEmTh0JuwrP0jgAA
+
+
+False
+-1.5707963267949
+15
+6zlAYO2+JEmTh0JuwrP0jgAA
+
+
+
+clMaroon
+$00B9FFFF
+612,1304;612,1112;677,1037
+DLPvhY5teEiO4nl/ImGDOwAA
+VLERt8k74k+Gz466zBHy6AAA
+4XXw9vfun0a24Xk6K/eqNwAA
+
+False
+1.5707963267949
+15
+DLPvhY5teEiO4nl/ImGDOwAA
+
+
+False
+1.5707963267949
+30
+DLPvhY5teEiO4nl/ImGDOwAA
+
+
+False
+-1.5707963267949
+15
+DLPvhY5teEiO4nl/ImGDOwAA
+
+
+
+clMaroon
+$00B9FFFF
+437,1304;520,1192;640,1177
+WevwuaXm10S10CfIFVFoFwAA
+tzOblJolkE++35/W1yMpSgAA
+XdWAkkiMB0qHZvXQfp+tRAAA
+
+False
+1.5707963267949
+15
+WevwuaXm10S10CfIFVFoFwAA
+
+
+False
+1.5707963267949
+30
+WevwuaXm10S10CfIFVFoFwAA
+
+
+False
+-1.5707963267949
+15
+WevwuaXm10S10CfIFVFoFwAA
+
+
+
+clMaroon
+$00B9FFFF
+835,1304;836,1100;768,1037
+ikNlGmT/m06b5kjYjhgFRAAA
+VLERt8k74k+Gz466zBHy6AAA
+VUpwOKU+J0Wj770ubFC9nAAA
+
+False
+1.5707963267949
+15
+ikNlGmT/m06b5kjYjhgFRAAA
+
+
+False
+1.5707963267949
+30
+ikNlGmT/m06b5kjYjhgFRAAA
+
+
+False
+-1.5707963267949
+15
+ikNlGmT/m06b5kjYjhgFRAAA
+
+
+
+clMaroon
+$00B9FFFF
+793,1304;754,1225
+zC0n+CWc7Eq8t3+2/ieK3wAA
+tzOblJolkE++35/W1yMpSgAA
+VUpwOKU+J0Wj770ubFC9nAAA
+
+False
+1.5707963267949
+15
+zC0n+CWc7Eq8t3+2/ieK3wAA
+
+
+False
+1.5707963267949
+30
+zC0n+CWc7Eq8t3+2/ieK3wAA
+
+
+False
+-1.5707963267949
+15
+zC0n+CWc7Eq8t3+2/ieK3wAA
+
+
+
+clMaroon
+$00FFE7B5
+10
+556
+92
+76
+30
+rNsPUCIqcESb1NED1xr04AAA
+
+
+1
+CTcpClient
+
+
+False
+
+
+False
+
+
+
+False
+rNsPUCIqcESb1NED1xr04AAA
+
+
+False
+rNsPUCIqcESb1NED1xr04AAA
+
+
+False
+rNsPUCIqcESb1NED1xr04AAA
+
+
+
+clMaroon
+$00FFC8FF
+10
+508
+196
+165
+94
+True
+False
+1KywXCH1V02rwVorFE1tuQAA
+
+
+1
+CSSLClient
+
+
+False
+
+
+False
+
+
+
+1KywXCH1V02rwVorFE1tuQAA
+
+
+1KywXCH1V02rwVorFE1tuQAA
+
+
+False
+1KywXCH1V02rwVorFE1tuQAA
+
+
+
+clMaroon
+$0000C4C4
+10
+692
+364
+165
+116
+True
+False
+tvyRlzR70kaEb8akK1WldwAA
+
+
+1
+IPackClient
+
+
+False
+
+
+False
+
+
+
+False
+tvyRlzR70kaEb8akK1WldwAA
+
+
+tvyRlzR70kaEb8akK1WldwAA
+
+
+False
+tvyRlzR70kaEb8akK1WldwAA
+
+
+
+clMaroon
+$0000C4C4
+10
+352
+364
+159
+84
+True
+False
+LPfLjDLmzkKy/sn51dyX7gAA
+
+
+1
+IPullClient
+
+
+False
+
+
+False
+
+
+
+False
+LPfLjDLmzkKy/sn51dyX7gAA
+
+
+LPfLjDLmzkKy/sn51dyX7gAA
+
+
+False
+LPfLjDLmzkKy/sn51dyX7gAA
+
+
+
+clMaroon
+$00FFC8FF
+10
+396
+556
+185
+110
+True
+False
+JGUmeFicd0eQCApyahMZ2AAA
+
+
+1
+CSSLPullClient
+
+
+False
+
+
+False
+
+
+
+JGUmeFicd0eQCApyahMZ2AAA
+
+
+JGUmeFicd0eQCApyahMZ2AAA
+
+
+False
+JGUmeFicd0eQCApyahMZ2AAA
+
+
+
+clMaroon
+$00FFC8FF
+10
+604
+556
+191
+174
+True
+False
+vwyVaeoS+k2li1olb1nP9wAA
+
+
+1
+CSSLPackClient
+
+
+False
+
+
+False
+
+
+
+vwyVaeoS+k2li1olb1nP9wAA
+
+
+vwyVaeoS+k2li1olb1nP9wAA
+
+
+False
+vwyVaeoS+k2li1olb1nP9wAA
+
+
+
+clMaroon
+$00B9FFFF
+591,196;593,121
+Tl0fIre+Z0iT2dYHwMCvCgAA
+9/z70h7WbU+nSBlyL/MOfAAA
+txEKm8CR70Cuk11CUiY1aQAA
+
+False
+1.5707963267949
+15
+Tl0fIre+Z0iT2dYHwMCvCgAA
+
+
+False
+1.5707963267949
+30
+Tl0fIre+Z0iT2dYHwMCvCgAA
+
+
+False
+-1.5707963267949
+15
+Tl0fIre+Z0iT2dYHwMCvCgAA
+
+
+
+clMaroon
+$00B9FFFF
+503,556;577,289
+DOJbpPAv9E+jWzPo+tTRBwAA
+txEKm8CR70Cuk11CUiY1aQAA
+Ia9E9+rZekuN0lCyr3bcuwAA
+
+False
+1.5707963267949
+15
+DOJbpPAv9E+jWzPo+tTRBwAA
+
+
+False
+1.5707963267949
+30
+DOJbpPAv9E+jWzPo+tTRBwAA
+
+
+False
+-1.5707963267949
+15
+DOJbpPAv9E+jWzPo+tTRBwAA
+
+
+
+clMaroon
+$00B9FFFF
+676,556;603,289
+Vw/BVMYru0mplhHb7LN7xAAA
+txEKm8CR70Cuk11CUiY1aQAA
+3zj+g3elVkKhJer42rrZeAAA
+
+False
+1.5707963267949
+15
+Vw/BVMYru0mplhHb7LN7xAAA
+
+
+False
+1.5707963267949
+30
+Vw/BVMYru0mplhHb7LN7xAAA
+
+
+False
+-1.5707963267949
+15
+Vw/BVMYru0mplhHb7LN7xAAA
+
+
+
+clMaroon
+$00B9FFFF
+473,556;443,447
+1tgP9ALDWkSXfAEOH31nEAAA
+nVtu8nPKAk22+oIBt8kPjAAA
+Ia9E9+rZekuN0lCyr3bcuwAA
+
+False
+1.5707963267949
+15
+1tgP9ALDWkSXfAEOH31nEAAA
+
+
+False
+1.5707963267949
+30
+1tgP9ALDWkSXfAEOH31nEAAA
+
+
+False
+-1.5707963267949
+15
+1tgP9ALDWkSXfAEOH31nEAAA
+
+
+
+clMaroon
+$00B9FFFF
+728,556;754,479
+toD1Nhg/ik+9R8r966zdrgAA
+4j80tfni4UmZL6wIRCcF1wAA
+3zj+g3elVkKhJer42rrZeAAA
+
+False
+1.5707963267949
+15
+toD1Nhg/ik+9R8r966zdrgAA
+
+
+False
+1.5707963267949
+30
+toD1Nhg/ik+9R8r966zdrgAA
+
+
+False
+-1.5707963267949
+15
+toD1Nhg/ik+9R8r966zdrgAA
+
+
+
+clMaroon
+$00EDDADA
+10
+108
+300
+132
+84
+True
+uI7XjfC9p0++i29/9XhB2wAA
+
+
+1
+EnSSLSessionMode
+
+
+<<enumeration>>
+
+
+False
+
+
+
+uI7XjfC9p0++i29/9XhB2wAA
+
+
+False
+uI7XjfC9p0++i29/9XhB2wAA
+
+
+
+clMaroon
+$00EDDADA
+10
+68
+408
+213
+116
+True
+DIS1hiv90kC+ATLNES3MPgAA
+
+
+1
+EnSSLVerifyMode
+
+
+<<enumeration>>
+
+
+False
+
+
+
+DIS1hiv90kC+ATLNES3MPgAA
+
+
+False
+DIS1hiv90kC+ATLNES3MPgAA
+
+
+
+
+143
+
+EnServiceState
+jvfBmo6uGkC61ckI99TMgAAA
+3
+/Hg9sU6SmkaAX3wqfKf/lAAA
+wPOn+zBnJ02Mf+2m4vEdbwAA
+8vi/z6yaDUShoIWb1X8UvgAA
+8
+9ze/PvOnvU2I3wuW3sw7dgAA
+bb0LhDAaoUWNpOxTYJKZFwAA
+ovLyeMCsGU+CSwChq6MhOQAA
+fPFZ9bkoRkSS9IXDRWQPhQAA
+3O88wlYsrUS175Djzxc2dAAA
+F9rQZp8vdkS+d68SMN96wwAA
+4wHcw6tqd0mfon0oAGPsCgAA
+dZbcHxIwz0KDNKb0mYF2sAAA
+4
+
+SS_STARTING
+3KsfqnlMb0ieGw/IAO5hFQAA
+1
+
+Cpp
+CppEnumLiteral
+CppEnumLiteralValue
+0
+BUAg5V47OEmKqbfsSVGSZQAA
+
+
+
+SS_STARTED
+3KsfqnlMb0ieGw/IAO5hFQAA
+1
+
+Cpp
+CppEnumLiteral
+CppEnumLiteralValue
+1
+x45Shq4m3UCyyhhHgqIauwAA
+
+
+
+SS_STOPPING
+3KsfqnlMb0ieGw/IAO5hFQAA
+1
+
+Cpp
+CppEnumLiteral
+CppEnumLiteralValue
+2
+lRR5ieVM/kiOUDwCIMzM3gAA
+
+
+
+SS_STOPPED
+3KsfqnlMb0ieGw/IAO5hFQAA
+1
+
+Cpp
+CppEnumLiteral
+CppEnumLiteralValue
+3
+CdW6GmQJlkaZO1o+SoZgAQAA
+
+
+
+
+EnSocketOperation
+jvfBmo6uGkC61ckI99TMgAAA
+3
+NQa42WghXU2XZMat6ngMLgAA
+taqRhJZSJEeDgM2FarHi8gAA
+Cjh6qO8sB0qDMc5eq2ww/AAA
+2
+GsWmM9R3lUSKuiHhl55jQAAA
+c0UAA1N5nkuBLBDAo1fUewAA
+6
+
+SO_UNKNOWN
+bcrguJxo002HtvMUNvyx5QAA
+1
+
+Cpp
+CppEnumLiteral
+CppEnumLiteralValue
+0
+xnhXkWFrI0mA7yhIClHMigAA
+
+
+
+SO_ACCEPT
+bcrguJxo002HtvMUNvyx5QAA
+1
+
+Cpp
+CppEnumLiteral
+CppEnumLiteralValue
+1
+WpQiSMOAokio6w6T3QFhkwAA
+
+
+
+SO_CONNECT
+bcrguJxo002HtvMUNvyx5QAA
+1
+
+Cpp
+CppEnumLiteral
+CppEnumLiteralValue
+2
+H/x8WMv+e0mjCuRuGPCPjQAA
+
+
+
+SO_SEND
+bcrguJxo002HtvMUNvyx5QAA
+1
+
+Cpp
+CppEnumLiteral
+CppEnumLiteralValue
+3
+SqubH1/udUiyUV0J7SlCIgAA
+
+
+
+SO_RECEIVE
+bcrguJxo002HtvMUNvyx5QAA
+1
+
+Cpp
+CppEnumLiteral
+CppEnumLiteralValue
+4
+1kgrtl72TESkbs8gun55PgAA
+
+
+
+SO_CLOSE
+bcrguJxo002HtvMUNvyx5QAA
+
+
+
+EnHandleResult
+jvfBmo6uGkC61ckI99TMgAAA
+3
+VuiSEv/w/0a3Oyyjh1kWkwAA
+s36P0ZvCVk+oLhDzfoBY/wAA
+Ccn2Qg6Ma0Oyp8pHjMlFegAA
+61
+adaDOGBgWEuCyAylwAKDbwAA
+LKJX3bvnsk6vJvlAQjut0wAA
+06GIZLg5kUu1jMwim/j9MwAA
+ZxW8hBULKEKS8QsvyzcoigAA
+6hVTBeqVykikY3wlTXGVXgAA
+WfkGxxQdYUa2AUzANYMLIAAA
+gLXAiSzN8EeIm6ptjUGojAAA
+H71ci98jC0GqvM9CL6QFvwAA
+4wFtCW9ADU6mxvYcCiih/QAA
+XbVeFUXU/0qIZNZuWncJ3AAA
+verhfpStQ0q7ybsoXzjJmAAA
+jWvVyG07wEKz1rZUJGto6gAA
+cMKqz0jfYEOUlGK6OoqJSAAA
+x5E1tLg4okSUlXXGkiXoNAAA
+KVcDJlFPdEKBwEb63GZHDwAA
++kyz9TzlwEOGr567KsdQbgAA
+CGfhoHA1+kCfX5eudHvMyAAA
+VHpO2Urm4UKDsxJJKv7UVQAA
+HRTN5SeH2EqZj07PKO4MbwAA
+czOPYdfAqkqdUEnG5y0MWwAA
+e2QxhXDEBU6D/pkzmcYdPQAA
+lU5XcMc9okaBSAVBWsm1DQAA
+jKugxgnbGEOf7ghemafM9QAA
+CZu7XXSPekWt71bArtW9VgAA
+CHeb3wK9hEKOi1Wg7mF/cgAA
+8OCVGl+B8UC3cN+S0rNjpwAA
+HLq+5xH68Eek3UdUGPGMIQAA
+vICY5hZhEkWn3DqaryPJNgAA
+mGcatlPrLkWuiazxUJssqgAA
+XSj/S5qyr0GLIcRVuV3xygAA
+0q8VMJNFb0e6fv1yroePMQAA
+ZdZcc/0iG06a6y8+0Pr7nQAA
+6TV8ZwoT8EePU/EWnp0pDAAA
+l67sTf2QREuHk1xFJnymkQAA
+APKmn8VhHEmBVtpJP3zg7gAA
+lsQyu0ke5UGZrFqARPYfVQAA
+cvUxCXjQAESP5jzbDqf1pwAA
+LklFArEZXk6pIAAUrbxCPQAA
+7KlhuuZ5Gkq2zUoqeLeOzAAA
+C4rQEoPqcUWjWLgJhz2nXQAA
+dKZf/ThZ6UOXM9sbrQ0yggAA
+WD8EL7wwvUCI3wp1oirhQwAA
+LYd6Auppx0ivXco5b3eMmAAA
+nT2vdzgUcUOIXPmjqsOWjQAA
+yvTAoZ0GSk+621GFie3/SgAA
+0heWroKSDkiWbUj62lsy9QAA
+VbWC+1lZ9kKjKxambR7PvwAA
+ZHsPJG5Vv0qAXwO9ZApwPQAA
+SGcECv+rWk+E4UEVQQRDJQAA
+wT94Upy180OBA+q8z4M1iwAA
+dCmV6rFUskClp5cFhzktuwAA
+B6hfL/aJ7UuAED1idXsjvgAA
+2/QUmlL7j0maQpXQfrMf7gAA
+2jcL33RndEmBQ7gKXXfG5gAA
+ucQlS1tNfk2FGPNExhVhvgAA
+e51TnMhB6UC2UfK9K2Pj1QAA
+o0Frrqxz90uNq140puj4nAAA
+1mnjR/jTTkWCRqbG9WsYEQAA
+1483UGuwV0mmS96an+pIPgAA
+VMOxJjyxVESu7TX+zZGY6wAA
+gcbmGeNA4UygtsenxtGpoAAA
+3
+
+HR_OK
+2khtjHI2AUSz1nm7UQu8uwAA
+1
+
+Cpp
+CppEnumLiteral
+CppEnumLiteralValue
+0
+JM8lTQ8G102A2skNePFfmgAA
+
+
+
+HR_IGNORE
+2khtjHI2AUSz1nm7UQu8uwAA
+1
+
+Cpp
+CppEnumLiteral
+CppEnumLiteralValue
+1
+MN1C0/kmi0OhE3TdoTOEngAA
+
+
+
+HR_ERROR
+2khtjHI2AUSz1nm7UQu8uwAA
+1
+
+Cpp
+CppEnumLiteral
+CppEnumLiteralValue
+2
+leMhmMQ/cEOq84sQ6Hj2+QAA
+
+
+
+
+EnFetchResult
+jvfBmo6uGkC61ckI99TMgAAA
+3
+9QjjQOhUJkivVQsgrhoMHQAA
+4MOlIJOFnU6pDDZDKQohBAAA
+79m3E4wU40GjURBEYh9i5gAA
+16
+MwV7fGPluUy5cG052ia1ZQAA
+Qnh5SR3mR0qR3je2xAm9lgAA
+pSBQQfHuKUOafNF157wmYQAA
+plHgQTYLi0+3qeTBQ/JSFwAA
+KSLVzFuCPkKqj999rwzYjwAA
+waVlE2AELEa3IP3T3FU9zAAA
+0euLPVEbvU2gmXRfU5F26gAA
+mE+GEhh7m0e91ic9rXIpeQAA
+Omil8R9+aU6mMpn2pRj3/wAA
+f0yLJEhj1kC+z+SSR+IASQAA
+lAS/GTdA2k2PTxsnT6SW0QAA
+CiNcjwHQdUmUYLMHmitewAAA
+9UWOhWWRKUmr7gKdc+W06QAA
+u/4RAvStPk22G7K4ypkvsAAA
+7xafWxefNEqfQrpHq24TPAAA
+wxuZPm+JjUaW018xlRoYFAAA
+3
+
+FR_OK
+VQDDk4BU6UmBmig6SmOuoQAA
+1
+
+Cpp
+CppEnumLiteral
+CppEnumLiteralValue
+0
+7aUIc74hv0a2Dav+FeSHnQAA
+
+
+
+FR_LENGTH_TOO_LONG
+VQDDk4BU6UmBmig6SmOuoQAA
+1
+
+Cpp
+CppEnumLiteral
+CppEnumLiteralValue
+1
+KoTT/DUbc0indnFvADPv7gAA
+
+
+
+FR_DATA_NOT_FOUND
+VQDDk4BU6UmBmig6SmOuoQAA
+1
+
+Cpp
+CppEnumLiteral
+CppEnumLiteralValue
+2
+Mc7HjCaoAE6heKNVpuoP7wAA
+
+
+
+
+EnSendPolicy
+jvfBmo6uGkC61ckI99TMgAAA
+3
+E1WYKeJPNUWB7buQHR+sigAA
+uaCECG+u80iyzyWf+IWAZwAA
+IVsrBaUSWkaj79k27/BwoAAA
+8
+1EHzYGXWPE2MUmWYdtI7kAAA
+XNP++PGwFUmR+dtq0ZbchAAA
++q3NsfXI8kSg3B73YWi1/QAA
+cQe2CrUccUans1pbj67KbwAA
+nbJaN9nP4ECrwbuLiFO9+AAA
+LXoI55nFcEqRumCnnXHYcAAA
+TkPZUvHM+0OI1ABKjX8i+wAA
+zlY5tvQ3XU6NmtOqD0mCCgAA
+3
+
+SP_PACK
+p4RvBvwp3kOxyo/4mj2ZKwAA
+1
+
+Cpp
+CppEnumLiteral
+CppEnumLiteralValue
+0
+RMnP0ysf8ESt8v1xLYqyCAAA
+
+
+
+SP_SAFE
+p4RvBvwp3kOxyo/4mj2ZKwAA
+1
+
+Cpp
+CppEnumLiteral
+CppEnumLiteralValue
+1
+bchy+/eMkEGwtflyFgXo8wAA
+
+
+
+SP_DIRECT
+p4RvBvwp3kOxyo/4mj2ZKwAA
+1
+
+Cpp
+CppEnumLiteral
+CppEnumLiteralValue
+2
+WgMrZyglOECmy0BcYsXHjQAA
+
+
+
+
+EnRecvPolicy
+jvfBmo6uGkC61ckI99TMgAAA
+2
+
+RP_SERIAL
+vMd4FzYm40iDH4xBw/j9ogAA
+1
+
+Cpp
+CppEnumLiteral
+CppEnumLiteralValue
+0
+bFPFaMQcXkGNRuBeBbe64QAA
+
+
+
+RP_PARALLEL
+vMd4FzYm40iDH4xBw/j9ogAA
+1
+
+Cpp
+CppEnumLiteral
+CppEnumLiteralValue
+1
+YXOWHmaGjESUsyOfPfas1gAA
+
+
+
+
+EnSocketError
+jvfBmo6uGkC61ckI99TMgAAA
+3
+LUyoKimFt0KJG7+H2NuqEwAA
+4ZEt1AuH+EaeHK+e1JY5jQAA
+5SaxfJha/UOmVXU5e/n0ZwAA
+8
+T35PsWmhyk+ZtRWGvqiIUAAA
+UJVfPYV+aEq9rcSe/zX6GgAA
+VrYcL5m/W0qGcPiWE0cN/AAA
+zDkL/nxTgE2455rOh53S6AAA
+Q3/ttXPTbEuCVf5/ZV5x5gAA
+3XicrDatxkWJ/aeboujmRQAA
+so4uYcVcmE2+ihdJmQPwHQAA
+vKQBvyphHk+Ant1YP79wrwAA
+16
+
+SE_OK
+R9EXi7T78E6Gt882nRMyDwAA
+1
+
+Cpp
+CppEnumLiteral
+CppEnumLiteralValue
+NO_ERROR
+KaCVWp+Jj0q8cZlQLF6ZbgAA
+
+
+
+SE_ILLEGAL_STATE
+R9EXi7T78E6Gt882nRMyDwAA
+1
+
+Cpp
+CppEnumLiteral
+CppEnumLiteralValue
+1
+arqDwKNsN06o13X1u+Lf5gAA
+
+
+
+SE_INVALID_PARAM
+R9EXi7T78E6Gt882nRMyDwAA
+1
+
+Cpp
+CppEnumLiteral
+CppEnumLiteralValue
+2
+vigWJvW9pE2aQ9p+y9msJwAA
+
+
+
+SE_SOCKET_CREATE
+R9EXi7T78E6Gt882nRMyDwAA
+1
+
+Cpp
+CppEnumLiteral
+CppEnumLiteralValue
+3
+QvOGV4dJfk2aL8K8PfqS7AAA
+
+
+
+SE_SOCKET_BIND
+R9EXi7T78E6Gt882nRMyDwAA
+1
+
+Cpp
+CppEnumLiteral
+CppEnumLiteralValue
+4
+MhhrBArXfUWWFpbAGAdWHAAA
+
+
+
+SE_SOCKET_PREPARE
+R9EXi7T78E6Gt882nRMyDwAA
+1
+
+Cpp
+CppEnumLiteral
+CppEnumLiteralValue
+5
+soC6ImijCkiLLnEl1SvDzgAA
+
+
+
+SE_SOCKET_LISTEN
+R9EXi7T78E6Gt882nRMyDwAA
+1
+
+Cpp
+CppEnumLiteral
+CppEnumLiteralValue
+6
+tW0Mrk6QWEKb0Ch9ISr60wAA
+
+
+
+SE_CP_CREATE
+R9EXi7T78E6Gt882nRMyDwAA
+1
+
+Cpp
+CppEnumLiteral
+CppEnumLiteralValue
+7
+7rT4RztGj0+pnJkc0Cp+XAAA
+
+
+
+SE_WORKER_THREAD_CREATE
+R9EXi7T78E6Gt882nRMyDwAA
+1
+
+Cpp
+CppEnumLiteral
+CppEnumLiteralValue
+8
+ztTGikfe+EWJNzAdWJh14QAA
+
+
+
+SE_DETECT_THREAD_CREATE
+R9EXi7T78E6Gt882nRMyDwAA
+1
+
+Cpp
+CppEnumLiteral
+CppEnumLiteralValue
+9
+lW+r6J+OxEmCgUQpQfFNdQAA
+
+
+
+SE_SOCKE_ATTACH_TO_CP
+R9EXi7T78E6Gt882nRMyDwAA
+1
+
+Cpp
+CppEnumLiteral
+CppEnumLiteralValue
+10
+/Trt2Kp1HUSND1UbbxbktwAA
+
+
+
+SE_CONNECT_SERVER
+R9EXi7T78E6Gt882nRMyDwAA
+1
+
+Cpp
+CppEnumLiteral
+CppEnumLiteralValue
+11
+F17dxSPkMkyF5sfoD0ku9QAA
+
+
+
+SE_NETWORK
+R9EXi7T78E6Gt882nRMyDwAA
+1
+
+Cpp
+CppEnumLiteral
+CppEnumLiteralValue
+12
+VZelwoo8Y0ipPYjw4Sx1XwAA
+
+
+
+SE_DATA_PROC
+R9EXi7T78E6Gt882nRMyDwAA
+1
+
+Cpp
+CppEnumLiteral
+CppEnumLiteralValue
+13
+vTvXc97soke8UflqYudhOQAA
+
+
+
+SE_DATA_SEND
+R9EXi7T78E6Gt882nRMyDwAA
+1
+
+Cpp
+CppEnumLiteral
+CppEnumLiteralValue
+14
+RY+VKABQX0uJPu0+bRCQOwAA
+
+
+
+SE_SSL_ENV_NOT_READY
+R9EXi7T78E6Gt882nRMyDwAA
+
+
+
+EnCastMode
+jvfBmo6uGkC61ckI99TMgAAA
+3
+31uacB4TTkObrBVv8UmT/QAA
+Xf9AliEOfUyltztpODKuBAAA
+EwQxRQhrz0S3t87I5MNmjgAA
+4
++b6DANHm0U+ItjJPjpe/7gAA
+KTy9RH4DjEKRdPjXPPuUewAA
+qVINKJ7Vnk+cRsT1N5FwSgAA
+1fkxDagKXUu0KbeEcCsrnwAA
+2
+
+CM_MULTICAST
+6zImDSI92UG9tawjYrSv0AAA
+1
+
+Cpp
+CppEnumLiteral
+CppEnumLiteralValue
+0
+GWBYbzhUv0+kIkD2JIYceAAA
+
+
+
+CM_BROADCAST
+6zImDSI92UG9tawjYrSv0AAA
+1
+
+Cpp
+CppEnumLiteral
+CppEnumLiteralValue
+1
+DBSQKvW2i0KGL/L59DI6fAAA
+
+
+
+
+IComplexSocketListener
+jvfBmo6uGkC61ckI99TMgAAA
+12
+EY7frgNjn025AVRzjddHWgAA
+MfJ0iWFEkECmzH73O2Dp7wAA
+zdTNFj3TYkKiuUcbyDjROgAA
+8AFozj/zhkOAcMcdh7vuGAAA
+DW2yUJIctUaEVCg8tu3QxAAA
+iDScEs//eEWja+mMZJrnzQAA
+OQMMF2P3xEyDMxiRGKKtFgAA
+VedRmlfVqUGE3cYFLQ1fTQAA
+gL3x0HKKs0C7DDVK9HdhLwAA
+b91ip+1A2ESDZbW6PMkCWwAA
+BYK0thKYJUafEJaG8HeqAAAA
+YPxm8lYQ+EqzffI83webHwAA
+2
+sCzG9DqxZkGTaKemcfKYcAAA
+u7n8K/7SVEOrbQ7qqBgw5gAA
+6
+
+OnSend
+True
+9FsvxqZjkEyUqc9w2NDcQgAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+UxnEnbNIqECt7ocz3bOr+gAA
+
+4
+
+dwConnID
+UxnEnbNIqECt7ocz3bOr+gAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+pData
+BYTE
+UxnEnbNIqECt7ocz3bOr+gAA
+2
+
+Cpp
+CppConst
+CppConst
+True
+lr3HsJ1XyE6eI1g6PwolIgAA
+
+
+Cpp
+CppPointer
+CppPointer
+*
+lr3HsJ1XyE6eI1g6PwolIgAA
+
+
+
+iLength
+int
+UxnEnbNIqECt7ocz3bOr+gAA
+
+
+return
+pdkReturn
+UxnEnbNIqECt7ocz3bOr+gAA
+2khtjHI2AUSz1nm7UQu8uwAA
+
+
+
+OnReceive
+True
+9FsvxqZjkEyUqc9w2NDcQgAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+tZzokQADmUmETGvWx6ra5wAA
+
+4
+
+dwConnID
+tZzokQADmUmETGvWx6ra5wAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+pData
+BYTE
+tZzokQADmUmETGvWx6ra5wAA
+2
+
+Cpp
+CppConst
+CppConst
+True
+T0aJ1Eb3r0idgTJhb0WziwAA
+
+
+Cpp
+CppPointer
+CppPointer
+*
+T0aJ1Eb3r0idgTJhb0WziwAA
+
+
+
+iLength
+int
+tZzokQADmUmETGvWx6ra5wAA
+
+
+return
+pdkReturn
+tZzokQADmUmETGvWx6ra5wAA
+2khtjHI2AUSz1nm7UQu8uwAA
+
+
+
+OnReceive
+True
+9FsvxqZjkEyUqc9w2NDcQgAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+NTlj89mrXUm8y2h0jOEsagAA
+
+3
+
+dwConnID
+NTlj89mrXUm8y2h0jOEsagAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+iLength
+int
+NTlj89mrXUm8y2h0jOEsagAA
+
+
+return
+pdkReturn
+NTlj89mrXUm8y2h0jOEsagAA
+2khtjHI2AUSz1nm7UQu8uwAA
+
+
+
+OnClose
+True
+9FsvxqZjkEyUqc9w2NDcQgAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+W+0RtP4kuUGJJl73XG3xzAAA
+
+4
+
+pdkReturn
+W+0RtP4kuUGJJl73XG3xzAAA
+2khtjHI2AUSz1nm7UQu8uwAA
+
+
+dwConnID
+W+0RtP4kuUGJJl73XG3xzAAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+enOperation
+W+0RtP4kuUGJJl73XG3xzAAA
+bcrguJxo002HtvMUNvyx5QAA
+
+
+iErrorCode
+int
+W+0RtP4kuUGJJl73XG3xzAAA
+
+
+
+OnShutdown
+True
+9FsvxqZjkEyUqc9w2NDcQgAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+OD5t/+LJmE+25cl69KkvbAAA
+
+1
+
+return
+pdkReturn
+OD5t/+LJmE+25cl69KkvbAAA
+2khtjHI2AUSz1nm7UQu8uwAA
+
+
+
+IComplexSocketListener
+UMLStandard
+destroy
+vkPrivate
+9FsvxqZjkEyUqc9w2NDcQgAA
+
+
+
+IServerListener
+jvfBmo6uGkC61ckI99TMgAAA
+8
+1XW3u/7OaUqWSnACglXKhgAA
+8vq0S4pRcUKVy6uUspcN9gAA
+52/x+av5JUKCcHOiIwVcVgAA
+t2ozgFgpTk+Zi/h7ApLuiQAA
+yfVKcgxjhUa+TjjPZrtVYQAA
+dN+nn1z/O0OANAhlqFiRgwAA
+MxkgcMdnQ0qUEGGvVflOpAAA
+EvMw+zdmhkC5E5eKqwVdqAAA
+1
+sCzG9DqxZkGTaKemcfKYcAAA
+2
+2uOeA48ekEWyQBc6HVdLyAAA
+xHgTfxe+SkyBHjq4gN29qAAA
+1
+
+OnPrepareListen
+True
+SX/KZkmsDk+r8uamHH4ZLgAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+fKE7pYliQE+yhyR8VLWoiwAA
+
+2
+
+soListen
+SOCKET
+fKE7pYliQE+yhyR8VLWoiwAA
+
+
+return
+pdkReturn
+fKE7pYliQE+yhyR8VLWoiwAA
+2khtjHI2AUSz1nm7UQu8uwAA
+
+
+
+
+ITcpServerListener
+jvfBmo6uGkC61ckI99TMgAAA
+8
+1gWIbf39QUqjUn/XGJtmLwAA
+xKO2OpFba0+BlXb3lslqzgAA
+CDo2UE1S0kGNMdasSrcaSwAA
+CdqpKkq/OECFSyxGwx0DlAAA
+bxQFxtW+e0KFZlCcgFO9AAAA
+3CBczl2GTkmNq/Y2WNdaigAA
+1WXbaiPyB0Wpfi1qH2OUqgAA
+W6ru1KYeHk6CNd3bmRc8awAA
+1
+2uOeA48ekEWyQBc6HVdLyAAA
+1
+oU9IW4eh8ESLIhPxMDNlogAA
+2
+
+OnAccept
+True
+h8NmVuBtVUWgcCSKCdxePgAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+ahWZrAQVRkC0+dgeHf1ryAAA
+
+3
+
+dwConnID
+ahWZrAQVRkC0+dgeHf1ryAAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+soClient
+SOCKET
+ahWZrAQVRkC0+dgeHf1ryAAA
+
+
+return
+pdkReturn
+ahWZrAQVRkC0+dgeHf1ryAAA
+2khtjHI2AUSz1nm7UQu8uwAA
+
+
+
+OnHandShake
+True
+h8NmVuBtVUWgcCSKCdxePgAA
+2
+
+pdkReturn
+ktPjlU9LukOfnU8HhjRrFgAA
+2khtjHI2AUSz1nm7UQu8uwAA
+
+
+dwConnID
+ktPjlU9LukOfnU8HhjRrFgAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+8
+tW7BVXw750CVMd+46YfU4gAA
+m0VjNIF00UeJ9xj8Mli6YAAA
+nRjXsyaRi0OblwNRuNtT6gAA
+xG71pXgMdkypZgGSiBJkEwAA
+xPh7EKKJrke0GF0PHgjevQAA
+fHPrkJ36IkqPL0o/nLUU4AAA
+G0BbpT0DqkaGwCsl9psIpAAA
+D0RYqJbMOES1mk+RXQL+jQAA
+
+
+CTcpServerListener
+jvfBmo6uGkC61ckI99TMgAAA
+4
+afZfzoCg4Eq/XSFKvRAWKAAA
+j3d9XZKJP0eYmNvWGYJmQgAA
+DBvDCrp4+kmRyNyjRHdwCQAA
+yMoaILNISESSsyXGf7gF3AAA
+1
+oU9IW4eh8ESLIhPxMDNlogAA
+1
+08VC9kxGKEmdHNOlu6NmbwAA
+6
+
+OnReceive
+nhHxAccKxEm2g0sPkFAnhwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+KyWMgoW1e0ahSyohip+itQAA
+
+3
+
+dwConnID
+KyWMgoW1e0ahSyohip+itQAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+iLength
+int
+KyWMgoW1e0ahSyohip+itQAA
+
+
+return
+pdkReturn
+KyWMgoW1e0ahSyohip+itQAA
+2khtjHI2AUSz1nm7UQu8uwAA
+
+
+
+OnSend
+nhHxAccKxEm2g0sPkFAnhwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+oQ/mgYHQGE+mzLjttwXHQgAA
+
+4
+
+dwConnID
+oQ/mgYHQGE+mzLjttwXHQgAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+pData
+BYTE
+oQ/mgYHQGE+mzLjttwXHQgAA
+2
+
+Cpp
+CppConst
+CppConst
+True
+nwpLSWWS1UupVB3nLpfqlAAA
+
+
+Cpp
+CppPointer
+CppPointer
+*
+nwpLSWWS1UupVB3nLpfqlAAA
+
+
+
+iLength
+int
+oQ/mgYHQGE+mzLjttwXHQgAA
+
+
+return
+pdkReturn
+oQ/mgYHQGE+mzLjttwXHQgAA
+2khtjHI2AUSz1nm7UQu8uwAA
+
+
+
+OnPrepareListen
+nhHxAccKxEm2g0sPkFAnhwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+DawAolJMTkejEoqsILJHNQAA
+
+2
+
+soListen
+SOCKET
+DawAolJMTkejEoqsILJHNQAA
+
+
+return
+pdkReturn
+DawAolJMTkejEoqsILJHNQAA
+2khtjHI2AUSz1nm7UQu8uwAA
+
+
+
+OnAccept
+nhHxAccKxEm2g0sPkFAnhwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+RZRhFb+hPEWiHU6MFeHslAAA
+
+3
+
+dwConnID
+RZRhFb+hPEWiHU6MFeHslAAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+soClient
+SOCKET
+RZRhFb+hPEWiHU6MFeHslAAA
+
+
+return
+pdkReturn
+RZRhFb+hPEWiHU6MFeHslAAA
+2khtjHI2AUSz1nm7UQu8uwAA
+
+
+
+OnHandShake
+nhHxAccKxEm2g0sPkFAnhwAA
+2
+
+pdkReturn
+Js7K75sDZ0OWgflJwe6fWwAA
+2khtjHI2AUSz1nm7UQu8uwAA
+
+
+dwConnID
+Js7K75sDZ0OWgflJwe6fWwAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+
+OnShutdown
+nhHxAccKxEm2g0sPkFAnhwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+CfcT+Z8ZEkOQkAxhtGPnagAA
+
+1
+
+return
+pdkReturn
+CfcT+Z8ZEkOQkAxhtGPnagAA
+2khtjHI2AUSz1nm7UQu8uwAA
+
+
+
+
+CTcpPullServerListener
+jvfBmo6uGkC61ckI99TMgAAA
+4
+120BkdYky02f0xbh3EF3XwAA
+9AqPt40PaE22WxmDRG48uwAA
+fvXv+QcBKkeZYNBhlGpfaQAA
+08IKw2Y+TE6PBeFX79S2hwAA
+1
+08VC9kxGKEmdHNOlu6NmbwAA
+2
+
+OnReceive
+True
+9yFTOYs1vEa8s69V7MjeDgAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+JDbgW2br+k+KnXnUnpu2YgAA
+
+3
+
+dwConnID
+JDbgW2br+k+KnXnUnpu2YgAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+iLength
+int
+JDbgW2br+k+KnXnUnpu2YgAA
+
+
+return
+pdkReturn
+JDbgW2br+k+KnXnUnpu2YgAA
+2khtjHI2AUSz1nm7UQu8uwAA
+
+
+
+OnReceive
+9yFTOYs1vEa8s69V7MjeDgAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+NXBEdo9S+0eGI0mGn2oHdgAA
+
+4
+
+dwConnID
+NXBEdo9S+0eGI0mGn2oHdgAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+pData
+BYTE
+NXBEdo9S+0eGI0mGn2oHdgAA
+2
+
+Cpp
+CppConst
+CppConst
+True
+N/5tzT4ibEWm6NBNoI8FVAAA
+
+
+Cpp
+CppPointer
+CppPointer
+*
+N/5tzT4ibEWm6NBNoI8FVAAA
+
+
+
+iLength
+int
+NXBEdo9S+0eGI0mGn2oHdgAA
+
+
+return
+pdkReturn
+NXBEdo9S+0eGI0mGn2oHdgAA
+2khtjHI2AUSz1nm7UQu8uwAA
+
+
+
+
+IUdpServerListener
+jvfBmo6uGkC61ckI99TMgAAA
+8
+Zp5gWO2/s0iv2bqlRzbEeAAA
+n5rEvTbXwEibt/4IeDaIjAAA
+JfJM4IFeE0WUWDSt8BeZdgAA
+kidl8YEgRUK8sxP6Ry3NmwAA
+GAyMC/pBC0uNZTrkQ2VX4wAA
+KwxhqlDc5k6Es/QTnOeo2AAA
+5nBdwLvgnEuQKs0zhUit7gAA
+OOwyADMn+Emi6NAveiMXcgAA
+1
+xHgTfxe+SkyBHjq4gN29qAAA
+1
+7wiMv4rx/0CjGXfkMJ+fBgAA
+1
+
+OnAccept
+True
+ZMn2cmFZr0+GuJk5rQoyDgAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+pENbBQ1SD0WZlH3bC40IRAAA
+
+3
+
+dwConnID
+pENbBQ1SD0WZlH3bC40IRAAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+pSockAddr
+SOCKADDR_IN
+pENbBQ1SD0WZlH3bC40IRAAA
+2
+
+Cpp
+CppConst
+CppConst
+True
+QVn9m6TbLk+VMvvw+5Ht6QAA
+
+
+Cpp
+CppPointer
+CppPointer
+*
+QVn9m6TbLk+VMvvw+5Ht6QAA
+
+
+
+return
+pdkReturn
+pENbBQ1SD0WZlH3bC40IRAAA
+2khtjHI2AUSz1nm7UQu8uwAA
+
+
+1
+xXvRk1+KjEC2XroCTRCe9AAA
+
+
+CUdpServerListener
+jvfBmo6uGkC61ckI99TMgAAA
+4
+58PT+RQQQEeK5sPeQ8LchgAA
+9ohN9hsnNUmyec5H8WeR8QAA
+OSXyev2glUOY8EyYWGHFtwAA
+hozlBZ/kl0ylG0sCmq7uvgAA
+1
+7wiMv4rx/0CjGXfkMJ+fBgAA
+5
+
+OnReceive
+Z797Ei2tSUi6O/GTUGUZfgAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+dciDleepcUGUbGexhJfdfAAA
+
+3
+
+dwConnID
+dciDleepcUGUbGexhJfdfAAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+iLength
+int
+dciDleepcUGUbGexhJfdfAAA
+
+
+return
+pdkReturn
+dciDleepcUGUbGexhJfdfAAA
+2khtjHI2AUSz1nm7UQu8uwAA
+
+
+
+OnSend
+Z797Ei2tSUi6O/GTUGUZfgAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+v0lOjkkjXU6/0xXkBr8dZgAA
+
+4
+
+dwConnID
+v0lOjkkjXU6/0xXkBr8dZgAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+pData
+BYTE
+v0lOjkkjXU6/0xXkBr8dZgAA
+2
+
+Cpp
+CppConst
+CppConst
+True
+s30XsPO53k6Q7Yh32zrCdQAA
+
+
+Cpp
+CppPointer
+CppPointer
+*
+s30XsPO53k6Q7Yh32zrCdQAA
+
+
+
+iLength
+int
+v0lOjkkjXU6/0xXkBr8dZgAA
+
+
+return
+pdkReturn
+v0lOjkkjXU6/0xXkBr8dZgAA
+2khtjHI2AUSz1nm7UQu8uwAA
+
+
+
+OnPrepareListen
+Z797Ei2tSUi6O/GTUGUZfgAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+9+xZIEolXU6woUFK/xjYhwAA
+
+2
+
+soListen
+SOCKET
+9+xZIEolXU6woUFK/xjYhwAA
+
+
+return
+pdkReturn
+9+xZIEolXU6woUFK/xjYhwAA
+2khtjHI2AUSz1nm7UQu8uwAA
+
+
+
+OnAccept
+Z797Ei2tSUi6O/GTUGUZfgAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+2GrhsKxh9ketLTsf6rjdPQAA
+
+3
+
+dwConnID
+2GrhsKxh9ketLTsf6rjdPQAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+pSockAddr
+SOCKADDR_IN
+2GrhsKxh9ketLTsf6rjdPQAA
+2
+
+Cpp
+CppConst
+CppConst
+True
+PTs4LtfZSEKTEmdCjogwMgAA
+
+
+Cpp
+CppPointer
+CppPointer
+*
+PTs4LtfZSEKTEmdCjogwMgAA
+
+
+
+return
+pdkReturn
+2GrhsKxh9ketLTsf6rjdPQAA
+2khtjHI2AUSz1nm7UQu8uwAA
+
+
+
+OnShutdown
+Z797Ei2tSUi6O/GTUGUZfgAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+yp9GhYfsGkWhy0mm5WeV+gAA
+
+1
+
+return
+pdkReturn
+yp9GhYfsGkWhy0mm5WeV+gAA
+2khtjHI2AUSz1nm7UQu8uwAA
+
+
+
+
+IAgentListener
+jvfBmo6uGkC61ckI99TMgAAA
+8
+J0BFOQn6q0qGw65bKVVPEwAA
+PgvmDuxXxEm1ew/FnpSlEwAA
+i8KjcDF8JEuTITYQLqZ31AAA
+L21BJ1KQkE6I6T13U+XAhAAA
+AD2hOL2vpE+3hsFwE/MFuwAA
+gXN/4Xj/XkW21C7QR2UdwAAA
+aFNt0wkd2kCPf+eJPEcIBQAA
+PfSM520ahk+6gsfkZN9HVgAA
+1
+u7n8K/7SVEOrbQ7qqBgw5gAA
+1
+9cmaeBE4CUK4eiysDAdUBAAA
+2
+
+OnPrepareConnect
+True
+lJ5FZia7y0evV31w/xLmsAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+ae18fyvu70uIuDanh/ojVAAA
+
+3
+
+dwConnID
+ae18fyvu70uIuDanh/ojVAAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+socket
+SOCKET
+ae18fyvu70uIuDanh/ojVAAA
+
+
+return
+pdkReturn
+ae18fyvu70uIuDanh/ojVAAA
+2khtjHI2AUSz1nm7UQu8uwAA
+
+
+
+OnConnect
+True
+lJ5FZia7y0evV31w/xLmsAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
++Nfu3WsbMke/yyZshTwy4AAA
+
+2
+
+dwConnID
++Nfu3WsbMke/yyZshTwy4AAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+return
+pdkReturn
++Nfu3WsbMke/yyZshTwy4AAA
+2khtjHI2AUSz1nm7UQu8uwAA
+
+
+
+
+ITcpAgentListener
+jvfBmo6uGkC61ckI99TMgAAA
+8
+amWQQ3AliU6mio+Jb/FaJAAA
+y32UCDfJskOui4hrgxPnBAAA
+6qqKArvKaUqYO5ybYpsSuwAA
+aXPAXk9eREqVDZuU6r9aZQAA
+lZ1Q7w+edEej4hQluAnhMgAA
+N2bIGJ0bIk+UX/xAKvGIigAA
+avyXCSFI4UKZlmRGlM2OwgAA
+PM0VSuCv7ECCQIqp/qjFrQAA
+1
+9cmaeBE4CUK4eiysDAdUBAAA
+1
+RRh8s6Oze0Sz3Sygnu9oMQAA
+1
+
+OnHandShake
+True
+skl0Nm/UIUCTsqkUAIXmzAAA
+2
+
+pdkReturn
+9qVLVtn1Nki86q8fqUiKbQAA
+2khtjHI2AUSz1nm7UQu8uwAA
+
+
+dwConnID
+9qVLVtn1Nki86q8fqUiKbQAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+5
+SOpFN5D6dUi/yOIJ1NO6NAAA
+1IzM6A2aLECcC/0wa1pI4QAA
+VbMBZfCU/0ivBlGkfv9qEwAA
+bSSRih5qYUijxzNDRmFw6gAA
+pwnu3stqzE+uWyU6NsAVkQAA
+
+
+CTcpAgentListener
+jvfBmo6uGkC61ckI99TMgAAA
+4
+geKQC6XZkEefI3E4l/VkGAAA
+0daMKRm3xEWLTB3Gsta92AAA
+2WZ8bRUlWkivK1OSadnvUAAA
+JpBIJldPmUGxAopD7fU+XQAA
+1
+RRh8s6Oze0Sz3Sygnu9oMQAA
+1
+xj1q7c1vdUK4s8CkFyDE3wAA
+6
+
+OnReceive
+HjFZEYW1wEOsKFuTmPnHegAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+Pq2O6++E5U6nep84wmLP+gAA
+
+3
+
+dwConnID
+Pq2O6++E5U6nep84wmLP+gAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+iLength
+int
+Pq2O6++E5U6nep84wmLP+gAA
+
+
+return
+pdkReturn
+Pq2O6++E5U6nep84wmLP+gAA
+2khtjHI2AUSz1nm7UQu8uwAA
+
+
+
+OnSend
+HjFZEYW1wEOsKFuTmPnHegAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+15PwTCSBcEWts23fUQ7FGQAA
+
+4
+
+dwConnID
+15PwTCSBcEWts23fUQ7FGQAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+pData
+BYTE
+15PwTCSBcEWts23fUQ7FGQAA
+2
+
+Cpp
+CppConst
+CppConst
+True
+fIRiky/SV0SQdW/cO/uHHAAA
+
+
+Cpp
+CppPointer
+CppPointer
+*
+fIRiky/SV0SQdW/cO/uHHAAA
+
+
+
+iLength
+int
+15PwTCSBcEWts23fUQ7FGQAA
+
+
+return
+pdkReturn
+15PwTCSBcEWts23fUQ7FGQAA
+2khtjHI2AUSz1nm7UQu8uwAA
+
+
+
+OnPrepareConnect
+HjFZEYW1wEOsKFuTmPnHegAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+xhKIRbevWE6uWDzyVSO6GgAA
+
+3
+
+dwConnID
+xhKIRbevWE6uWDzyVSO6GgAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+socket
+SOCKET
+xhKIRbevWE6uWDzyVSO6GgAA
+
+
+return
+pdkReturn
+xhKIRbevWE6uWDzyVSO6GgAA
+2khtjHI2AUSz1nm7UQu8uwAA
+
+
+
+OnConnect
+HjFZEYW1wEOsKFuTmPnHegAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+1ya73XA+PkaGRV297OxDrwAA
+
+2
+
+dwConnID
+1ya73XA+PkaGRV297OxDrwAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+return
+pdkReturn
+1ya73XA+PkaGRV297OxDrwAA
+2khtjHI2AUSz1nm7UQu8uwAA
+
+
+
+OnHandShake
+HjFZEYW1wEOsKFuTmPnHegAA
+2
+
+pdkReturn
+HBBU8L1SYESiMPQLX5D95AAA
+2khtjHI2AUSz1nm7UQu8uwAA
+
+
+dwConnID
+HBBU8L1SYESiMPQLX5D95AAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+
+OnShutdown
+HjFZEYW1wEOsKFuTmPnHegAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+FXyIYFuXoEeUjlqnqExqdQAA
+
+1
+
+return
+pdkReturn
+FXyIYFuXoEeUjlqnqExqdQAA
+2khtjHI2AUSz1nm7UQu8uwAA
+
+
+
+
+CTcpPullAgentListener
+jvfBmo6uGkC61ckI99TMgAAA
+4
+eYGlKkdZLEutBTtuUOVCFAAA
+TZL2lX8FF0Wegrqz+P046AAA
+0OraRAUZvUK105OwHzbt1QAA
+Z5LyeK29CkeW8JGl/9sC3wAA
+1
+xj1q7c1vdUK4s8CkFyDE3wAA
+2
+
+OnReceive
+True
+hNuH1fWUHU2IT4Poty2GiwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+JDX7FarFvEqDV2ov8G0MjQAA
+
+3
+
+dwConnID
+JDX7FarFvEqDV2ov8G0MjQAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+iLength
+int
+JDX7FarFvEqDV2ov8G0MjQAA
+
+
+return
+pdkReturn
+JDX7FarFvEqDV2ov8G0MjQAA
+2khtjHI2AUSz1nm7UQu8uwAA
+
+
+
+OnReceive
+hNuH1fWUHU2IT4Poty2GiwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+gYGNXG5a0ki4z69Yh0WWCwAA
+
+4
+
+dwConnID
+gYGNXG5a0ki4z69Yh0WWCwAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+pData
+BYTE
+gYGNXG5a0ki4z69Yh0WWCwAA
+2
+
+Cpp
+CppConst
+CppConst
+True
+r088UTjRNU6QtSab5PR2FQAA
+
+
+Cpp
+CppPointer
+CppPointer
+*
+r088UTjRNU6QtSab5PR2FQAA
+
+
+
+iLength
+int
+gYGNXG5a0ki4z69Yh0WWCwAA
+
+
+return
+pdkReturn
+gYGNXG5a0ki4z69Yh0WWCwAA
+2khtjHI2AUSz1nm7UQu8uwAA
+
+
+
+
+IClient
+jvfBmo6uGkC61ckI99TMgAAA
+8
+IxwL95gLAk2VVqCaT07mZwAA
+5LoScxDICkiLOJ1Jd+SNywAA
+eVFjHaVUSkC3e4KQDrXbjAAA
+pWVU633N3Em3oXPPEfXMSgAA
+ylsx02qZaUiyvMjQBrZn+gAA
+BO6bxMMKLUSip/JxYYbmXgAA
+tZSW1mDNLEGspe67eOzH9AAA
+v2u4ybdn70GcAZiUJBSrxQAA
+3
+dOpAHC5JfkymmNyAgeRwWAAA
+VhVmNVhKIEyRJWflThCsqQAA
+MejA8cLC00G/Y3QcvCU6BgAA
+18
+
+Start
+True
+R8hLgFt1fEaSSxBO7KbEBQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+FXn2QPx7IkSUIpKABOcfdQAA
+
+5
+
+pdkReturn
+BOOL
+FXn2QPx7IkSUIpKABOcfdQAA
+
+
+lpszRemoteAddress
+LPCTSTR
+FXn2QPx7IkSUIpKABOcfdQAA
+
+
+usPort
+USHORT
+FXn2QPx7IkSUIpKABOcfdQAA
+
+
+bAsyncConnect
+BOOL
+FXn2QPx7IkSUIpKABOcfdQAA
+
+
+lpszBindAddress
+LPCTSTR
+FXn2QPx7IkSUIpKABOcfdQAA
+
+
+
+Stop
+True
+R8hLgFt1fEaSSxBO7KbEBQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+iJL0LOxsGUin/7UJ35qrxAAA
+
+1
+
+return
+pdkReturn
+BOOL
+iJL0LOxsGUin/7UJ35qrxAAA
+
+
+
+Send
+True
+R8hLgFt1fEaSSxBO7KbEBQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+JrCkLmYUWkat79J8z/33OAAA
+
+4
+
+pBuffer
+BYTE
+JrCkLmYUWkat79J8z/33OAAA
+2
+
+Cpp
+CppConst
+CppConst
+True
+jZQzKWFl8kiiRjLcXSK2QwAA
+
+
+Cpp
+CppPointer
+CppPointer
+*
+jZQzKWFl8kiiRjLcXSK2QwAA
+
+
+
+iLength
+int
+JrCkLmYUWkat79J8z/33OAAA
+
+
+iOffset
+int
+JrCkLmYUWkat79J8z/33OAAA
+
+
+return
+pdkReturn
+BOOL
+JrCkLmYUWkat79J8z/33OAAA
+
+
+
+SendPackets
+True
+R8hLgFt1fEaSSxBO7KbEBQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+ati5pb1+XUG/z7in3SkPKgAA
+
+3
+
+pBuffers
+WSABUF
+ati5pb1+XUG/z7in3SkPKgAA
+1
+
+Cpp
+CppConst
+CppConst
+True
+tx28NDlZt0KsunxC6w7hwQAA
+
+
+
+iCount
+int
+ati5pb1+XUG/z7in3SkPKgAA
+
+
+return
+pdkReturn
+BOOL
+ati5pb1+XUG/z7in3SkPKgAA
+
+
+
+SetExtra
+True
+R8hLgFt1fEaSSxBO7KbEBQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+fIga02e49kO9JeWdJjDeVAAA
+
+2
+
+pExtra
+PVOID
+fIga02e49kO9JeWdJjDeVAAA
+
+
+return
+pdkReturn
+void
+fIga02e49kO9JeWdJjDeVAAA
+
+
+
+GetExtra
+True
+R8hLgFt1fEaSSxBO7KbEBQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+HO4br1mJdUq3858p4q9MIgAA
+
+1
+
+return
+pdkReturn
+PVOID
+HO4br1mJdUq3858p4q9MIgAA
+
+
+
+HasStarted
+True
+R8hLgFt1fEaSSxBO7KbEBQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+ke39qO+O/kGCPlPHSysfUgAA
+
+1
+
+return
+pdkReturn
+BOOL
+ke39qO+O/kGCPlPHSysfUgAA
+
+
+
+GetState
+True
+R8hLgFt1fEaSSxBO7KbEBQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+TJsIJga3a0yF9owtdqlnQAAA
+
+1
+
+return
+pdkReturn
+TJsIJga3a0yF9owtdqlnQAAA
+3KsfqnlMb0ieGw/IAO5hFQAA
+
+
+
+GetLastError
+True
+R8hLgFt1fEaSSxBO7KbEBQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+1k4Gz4a0MUqMQyanW0tnpQAA
+
+1
+
+return
+pdkReturn
+1k4Gz4a0MUqMQyanW0tnpQAA
+R9EXi7T78E6Gt882nRMyDwAA
+
+
+
+GetLastErrorDesc
+True
+R8hLgFt1fEaSSxBO7KbEBQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+lOtLMfPKKkefaQ9POQWclgAA
+
+1
+
+return
+pdkReturn
+LPCTSTR
+lOtLMfPKKkefaQ9POQWclgAA
+
+
+
+GetConnectionID
+True
+R8hLgFt1fEaSSxBO7KbEBQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+yExTFiz2cEmjButPjIDYewAA
+
+1
+
+return
+pdkReturn
+yExTFiz2cEmjButPjIDYewAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+
+GetLocalAddress
+True
+R8hLgFt1fEaSSxBO7KbEBQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+ljf21pXk+US2qWhmXPrO6gAA
+
+4
+
+lpszAddress
+TCHAR
+ljf21pXk+US2qWhmXPrO6gAA
+
+
+iAddressLen
+int
+ljf21pXk+US2qWhmXPrO6gAA
+1
+
+Cpp
+CppPointer
+CppPointer
+&
+DJGg2+/IIECOhUv5xPq6EgAA
+
+
+
+usPort
+USHORT
+ljf21pXk+US2qWhmXPrO6gAA
+1
+
+Cpp
+CppPointer
+CppPointer
+&
+pq0DZio5FEqFfW3dxVALSQAA
+
+
+
+return
+pdkReturn
+BOOL
+ljf21pXk+US2qWhmXPrO6gAA
+
+
+
+GetPendingDataLength
+True
+R8hLgFt1fEaSSxBO7KbEBQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+o5k5FaNQrkC4mTPiP3m0PQAA
+
+2
+
+iPending
+int
+o5k5FaNQrkC4mTPiP3m0PQAA
+1
+
+Cpp
+CppPointer
+CppPointer
+&
+PPmHy6vQDkCdWD/+pTeAZgAA
+
+
+
+return
+pdkReturn
+BOOL
+o5k5FaNQrkC4mTPiP3m0PQAA
+
+
+
+SetFreeBufferPoolSize
+True
+R8hLgFt1fEaSSxBO7KbEBQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+nzXKRMY/90KhHgA24NR0QwAA
+
+2
+
+dwFreeBufferPoolSize
+DWORD
+nzXKRMY/90KhHgA24NR0QwAA
+
+
+return
+pdkReturn
+void
+nzXKRMY/90KhHgA24NR0QwAA
+
+
+
+SetFreeBufferPoolHold
+True
+R8hLgFt1fEaSSxBO7KbEBQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+kcsWlk7PC0Kls1b4WiHMHgAA
+
+2
+
+dwFreeBufferPoolHold
+DWORD
+kcsWlk7PC0Kls1b4WiHMHgAA
+
+
+return
+pdkReturn
+void
+kcsWlk7PC0Kls1b4WiHMHgAA
+
+
+
+GetFreeBufferPoolSize
+True
+R8hLgFt1fEaSSxBO7KbEBQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+SWnPGMqQUUKWSOZ9TrQ93QAA
+
+1
+
+return
+pdkReturn
+DWORD
+SWnPGMqQUUKWSOZ9TrQ93QAA
+
+
+
+GetFreeBufferPoolHold
+True
+R8hLgFt1fEaSSxBO7KbEBQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+eQINpdFDDka6qk5ae9JFQgAA
+
+1
+
+return
+pdkReturn
+DWORD
+eQINpdFDDka6qk5ae9JFQgAA
+
+
+
+IClient
+UMLStandard
+destroy
+vkPrivate
+R8hLgFt1fEaSSxBO7KbEBQAA
+
+26
+YxFg6r2YOkexVpf82lVuHQAA
+CBO2PV4XcEWn5rY+ZCfFVAAA
+H2wEbGIARkqtYmyD0PaihQAA
+pmySIaVL0UWlEmfbi5p20QAA
+0yLRzmFX2USh21tzHf4PzwAA
+uet5/xytWE+Y+HxB5EWqNQAA
+lDJnw2EQwkatABSjfTTdLwAA
+WQx6R2HbRkWAAJygT5gE2wAA
+NIsPKnZwCUinp+ihfbmq1gAA
+hZe7shhXxEGqWZ6x53ebigAA
+TAPbNz9s+0+dvRpyncYzGgAA
+WK0j7Dh5RkujG3h92NIpywAA
+uLitAE/RmEmT8MTf7jFLzAAA
+EO4LQ1l+V0abYC2euaHh3AAA
+jtCyaHP02kqlCiRduN2KbgAA
+CPJR9wqW+kmgeMNICz+bCgAA
+ZZ0/QmxwIEm7SYTFiP6JOwAA
+QHYmqV28kkmKffvJogsHoAAA
+k9GjEva9xU6lvenWrCCIUQAA
+ui8T/xO9oEiXpayGYfJlwwAA
+fenI/tCbCEGzso47imi01gAA
+WwnXTA8xNE2Cazz8YtOMIgAA
+gIgg7x4VeUqsHSn2rpR+6QAA
+1BH/nrI97EuzbqYu19GQ3AAA
+csQ0/VT53UKNxS2Xa2paGAAA
+vE4mlkSm2UygIvS367Ff/AAA
+
+
+IClientListener
+jvfBmo6uGkC61ckI99TMgAAA
+8
+q36mxdXyZE6WTwmuKuQ2vAAA
+iN4Jd+Ojd0COjmqa9I8xCQAA
+SCydOgNR5EqglVeO7b4/RwAA
+KouIiKxDzkKFtN6oehIqGAAA
+KrTYF4Cl0UWAT3s9Q59oBAAA
+Kqp8aDnYvEOviwoQzcalVwAA
+wSBU+Ruy102l0L4LNn2NwAAA
+SirmtBr3Ike2SyQIonk8XQAA
+3
+LHdDVg405EStLqtC9ACaJgAA
+sN55Dgbmo0WZvNqCj0OqQwAA
+iH3ueDodB0OuqZ5awdjDeQAA
+7
+
+OnPrepareConnect
+True
+BZTI/4OA7kG+nFfsclldCgAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+GBHZFShIoUSrYFqBTCc06wAA
+
+3
+
+pClient
+GBHZFShIoUSrYFqBTCc06wAA
+R8hLgFt1fEaSSxBO7KbEBQAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+YxFg6r2YOkexVpf82lVuHQAA
+
+
+
+socket
+SOCKET
+GBHZFShIoUSrYFqBTCc06wAA
+
+
+return
+pdkReturn
+GBHZFShIoUSrYFqBTCc06wAA
+2khtjHI2AUSz1nm7UQu8uwAA
+
+
+
+OnConnect
+True
+BZTI/4OA7kG+nFfsclldCgAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+ADLKSSjg3EubcWcdSqu8zgAA
+
+2
+
+pClient
+ADLKSSjg3EubcWcdSqu8zgAA
+R8hLgFt1fEaSSxBO7KbEBQAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+CBO2PV4XcEWn5rY+ZCfFVAAA
+
+
+
+return
+pdkReturn
+ADLKSSjg3EubcWcdSqu8zgAA
+2khtjHI2AUSz1nm7UQu8uwAA
+
+
+
+OnSend
+True
+BZTI/4OA7kG+nFfsclldCgAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+GQwbh5HQvEq3kmL1kt2gDQAA
+
+4
+
+pClient
+GQwbh5HQvEq3kmL1kt2gDQAA
+R8hLgFt1fEaSSxBO7KbEBQAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+H2wEbGIARkqtYmyD0PaihQAA
+
+
+
+pData
+BYTE
+GQwbh5HQvEq3kmL1kt2gDQAA
+2
+
+Cpp
+CppConst
+CppConst
+True
+l7k0dyaHD0SXfyAqTJ1PyAAA
+
+
+Cpp
+CppPointer
+CppPointer
+*
+l7k0dyaHD0SXfyAqTJ1PyAAA
+
+
+
+iLength
+int
+GQwbh5HQvEq3kmL1kt2gDQAA
+
+
+return
+pdkReturn
+GQwbh5HQvEq3kmL1kt2gDQAA
+2khtjHI2AUSz1nm7UQu8uwAA
+
+
+
+OnReceive
+True
+BZTI/4OA7kG+nFfsclldCgAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+gf5fQytuNUOTndmYMUDdWwAA
+
+4
+
+pClient
+gf5fQytuNUOTndmYMUDdWwAA
+R8hLgFt1fEaSSxBO7KbEBQAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+pmySIaVL0UWlEmfbi5p20QAA
+
+
+
+pData
+BYTE
+gf5fQytuNUOTndmYMUDdWwAA
+2
+
+Cpp
+CppConst
+CppConst
+True
+BTV+roe04kiIM5Z0FNqmMgAA
+
+
+Cpp
+CppPointer
+CppPointer
+*
+BTV+roe04kiIM5Z0FNqmMgAA
+
+
+
+iLength
+int
+gf5fQytuNUOTndmYMUDdWwAA
+
+
+return
+pdkReturn
+gf5fQytuNUOTndmYMUDdWwAA
+2khtjHI2AUSz1nm7UQu8uwAA
+
+
+
+OnReceive
+True
+BZTI/4OA7kG+nFfsclldCgAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+EjVLrt/8lUeEtNKFy9rrXQAA
+
+3
+
+pClient
+EjVLrt/8lUeEtNKFy9rrXQAA
+R8hLgFt1fEaSSxBO7KbEBQAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+0yLRzmFX2USh21tzHf4PzwAA
+
+
+
+iLength
+int
+EjVLrt/8lUeEtNKFy9rrXQAA
+
+
+return
+pdkReturn
+EjVLrt/8lUeEtNKFy9rrXQAA
+2khtjHI2AUSz1nm7UQu8uwAA
+
+
+
+OnClose
+True
+BZTI/4OA7kG+nFfsclldCgAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+xn+7q7ogyU2w3D7ewAcvcgAA
+
+4
+
+pdkReturn
+xn+7q7ogyU2w3D7ewAcvcgAA
+2khtjHI2AUSz1nm7UQu8uwAA
+
+
+pClient
+xn+7q7ogyU2w3D7ewAcvcgAA
+R8hLgFt1fEaSSxBO7KbEBQAA
+
+
+enOperation
+xn+7q7ogyU2w3D7ewAcvcgAA
+bcrguJxo002HtvMUNvyx5QAA
+
+
+iErrorCode
+int
+xn+7q7ogyU2w3D7ewAcvcgAA
+
+
+
+IClientListener
+UMLStandard
+destroy
+vkPrivate
+BZTI/4OA7kG+nFfsclldCgAA
+
+
+
+ITcpClientListener
+jvfBmo6uGkC61ckI99TMgAAA
+8
+e/+kw8IbbkOctNvnX+LZsQAA
+frD7XZPrh0G8wNyQFzpOKwAA
+IgBs6Ne6dE2ZKySR5TNwmgAA
+jFB7Xkk3PEu8PVZeQiB/fwAA
+lkeOHiiD8k61jW8z3Jdf1AAA
+02wTaJmioUCIk1oqfsunrAAA
+Peic2oQXl0WmD++Z8ZL+mgAA
+HM49ymshZkGKnJh3DPyxVQAA
+1
+LHdDVg405EStLqtC9ACaJgAA
+1
+jMwPdcNgf0KaJMKQBOazIgAA
+1
+
+OnHandShake
+True
+HwLi+AyuiUa754Eutz2k5AAA
+2
+
+pdkReturn
+Y+E97kntB0CA0QoaM5WulgAA
+2khtjHI2AUSz1nm7UQu8uwAA
+
+
+pClient
+Y+E97kntB0CA0QoaM5WulgAA
+R8hLgFt1fEaSSxBO7KbEBQAA
+
+
+5
+zFezEQ9xPkK/0POS3GJN3AAA
+O/zc/hQ0+EOg3dj2SV2i6wAA
+2htC5RYGCkmqkKaQAQy/zgAA
+yeR+XQYW+kiIcHahchUBgwAA
+iYj8ImK6OUySIkZnOzGDfQAA
+
+
+CTcpClientListener
+jvfBmo6uGkC61ckI99TMgAAA
+4
+JvAeKTqBzE+W2Tw+N4ESXQAA
+kI+4CvpvPEK2Q4J7r3xYlAAA
+8QGRQEWtrEWU+EAuQD2QjQAA
+wBPb7rx7+0yECdGqYZOb9AAA
+1
+jMwPdcNgf0KaJMKQBOazIgAA
+1
+x9j97vQnoEStugksSdPSBwAA
+5
+
+OnReceive
+c38EVYXmckWErbW5Cl4UwgAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+DFjV9XVOcEKP0ucdvRI2kAAA
+
+3
+
+pClient
+DFjV9XVOcEKP0ucdvRI2kAAA
+R8hLgFt1fEaSSxBO7KbEBQAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+uet5/xytWE+Y+HxB5EWqNQAA
+
+
+
+iLength
+int
+DFjV9XVOcEKP0ucdvRI2kAAA
+
+
+return
+pdkReturn
+DFjV9XVOcEKP0ucdvRI2kAAA
+2khtjHI2AUSz1nm7UQu8uwAA
+
+
+
+OnSend
+c38EVYXmckWErbW5Cl4UwgAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+4VxsTJ0fNkidIE80/xE3vQAA
+
+4
+
+pClient
+4VxsTJ0fNkidIE80/xE3vQAA
+R8hLgFt1fEaSSxBO7KbEBQAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+lDJnw2EQwkatABSjfTTdLwAA
+
+
+
+pData
+BYTE
+4VxsTJ0fNkidIE80/xE3vQAA
+2
+
+Cpp
+CppConst
+CppConst
+True
+zqShxQaNmUG2iKMT5icQiAAA
+
+
+Cpp
+CppPointer
+CppPointer
+*
+zqShxQaNmUG2iKMT5icQiAAA
+
+
+
+iLength
+int
+4VxsTJ0fNkidIE80/xE3vQAA
+
+
+return
+pdkReturn
+4VxsTJ0fNkidIE80/xE3vQAA
+2khtjHI2AUSz1nm7UQu8uwAA
+
+
+
+OnPrepareConnect
+c38EVYXmckWErbW5Cl4UwgAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+YKnpS54TcEqys7yO6C62KQAA
+
+3
+
+pClient
+YKnpS54TcEqys7yO6C62KQAA
+R8hLgFt1fEaSSxBO7KbEBQAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+WQx6R2HbRkWAAJygT5gE2wAA
+
+
+
+socket
+SOCKET
+YKnpS54TcEqys7yO6C62KQAA
+
+
+return
+pdkReturn
+YKnpS54TcEqys7yO6C62KQAA
+2khtjHI2AUSz1nm7UQu8uwAA
+
+
+
+OnConnect
+c38EVYXmckWErbW5Cl4UwgAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+LTEGtNqskE6IZMKLEuWEKQAA
+
+2
+
+pClient
+LTEGtNqskE6IZMKLEuWEKQAA
+R8hLgFt1fEaSSxBO7KbEBQAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+NIsPKnZwCUinp+ihfbmq1gAA
+
+
+
+return
+pdkReturn
+LTEGtNqskE6IZMKLEuWEKQAA
+2khtjHI2AUSz1nm7UQu8uwAA
+
+
+
+OnHandShake
+c38EVYXmckWErbW5Cl4UwgAA
+2
+
+pdkReturn
+czDKJie7h0mfmW6Bs/CpeAAA
+2khtjHI2AUSz1nm7UQu8uwAA
+
+
+pClient
+czDKJie7h0mfmW6Bs/CpeAAA
+R8hLgFt1fEaSSxBO7KbEBQAA
+
+
+
+
+CTcpPullClientListener
+jvfBmo6uGkC61ckI99TMgAAA
+4
+7UPYyBmTk0StzHZNW+YJswAA
+aWqhXMD8VkuncGYU/TRa4gAA
+sIl6IF1p3UGFGurhgur7lAAA
+gTvis3oVbUSIlt4iTC6FtgAA
+1
+x9j97vQnoEStugksSdPSBwAA
+2
+
+OnReceive
+True
+4OTsa4LGqUqntun16mJ7kAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+E70BYUdhrUiv0pOi5jgrIgAA
+
+3
+
+pClient
+E70BYUdhrUiv0pOi5jgrIgAA
+R8hLgFt1fEaSSxBO7KbEBQAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+hZe7shhXxEGqWZ6x53ebigAA
+
+
+
+iLength
+int
+E70BYUdhrUiv0pOi5jgrIgAA
+
+
+return
+pdkReturn
+E70BYUdhrUiv0pOi5jgrIgAA
+2khtjHI2AUSz1nm7UQu8uwAA
+
+
+
+OnReceive
+4OTsa4LGqUqntun16mJ7kAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+dhjA69HBI0CkIFDeZ6/zOgAA
+
+4
+
+pClient
+dhjA69HBI0CkIFDeZ6/zOgAA
+R8hLgFt1fEaSSxBO7KbEBQAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+TAPbNz9s+0+dvRpyncYzGgAA
+
+
+
+pData
+BYTE
+dhjA69HBI0CkIFDeZ6/zOgAA
+2
+
+Cpp
+CppConst
+CppConst
+True
+VlEVjRcvVkyzzaS1YsN+VQAA
+
+
+Cpp
+CppPointer
+CppPointer
+*
+VlEVjRcvVkyzzaS1YsN+VQAA
+
+
+
+iLength
+int
+dhjA69HBI0CkIFDeZ6/zOgAA
+
+
+return
+pdkReturn
+dhjA69HBI0CkIFDeZ6/zOgAA
+2khtjHI2AUSz1nm7UQu8uwAA
+
+
+
+
+IUdpClientListener
+jvfBmo6uGkC61ckI99TMgAAA
+8
+giFfOL+L5EqS2RmY8ylUDQAA
+QmuKGJ3UKkW1vpncakImhgAA
+HVXQCHfixU6cMyHIXMomHwAA
+ZI6Rsbi3bUmBDVhICf/9ogAA
+4X4YjiGr1keUOnRkcKUhTQAA
+BIw0ociJiEqXe/JIg4d71wAA
+5D0fKX7E6kyfL3rEsGn4AAAA
+rrbk06awQUyDwU+m1fcWwwAA
+1
+sN55Dgbmo0WZvNqCj0OqQwAA
+1
+ckrUyHyNEkqEIaDRIjKBrAAA
+1
+fd40Q5EVIE+le0pAEDqLewAA
+
+
+CUdpClientListener
+jvfBmo6uGkC61ckI99TMgAAA
+4
+awRPnutzt0yg7s50bGBGLQAA
+R65AsCp7/kKZEEuN6mJnAQAA
+h8T9WjSbKkO/KlPFlNUStQAA
+b2WBJ8foHkeE1RlZcb+EowAA
+1
+ckrUyHyNEkqEIaDRIjKBrAAA
+4
+
+OnReceive
+eLrcJo0DgE2AjvOF61yczQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+oQMqBMuQkEKCy+/TIPqLpAAA
+
+3
+
+pClient
+oQMqBMuQkEKCy+/TIPqLpAAA
+R8hLgFt1fEaSSxBO7KbEBQAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+WK0j7Dh5RkujG3h92NIpywAA
+
+
+
+iLength
+int
+oQMqBMuQkEKCy+/TIPqLpAAA
+
+
+return
+pdkReturn
+oQMqBMuQkEKCy+/TIPqLpAAA
+2khtjHI2AUSz1nm7UQu8uwAA
+
+
+
+OnSend
+eLrcJo0DgE2AjvOF61yczQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+U8DQwiQCD06SOBdKXxw1GAAA
+
+4
+
+pClient
+U8DQwiQCD06SOBdKXxw1GAAA
+R8hLgFt1fEaSSxBO7KbEBQAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+uLitAE/RmEmT8MTf7jFLzAAA
+
+
+
+pData
+BYTE
+U8DQwiQCD06SOBdKXxw1GAAA
+2
+
+Cpp
+CppConst
+CppConst
+True
+LprziFespUK+5FcjZh7+lgAA
+
+
+Cpp
+CppPointer
+CppPointer
+*
+LprziFespUK+5FcjZh7+lgAA
+
+
+
+iLength
+int
+U8DQwiQCD06SOBdKXxw1GAAA
+
+
+return
+pdkReturn
+U8DQwiQCD06SOBdKXxw1GAAA
+2khtjHI2AUSz1nm7UQu8uwAA
+
+
+
+OnPrepareConnect
+eLrcJo0DgE2AjvOF61yczQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+NGoGfq3L9EmWEgXzhoqvpQAA
+
+3
+
+pClient
+NGoGfq3L9EmWEgXzhoqvpQAA
+R8hLgFt1fEaSSxBO7KbEBQAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+EO4LQ1l+V0abYC2euaHh3AAA
+
+
+
+socket
+SOCKET
+NGoGfq3L9EmWEgXzhoqvpQAA
+
+
+return
+pdkReturn
+NGoGfq3L9EmWEgXzhoqvpQAA
+2khtjHI2AUSz1nm7UQu8uwAA
+
+
+
+OnConnect
+eLrcJo0DgE2AjvOF61yczQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+//DbaUCPhkKZNbBRpKkh8AAA
+
+2
+
+pClient
+//DbaUCPhkKZNbBRpKkh8AAA
+R8hLgFt1fEaSSxBO7KbEBQAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+jtCyaHP02kqlCiRduN2KbgAA
+
+
+
+return
+pdkReturn
+//DbaUCPhkKZNbBRpKkh8AAA
+2khtjHI2AUSz1nm7UQu8uwAA
+
+
+
+
+IUdpCastListener
+jvfBmo6uGkC61ckI99TMgAAA
+8
+i1mju6goyUCpVQPExOMCbwAA
+GNZxlybcjEuVm9e2423k3wAA
+eSUqEmUtqk2V8ShtXkjvewAA
+XSJs3T7YI0iYoqr4xV+M0wAA
+IpuoRM7390mIm+qG9Hl2bgAA
+wLF3P92IA0GWrx4jIj1iSAAA
+2mzTzKV7XE6/vIM2AXv+7wAA
+9YNzBKM7eU2f/irQU7KT2AAA
+1
+iH3ueDodB0OuqZ5awdjDeQAA
+1
+FoyTfxOKQ0CcM6uuMKewkwAA
+1
+EyoF0ndo9kCFpkNwo8KVngAA
+
+
+CUdpCastListener
+jvfBmo6uGkC61ckI99TMgAAA
+4
+zefMvmnz2UK+gAC3E0jXgQAA
+gl4HGvhATkSKNdqisWaX2QAA
+qRSzJ3+ZYEKttt6Ymal/bQAA
+UGOw8wdZZEOul39oThjtQgAA
+1
+FoyTfxOKQ0CcM6uuMKewkwAA
+4
+
+OnReceive
+sJBjmKjtoEWtenBeaDLnjwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+hXT8VyZLG0euMH0fGT4wIgAA
+
+3
+
+pClient
+hXT8VyZLG0euMH0fGT4wIgAA
+R8hLgFt1fEaSSxBO7KbEBQAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+CPJR9wqW+kmgeMNICz+bCgAA
+
+
+
+iLength
+int
+hXT8VyZLG0euMH0fGT4wIgAA
+
+
+return
+pdkReturn
+hXT8VyZLG0euMH0fGT4wIgAA
+2khtjHI2AUSz1nm7UQu8uwAA
+
+
+
+OnSend
+sJBjmKjtoEWtenBeaDLnjwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+GRNy2b34Qkq0rj+XW+JNHgAA
+
+4
+
+pClient
+GRNy2b34Qkq0rj+XW+JNHgAA
+R8hLgFt1fEaSSxBO7KbEBQAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+ZZ0/QmxwIEm7SYTFiP6JOwAA
+
+
+
+pData
+BYTE
+GRNy2b34Qkq0rj+XW+JNHgAA
+2
+
+Cpp
+CppConst
+CppConst
+True
+8MCAbb35GUOxgFx4hIQK6AAA
+
+
+Cpp
+CppPointer
+CppPointer
+*
+8MCAbb35GUOxgFx4hIQK6AAA
+
+
+
+iLength
+int
+GRNy2b34Qkq0rj+XW+JNHgAA
+
+
+return
+pdkReturn
+GRNy2b34Qkq0rj+XW+JNHgAA
+2khtjHI2AUSz1nm7UQu8uwAA
+
+
+
+OnPrepareConnect
+sJBjmKjtoEWtenBeaDLnjwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+yw8ouM59IUug/cTb7x46YQAA
+
+3
+
+pClient
+yw8ouM59IUug/cTb7x46YQAA
+R8hLgFt1fEaSSxBO7KbEBQAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+QHYmqV28kkmKffvJogsHoAAA
+
+
+
+socket
+SOCKET
+yw8ouM59IUug/cTb7x46YQAA
+
+
+return
+pdkReturn
+yw8ouM59IUug/cTb7x46YQAA
+2khtjHI2AUSz1nm7UQu8uwAA
+
+
+
+OnConnect
+sJBjmKjtoEWtenBeaDLnjwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+h0nCj5ZeHEeqxlogOpjm5QAA
+
+2
+
+pClient
+h0nCj5ZeHEeqxlogOpjm5QAA
+R8hLgFt1fEaSSxBO7KbEBQAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+k9GjEva9xU6lvenWrCCIUQAA
+
+
+
+return
+pdkReturn
+h0nCj5ZeHEeqxlogOpjm5QAA
+2khtjHI2AUSz1nm7UQu8uwAA
+
+
+
+
+IComplexSocket
+True
+jvfBmo6uGkC61ckI99TMgAAA
+12
+S5CdZWL+bEWmCJb9qIaNogAA
+yr076N5YYk+5AJxr/7e0fgAA
+M9HJ8lGtoUiYAR/5adzcvQAA
+uTrKQgpGAUaBG62XQZwHsgAA
+MbT+AK7qSEilQO9f6kF5ugAA
+MMzgr7pCD0myYUlV5NJ0YwAA
+eYcDoVNH0kyd2JFyLPF0BAAA
+VR8cKxmMoEuRejDm+U6K2gAA
+eiN6oYelCU++QjaXKMX8mAAA
++f/giJSktUeJScC43ABmQwAA
+nuVR3t+r2U2HlwLOGxQyMwAA
+KGnW+YGME0KohOLr2dhRqwAA
+2
+9BTtNyRQHEu7yKoNswewcQAA
+dx6I5RGr20SmTHCEMdZ9nAAA
+36
+
+Stop
+True
+SqNjwMrIrEaWmScJhNPQOwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+r7TqTazDpEqD42pJhcNAXQAA
+
+1
+
+return
+pdkReturn
+BOOL
+r7TqTazDpEqD42pJhcNAXQAA
+
+
+
+Send
+True
+SqNjwMrIrEaWmScJhNPQOwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+19uLfCRXEUSEciA7RL2DpwAA
+
+5
+
+dwConnID
+19uLfCRXEUSEciA7RL2DpwAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+pBuffer
+BYTE
+19uLfCRXEUSEciA7RL2DpwAA
+2
+
+Cpp
+CppConst
+CppConst
+True
+A3cdPR3hs0CwwyzsznJEYwAA
+
+
+Cpp
+CppPointer
+CppPointer
+*
+A3cdPR3hs0CwwyzsznJEYwAA
+
+
+
+iLength
+int
+19uLfCRXEUSEciA7RL2DpwAA
+
+
+iOffset
+int
+19uLfCRXEUSEciA7RL2DpwAA
+
+
+return
+pdkReturn
+BOOL
+19uLfCRXEUSEciA7RL2DpwAA
+
+
+
+SendPackets
+True
+SqNjwMrIrEaWmScJhNPQOwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+XqSrlxsCyUq/UZb72peiNgAA
+
+4
+
+dwConnID
+XqSrlxsCyUq/UZb72peiNgAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+pBuffers
+WSABUF
+XqSrlxsCyUq/UZb72peiNgAA
+1
+
+Cpp
+CppConst
+CppConst
+True
+rxBnNrSp70yIoHsKjRRxjAAA
+
+
+
+iCount
+int
+XqSrlxsCyUq/UZb72peiNgAA
+
+
+return
+pdkReturn
+BOOL
+XqSrlxsCyUq/UZb72peiNgAA
+
+
+
+Disconnect
+True
+SqNjwMrIrEaWmScJhNPQOwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+31patCIkWkqS/WsfyrCsXwAA
+
+3
+
+dwConnID
+31patCIkWkqS/WsfyrCsXwAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+bForce
+BOOL
+31patCIkWkqS/WsfyrCsXwAA
+
+
+return
+pdkReturn
+BOOL
+31patCIkWkqS/WsfyrCsXwAA
+
+
+
+DisconnectLongConnections
+True
+SqNjwMrIrEaWmScJhNPQOwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+6aamqDSDNk+1aKYg+DYpbAAA
+
+3
+
+dwPeriod
+DWORD
+6aamqDSDNk+1aKYg+DYpbAAA
+
+
+bForce
+BOOL
+6aamqDSDNk+1aKYg+DYpbAAA
+
+
+return
+pdkReturn
+BOOL
+6aamqDSDNk+1aKYg+DYpbAAA
+
+
+
+DisconnectSilenceConnections
+True
+SqNjwMrIrEaWmScJhNPQOwAA
+3
+
+pdkReturn
+BOOL
+NT1IUqefdU+UoSBoCrbN0gAA
+
+
+dwPeriod
+DWORD
+NT1IUqefdU+UoSBoCrbN0gAA
+
+
+bForce
+BOOL
+NT1IUqefdU+UoSBoCrbN0gAA
+
+
+
+SetConnectionExtra
+True
+SqNjwMrIrEaWmScJhNPQOwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+Up+HOi8Q1ESEyfDvFdbEtQAA
+
+3
+
+dwConnID
+Up+HOi8Q1ESEyfDvFdbEtQAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+pExtra
+PVOID
+Up+HOi8Q1ESEyfDvFdbEtQAA
+
+
+return
+pdkReturn
+BOOL
+Up+HOi8Q1ESEyfDvFdbEtQAA
+
+
+
+GetConnectionExtra
+True
+SqNjwMrIrEaWmScJhNPQOwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+fQ0U6nVhIkmuda8ZugjGAAAA
+
+3
+
+dwConnID
+fQ0U6nVhIkmuda8ZugjGAAAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+ppExtra
+PVOID
+fQ0U6nVhIkmuda8ZugjGAAAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+OgfhRcvOb0CCQ80VWK1pzAAA
+
+
+
+return
+pdkReturn
+BOOL
+fQ0U6nVhIkmuda8ZugjGAAAA
+
+
+
+HasStarted
+True
+SqNjwMrIrEaWmScJhNPQOwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+Y2yL4VhT4kukWGvfGwlxiwAA
+
+1
+
+return
+pdkReturn
+BOOL
+Y2yL4VhT4kukWGvfGwlxiwAA
+
+
+
+GetState
+True
+SqNjwMrIrEaWmScJhNPQOwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+3LN60l+NZkGQMAzGtnUQPwAA
+
+1
+
+return
+pdkReturn
+3LN60l+NZkGQMAzGtnUQPwAA
+3KsfqnlMb0ieGw/IAO5hFQAA
+
+
+
+GetConnectionCount
+True
+SqNjwMrIrEaWmScJhNPQOwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+pebyhRCnJ0ifcWHgEhT1pwAA
+
+1
+
+return
+pdkReturn
+DWORD
+pebyhRCnJ0ifcWHgEhT1pwAA
+
+
+
+GetAllConnectionIDs
+True
+SqNjwMrIrEaWmScJhNPQOwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+o1tJpKl5S0WyVuixJq83twAA
+
+3
+
+pIDs
+o1tJpKl5S0WyVuixJq83twAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+dwCount
+DWORD
+o1tJpKl5S0WyVuixJq83twAA
+1
+
+Cpp
+CppPointer
+CppPointer
+&
+kLTZp+F/NkmmOJtSUpw9NgAA
+
+
+
+return
+pdkReturn
+BOOL
+o1tJpKl5S0WyVuixJq83twAA
+
+
+
+GetConnectPeriod
+True
+SqNjwMrIrEaWmScJhNPQOwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+tp933m4+fUOFzWiZ5nmCRQAA
+
+3
+
+dwConnID
+tp933m4+fUOFzWiZ5nmCRQAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+dwPeriod
+DWORD
+tp933m4+fUOFzWiZ5nmCRQAA
+1
+
+Cpp
+CppPointer
+CppPointer
+&
+yG+E2iZeIk2FRzOCZtXa9gAA
+
+
+
+return
+pdkReturn
+BOOL
+tp933m4+fUOFzWiZ5nmCRQAA
+
+
+
+GetSilencePeriod
+True
+SqNjwMrIrEaWmScJhNPQOwAA
+3
+
+pdkReturn
+BOOL
+MPSD6gvTfEqHKGb0KDJHUQAA
+
+
+dwConnID
+MPSD6gvTfEqHKGb0KDJHUQAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+dwPeriod
+DWORD
+MPSD6gvTfEqHKGb0KDJHUQAA
+
+
+
+GetLocalAddress
+True
+SqNjwMrIrEaWmScJhNPQOwAA
+5
+
+pdkReturn
+BOOL
+BgGfhTk170iOj700Q2ObgQAA
+
+
+dwConnID
+BgGfhTk170iOj700Q2ObgQAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+lpszAddress
+TCHAR
+BgGfhTk170iOj700Q2ObgQAA
+
+
+iAddressLen
+int
+BgGfhTk170iOj700Q2ObgQAA
+
+
+usPort
+USHORT
+BgGfhTk170iOj700Q2ObgQAA
+
+
+
+GetRemoteAddress
+True
+SqNjwMrIrEaWmScJhNPQOwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+RlA0zt5WP06tvUIKaiK1SgAA
+
+5
+
+dwConnID
+RlA0zt5WP06tvUIKaiK1SgAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+lpszAddress
+TCHAR
+RlA0zt5WP06tvUIKaiK1SgAA
+
+
+iAddressLen
+int
+RlA0zt5WP06tvUIKaiK1SgAA
+1
+
+Cpp
+CppPointer
+CppPointer
+&
+iSpDjfxk3k+aeFhLkukZbAAA
+
+
+
+usPort
+USHORT
+RlA0zt5WP06tvUIKaiK1SgAA
+1
+
+Cpp
+CppPointer
+CppPointer
+&
+k5UjunLhk0SDPXbKQv+LfgAA
+
+
+
+return
+pdkReturn
+BOOL
+RlA0zt5WP06tvUIKaiK1SgAA
+
+
+
+GetLastError
+True
+SqNjwMrIrEaWmScJhNPQOwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+J8GJKLKchk6COQdadmFghAAA
+
+1
+
+return
+pdkReturn
+J8GJKLKchk6COQdadmFghAAA
+R9EXi7T78E6Gt882nRMyDwAA
+
+
+
+GetLastErrorDesc
+True
+SqNjwMrIrEaWmScJhNPQOwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+uzTuxMmBYkaG+e+LcmRPqgAA
+
+1
+
+return
+pdkReturn
+LPCTSTR
+uzTuxMmBYkaG+e+LcmRPqgAA
+
+
+
+GetPendingDataLength
+True
+SqNjwMrIrEaWmScJhNPQOwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+SHtSToWPIU2D9h+8ClS7EwAA
+
+3
+
+dwConnID
+SHtSToWPIU2D9h+8ClS7EwAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+iPending
+int
+SHtSToWPIU2D9h+8ClS7EwAA
+1
+
+Cpp
+CppPointer
+CppPointer
+&
+cHI9PDA4E0Sy78sXHx5gFAAA
+
+
+
+return
+pdkReturn
+BOOL
+SHtSToWPIU2D9h+8ClS7EwAA
+
+
+
+SetSendPolicy
+True
+SqNjwMrIrEaWmScJhNPQOwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+l0HgpaaXrEmcBwqw/QXksQAA
+
+2
+
+enSendPolicy
+l0HgpaaXrEmcBwqw/QXksQAA
+p4RvBvwp3kOxyo/4mj2ZKwAA
+
+
+return
+pdkReturn
+void
+l0HgpaaXrEmcBwqw/QXksQAA
+
+
+
+SetMarkSilence
+True
+SqNjwMrIrEaWmScJhNPQOwAA
+2
+
+pdkReturn
+void
++4/wR3EDaU2wwoA0lsI+0QAA
+
+
+bMarkSilence
+BOOL
++4/wR3EDaU2wwoA0lsI+0QAA
+
+
+
+IsMarkSilence
+True
+SqNjwMrIrEaWmScJhNPQOwAA
+1
+
+pdkReturn
+BOOL
+hr1CQBzpzkWXNv8Oh578HQAA
+
+
+
+SetFreeSocketObjLockTime
+True
+SqNjwMrIrEaWmScJhNPQOwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+rScGrml5zk6QMZsraNJn7QAA
+
+2
+
+dwFreeSocketObjLockTime
+DWORD
+rScGrml5zk6QMZsraNJn7QAA
+
+
+return
+pdkReturn
+void
+rScGrml5zk6QMZsraNJn7QAA
+
+
+
+SetFreeSocketObjPool
+True
+SqNjwMrIrEaWmScJhNPQOwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+9eJ4BBO5CUGqV2C/5PK8NgAA
+
+2
+
+dwFreeSocketObjPool
+DWORD
+9eJ4BBO5CUGqV2C/5PK8NgAA
+
+
+return
+pdkReturn
+void
+9eJ4BBO5CUGqV2C/5PK8NgAA
+
+
+
+SetFreeBufferObjPool
+True
+SqNjwMrIrEaWmScJhNPQOwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+donlXTJEKUGAZSU5Ns39dgAA
+
+2
+
+dwFreeBufferObjPool
+DWORD
+donlXTJEKUGAZSU5Ns39dgAA
+
+
+return
+pdkReturn
+void
+donlXTJEKUGAZSU5Ns39dgAA
+
+
+
+SetFreeSocketObjHold
+True
+SqNjwMrIrEaWmScJhNPQOwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+62tGcLoVbkevQKeSv8VsWwAA
+
+2
+
+dwFreeSocketObjHold
+DWORD
+62tGcLoVbkevQKeSv8VsWwAA
+
+
+return
+pdkReturn
+void
+62tGcLoVbkevQKeSv8VsWwAA
+
+
+
+SetFreeBufferObjHold
+True
+SqNjwMrIrEaWmScJhNPQOwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+SofrhIopnUq1WnF4nOO1JQAA
+
+2
+
+dwFreeBufferObjHold
+DWORD
+SofrhIopnUq1WnF4nOO1JQAA
+
+
+return
+pdkReturn
+void
+SofrhIopnUq1WnF4nOO1JQAA
+
+
+
+SetWorkerThreadCount
+True
+SqNjwMrIrEaWmScJhNPQOwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+xAdxxCxOTEmzRmSf+WQeZgAA
+
+2
+
+dwWorkerThreadCount
+DWORD
+xAdxxCxOTEmzRmSf+WQeZgAA
+
+
+return
+pdkReturn
+void
+xAdxxCxOTEmzRmSf+WQeZgAA
+
+
+
+GetSendPolicy
+True
+SqNjwMrIrEaWmScJhNPQOwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+CctQwD98hUq0RNTHM+HGagAA
+
+1
+
+return
+pdkReturn
+CctQwD98hUq0RNTHM+HGagAA
+p4RvBvwp3kOxyo/4mj2ZKwAA
+
+
+
+GetFreeSocketObjLockTime
+True
+SqNjwMrIrEaWmScJhNPQOwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+xidfDSpG2E+hDsIb1oet9AAA
+
+1
+
+return
+pdkReturn
+DWORD
+xidfDSpG2E+hDsIb1oet9AAA
+
+
+
+GetFreeSocketObjPool
+True
+SqNjwMrIrEaWmScJhNPQOwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+WoKXrowhsk2C/8ln1tMKxAAA
+
+1
+
+return
+pdkReturn
+DWORD
+WoKXrowhsk2C/8ln1tMKxAAA
+
+
+
+GetFreeBufferObjPool
+True
+SqNjwMrIrEaWmScJhNPQOwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+fqzWpvGeqUWyUHRkJpkNQAAA
+
+1
+
+return
+pdkReturn
+DWORD
+fqzWpvGeqUWyUHRkJpkNQAAA
+
+
+
+GetFreeSocketObjHold
+True
+SqNjwMrIrEaWmScJhNPQOwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+9cRf++26PE61b58/1/PsyQAA
+
+1
+
+return
+pdkReturn
+DWORD
+9cRf++26PE61b58/1/PsyQAA
+
+
+
+GetFreeBufferObjHold
+True
+SqNjwMrIrEaWmScJhNPQOwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+rWsLrjN5ykeAah07ANA2fAAA
+
+1
+
+return
+pdkReturn
+DWORD
+rWsLrjN5ykeAah07ANA2fAAA
+
+
+
+GetWorkerThreadCount
+True
+SqNjwMrIrEaWmScJhNPQOwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+7pbK12sjrE6jOS6I0oMwiwAA
+
+1
+
+return
+pdkReturn
+DWORD
+7pbK12sjrE6jOS6I0oMwiwAA
+
+
+
+IComplexSocket
+UMLStandard
+destroy
+vkPrivate
+SqNjwMrIrEaWmScJhNPQOwAA
+
+
+
+IServer
+jvfBmo6uGkC61ckI99TMgAAA
+8
+P2r46P+bY0avZFfVkwtncQAA
+U+2vSeTQcEyminV5ZMl7hgAA
+jhzi6RR5eUSN0z6xssNTLgAA
+Dp1UvgXSr0qmgg0Dj8CkywAA
+kiHq/1vHX0WZ96N8FA/STwAA
+XfmkXbSBqUesgGOU31U6twAA
+HJXmvf1NFUW1QJwZmKqIqAAA
+3CMU3cRgXEaJSTyFgdGswAAA
+1
+9BTtNyRQHEu7yKoNswewcQAA
+2
+qrDg6u3xU0KpgYiFoJBZ1AAA
+rcZqqPur/USLxxaOeNdjswAA
+2
+
+Start
+True
+GoHMKPRtzES/2hlDzLtwnAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+PmbmwYUu706e1OsZfkgJiAAA
+
+3
+
+pdkReturn
+BOOL
+PmbmwYUu706e1OsZfkgJiAAA
+
+
+lpszBindAddress
+LPCTSTR
+PmbmwYUu706e1OsZfkgJiAAA
+
+
+usPort
+USHORT
+PmbmwYUu706e1OsZfkgJiAAA
+
+
+
+GetListenAddress
+True
+GoHMKPRtzES/2hlDzLtwnAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+snljPe+wp0i+3aS0Mt5NfAAA
+
+4
+
+lpszAddress
+TCHAR
+snljPe+wp0i+3aS0Mt5NfAAA
+
+
+iAddressLen
+int
+snljPe+wp0i+3aS0Mt5NfAAA
+1
+
+Cpp
+CppPointer
+CppPointer
+&
+Rc+9fR0eVkK+9TdEL4YrgQAA
+
+
+
+usPort
+USHORT
+snljPe+wp0i+3aS0Mt5NfAAA
+1
+
+Cpp
+CppPointer
+CppPointer
+&
+VpwDS551Kku/Ie5vHkjuagAA
+
+
+
+return
+pdkReturn
+BOOL
+snljPe+wp0i+3aS0Mt5NfAAA
+
+
+2
+da6KPUpOnkuM7gM+HBH1FwAA
+lqZIR9zpP0y49VT0gCv6swAA
+
+
+ITcpServer
+jvfBmo6uGkC61ckI99TMgAAA
+8
+yPFqE92KlUeCTsjNeQePJAAA
+c3kbsLUpIU+IoldAvlcAzAAA
+SVhhd4Ot00Kt7iIQ1QU75QAA
+ycv+4FO25Eq7POPM8wgp7QAA
+Ll1QQzy89EqZaHquqLut4QAA
+/67o0SGCe0C1Z1NqBYJXjQAA
+K8KCiu1Hfkiph40MpJieUQAA
+Nd/XiGxagE2dXNRoHl0nBgAA
+1
+qrDg6u3xU0KpgYiFoJBZ1AAA
+3
+RvwWYNXraU2xkdsooYM/NwAA
+O5dkSXpa9UWV4M9yJ7QzIwAA
+nzQ/3s2PQEG5Cz2AX+hkOgAA
+11
+
+SendSmallFile
+True
+YNdJIJRIm0SpW7CG17MtyAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+DtRcQ8vVZkKZQMYjOp4dQAAA
+
+5
+
+dwConnID
+DtRcQ8vVZkKZQMYjOp4dQAAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+lpszFileName
+LPCTSTR
+DtRcQ8vVZkKZQMYjOp4dQAAA
+
+
+pHead
+LPWSABUF
+DtRcQ8vVZkKZQMYjOp4dQAAA
+1
+
+Cpp
+CppConst
+CppConst
+True
+3Sz9+wNt5UmJ3IA2w+B8KAAA
+
+
+
+pTail
+LPWSABUF
+DtRcQ8vVZkKZQMYjOp4dQAAA
+1
+
+Cpp
+CppConst
+CppConst
+True
+qpaQtsmN+E2cXF5/t4nT2gAA
+
+
+
+return
+pdkReturn
+BOOL
+DtRcQ8vVZkKZQMYjOp4dQAAA
+
+
+
+SetAcceptSocketCount
+True
+YNdJIJRIm0SpW7CG17MtyAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+CYhGsUzNaE2Ai85n3Dg6vQAA
+
+2
+
+dwAcceptSocketCount
+DWORD
+CYhGsUzNaE2Ai85n3Dg6vQAA
+
+
+return
+pdkReturn
+void
+CYhGsUzNaE2Ai85n3Dg6vQAA
+
+
+
+SetSocketBufferSize
+True
+YNdJIJRIm0SpW7CG17MtyAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+BrPH6t/O/Eavt0knyBW9swAA
+
+2
+
+dwSocketBufferSize
+DWORD
+BrPH6t/O/Eavt0knyBW9swAA
+
+
+return
+pdkReturn
+void
+BrPH6t/O/Eavt0knyBW9swAA
+
+
+
+SetSocketListenQueue
+True
+YNdJIJRIm0SpW7CG17MtyAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+iMy7nEJR1UmMuL/0AgUmOwAA
+
+2
+
+dwSocketListenQueue
+DWORD
+iMy7nEJR1UmMuL/0AgUmOwAA
+
+
+return
+pdkReturn
+void
+iMy7nEJR1UmMuL/0AgUmOwAA
+
+
+
+SetKeepAliveTime
+True
+YNdJIJRIm0SpW7CG17MtyAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+Hbfn9MEPkk65Y8NPcUSv7gAA
+
+2
+
+dwKeepAliveTime
+DWORD
+Hbfn9MEPkk65Y8NPcUSv7gAA
+
+
+return
+pdkReturn
+void
+Hbfn9MEPkk65Y8NPcUSv7gAA
+
+
+
+SetKeepAliveInterval
+True
+YNdJIJRIm0SpW7CG17MtyAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+z2r39MbCskWU+pH3My4LIgAA
+
+2
+
+dwKeepAliveInterval
+DWORD
+z2r39MbCskWU+pH3My4LIgAA
+
+
+return
+pdkReturn
+void
+z2r39MbCskWU+pH3My4LIgAA
+
+
+
+GetAcceptSocketCount
+True
+YNdJIJRIm0SpW7CG17MtyAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+GI4gRkiQGUqtrSz6LeJv7AAA
+
+1
+
+return
+pdkReturn
+DWORD
+GI4gRkiQGUqtrSz6LeJv7AAA
+
+
+
+GetSocketBufferSize
+True
+YNdJIJRIm0SpW7CG17MtyAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+fHwqxR5MKkWZx4uhitro+wAA
+
+1
+
+return
+pdkReturn
+DWORD
+fHwqxR5MKkWZx4uhitro+wAA
+
+
+
+GetSocketListenQueue
+True
+YNdJIJRIm0SpW7CG17MtyAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+WoyWsr3kLk6I4SvGp0Nb4gAA
+
+1
+
+return
+pdkReturn
+DWORD
+WoyWsr3kLk6I4SvGp0Nb4gAA
+
+
+
+GetKeepAliveTime
+True
+YNdJIJRIm0SpW7CG17MtyAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+UGcFbVLapE6yxk3HKOmFuwAA
+
+1
+
+return
+pdkReturn
+DWORD
+UGcFbVLapE6yxk3HKOmFuwAA
+
+
+
+GetKeepAliveInterval
+True
+YNdJIJRIm0SpW7CG17MtyAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+lt/OkYOw0kmu+W+vu47YPAAA
+
+1
+
+return
+pdkReturn
+DWORD
+lt/OkYOw0kmu+W+vu47YPAAA
+
+
+2
+4lYcEooM20qvD7Cm0s0sHAAA
+azDXhAug/kC0UeL/V3c2qQAA
+
+
+IUdpServer
+jvfBmo6uGkC61ckI99TMgAAA
+8
+DCejEAT0mUabtDsSdi+dvQAA
+KCMzPB1qAUOmDFaYNXhn9gAA
+MT2IUousdkmJLsH8R1G+5gAA
+C7ihFARq9k69+4LhuFqYUgAA
+jbo8sT+vKUaLco+wapuQhwAA
+kRMZ1WDaT0CDHIyXe/g98QAA
+E9j1LERMfUibIU9hm/yXlAAA
+Muo2FdUAk0qtx4FlLa/XugAA
+1
+rcZqqPur/USLxxaOeNdjswAA
+1
+j09xKlrPNkS8/NZ3JXD5MwAA
+8
+
+SetMaxDatagramSize
+True
+KqnhKB+uXkKxW6LqS8YzcgAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+54UjSc47Sk2EPNDG+O4RFQAA
+
+2
+
+dwMaxDatagramSize
+DWORD
+54UjSc47Sk2EPNDG+O4RFQAA
+
+
+return
+pdkReturn
+void
+54UjSc47Sk2EPNDG+O4RFQAA
+
+
+
+GetMaxDatagramSize
+True
+KqnhKB+uXkKxW6LqS8YzcgAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+/Mr/JuV3n0iqtBCvrqN47AAA
+
+1
+
+return
+pdkReturn
+DWORD
+/Mr/JuV3n0iqtBCvrqN47AAA
+
+
+
+SetPostReceiveCount
+True
+KqnhKB+uXkKxW6LqS8YzcgAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+jds7eFHADk22AWlypc0IHwAA
+
+2
+
+dwPostReceiveCount
+DWORD
+jds7eFHADk22AWlypc0IHwAA
+
+
+return
+pdkReturn
+void
+jds7eFHADk22AWlypc0IHwAA
+
+
+
+GetPostReceiveCount
+True
+KqnhKB+uXkKxW6LqS8YzcgAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+OlSWj+gIVUuCVgzGpVp5xQAA
+
+1
+
+return
+pdkReturn
+DWORD
+OlSWj+gIVUuCVgzGpVp5xQAA
+
+
+
+SetDetectAttempts
+True
+KqnhKB+uXkKxW6LqS8YzcgAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+C8zOmWLd+Uef2OaGAGApigAA
+
+2
+
+dwDetectAttempts
+DWORD
+C8zOmWLd+Uef2OaGAGApigAA
+
+
+return
+pdkReturn
+void
+C8zOmWLd+Uef2OaGAGApigAA
+
+
+
+SetDetectInterval
+True
+KqnhKB+uXkKxW6LqS8YzcgAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+oC7rA0H27Eui6YYItFm80gAA
+
+2
+
+dwDetectInterval
+DWORD
+oC7rA0H27Eui6YYItFm80gAA
+
+
+return
+pdkReturn
+void
+oC7rA0H27Eui6YYItFm80gAA
+
+
+
+GetDetectAttempts
+True
+KqnhKB+uXkKxW6LqS8YzcgAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+ce18DuJ8o0u+Gh2db9eh2AAA
+
+1
+
+return
+pdkReturn
+DWORD
+ce18DuJ8o0u+Gh2db9eh2AAA
+
+
+
+GetDetectInterval
+True
+KqnhKB+uXkKxW6LqS8YzcgAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+njzHWCq720mFdJ/cxI6isQAA
+
+1
+
+return
+pdkReturn
+DWORD
+njzHWCq720mFdJ/cxI6isQAA
+
+
+
+
+IAgent
+jvfBmo6uGkC61ckI99TMgAAA
+8
+QK3KaQ4YV0Wt4DUTuGttgwAA
+d98jvr45mESQHO7iF++khgAA
+YnauoJtfBEiqxZird8oOoAAA
+t3yoKlNmVkOZ28u5oLPqTwAA
+n3rJyl0++kq9uoOsANKAUwAA
+nVz76ek5BkuEIpKxEQMhHQAA
+TcLytb4cw0yi2DYYX1oKzgAA
+7pzMZAcbI0mt5/1lojtchwAA
+1
+dx6I5RGr20SmTHCEMdZ9nAAA
+1
+T7qvCRD8oEeFVhOYfk7D4wAA
+2
+
+Start
+True
+tc20+9LmREuR1dUMSybNdQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+iHUQ+nD/QU+DS2MXGUMLmgAA
+
+3
+
+pdkReturn
+BOOL
+iHUQ+nD/QU+DS2MXGUMLmgAA
+
+
+lpszBindAddress
+LPCTSTR
+iHUQ+nD/QU+DS2MXGUMLmgAA
+
+
+bAsyncConnect
+BOOL
+iHUQ+nD/QU+DS2MXGUMLmgAA
+
+
+
+Connect
+True
+tc20+9LmREuR1dUMSybNdQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+SnDOnAla2Um3FMHR6Ey02AAA
+
+4
+
+pszRemoteAddress
+LPCTSTR
+SnDOnAla2Um3FMHR6Ey02AAA
+
+
+usPort
+USHORT
+SnDOnAla2Um3FMHR6Ey02AAA
+
+
+pdwConnID
+SnDOnAla2Um3FMHR6Ey02AAA
+G8TfQngB3UemVJWZg5KbggAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+06q418O6FEOlWfOa7XazAwAA
+
+
+
+return
+pdkReturn
+BOOL
+SnDOnAla2Um3FMHR6Ey02AAA
+
+
+2
+yjAKf34ydEKKe2mdOjqgcwAA
+pLUAAVD3Ik2vyLatRkbfrwAA
+
+
+ITcpAgent
+jvfBmo6uGkC61ckI99TMgAAA
+8
+qWQ9xcWqTk+Q37ac+Zc5cwAA
+pcufE4+jn06P9qY5kOB0igAA
+0AqeOo3lzkOKaHT8cVPOgwAA
+KjM4n5nIiE+eRcpRAEvLxgAA
+ROm4wdRu3kujC5L3DT4IAAAA
+HscRBT2RF0ya0BniWbeBWgAA
+BIZOrVMNP0CjjWzVDb046AAA
+1mLXSQUoU0eSLvw5y382owAA
+1
+T7qvCRD8oEeFVhOYfk7D4wAA
+3
+Vo9KdG21TU67s/EtgyfoVQAA
+M9A+DWOIeUGk+YFgByCYmAAA
+lqZ7xgrWKkewtFXoEKU2+AAA
+9
+
+SendSmallFile
+True
+ilTzVOgexUSPHrK2FSqS9wAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+CS+Gf2rD80uQOiFgk6MPdAAA
+
+5
+
+dwConnID
+CS+Gf2rD80uQOiFgk6MPdAAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+lpszFileName
+LPCTSTR
+CS+Gf2rD80uQOiFgk6MPdAAA
+
+
+pHead
+LPWSABUF
+CS+Gf2rD80uQOiFgk6MPdAAA
+1
+
+Cpp
+CppConst
+CppConst
+True
+1kp2cLTJ0E+sp1NuK5DXgQAA
+
+
+
+pTail
+LPWSABUF
+CS+Gf2rD80uQOiFgk6MPdAAA
+1
+
+Cpp
+CppConst
+CppConst
+True
+aN92oYF9O0We6AlfeJZcaQAA
+
+
+
+return
+pdkReturn
+BOOL
+CS+Gf2rD80uQOiFgk6MPdAAA
+
+
+
+SetReuseAddress
+True
+ilTzVOgexUSPHrK2FSqS9wAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+EkJSFECEG0aY6zofSGap2gAA
+
+2
+
+bReuseAddress
+BOOL
+EkJSFECEG0aY6zofSGap2gAA
+
+
+return
+pdkReturn
+void
+EkJSFECEG0aY6zofSGap2gAA
+
+
+
+IsReuseAddress
+True
+ilTzVOgexUSPHrK2FSqS9wAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+BeXRLytDm0qiDrI3bg/nWwAA
+
+1
+
+return
+pdkReturn
+BOOL
+BeXRLytDm0qiDrI3bg/nWwAA
+
+
+
+SetSocketBufferSize
+True
+ilTzVOgexUSPHrK2FSqS9wAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+IQlykAwKEUqNWD7FBcxaPgAA
+
+2
+
+dwSocketBufferSize
+DWORD
+IQlykAwKEUqNWD7FBcxaPgAA
+
+
+return
+pdkReturn
+void
+IQlykAwKEUqNWD7FBcxaPgAA
+
+
+
+SetKeepAliveTime
+True
+ilTzVOgexUSPHrK2FSqS9wAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+6r+0ccAOLESUUriUMzLw1QAA
+
+2
+
+dwKeepAliveTime
+DWORD
+6r+0ccAOLESUUriUMzLw1QAA
+
+
+return
+pdkReturn
+void
+6r+0ccAOLESUUriUMzLw1QAA
+
+
+
+SetKeepAliveInterval
+True
+ilTzVOgexUSPHrK2FSqS9wAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+IU2iCGjMZ06PKPtNYha4eAAA
+
+2
+
+dwKeepAliveInterval
+DWORD
+IU2iCGjMZ06PKPtNYha4eAAA
+
+
+return
+pdkReturn
+void
+IU2iCGjMZ06PKPtNYha4eAAA
+
+
+
+GetSocketBufferSize
+True
+ilTzVOgexUSPHrK2FSqS9wAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+pECSrcTQYUiJVILwr84WrwAA
+
+1
+
+return
+pdkReturn
+DWORD
+pECSrcTQYUiJVILwr84WrwAA
+
+
+
+GetKeepAliveTime
+True
+ilTzVOgexUSPHrK2FSqS9wAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+CGqRbpw5M0OThgy9rErkSAAA
+
+1
+
+return
+pdkReturn
+DWORD
+CGqRbpw5M0OThgy9rErkSAAA
+
+
+
+GetKeepAliveInterval
+True
+ilTzVOgexUSPHrK2FSqS9wAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+O4Z61Ft1P0ivrrL4Hs/OWwAA
+
+1
+
+return
+pdkReturn
+DWORD
+O4Z61Ft1P0ivrrL4Hs/OWwAA
+
+
+2
+HhGV7MnAEUSpUJYBiZ94UQAA
+R2exw8R6DE6K1lw0TUkI2wAA
+
+
+ITcpClient
+jvfBmo6uGkC61ckI99TMgAAA
+8
+nQs4ohjRpkGJ66FalNzxdwAA
+dOO9/G7idUO0ZtyANx7O4QAA
+lqqukuulmU6NID3lb+2q/AAA
+FExQG0+/OE+cyf1ApccbnwAA
+J8pneqLZKkaDgX4DgXGzJwAA
+Beg2+/tFx0yjXKd9UQEdGgAA
+hpC8z/rHwkmqPSxPKaAk3wAA
+XSRXz/S8HkSLA1P5fEI4vwAA
+1
+dOpAHC5JfkymmNyAgeRwWAAA
+3
+GJ1pEOa7xE+Vx6DHIVvLbwAA
+hwXxX+YbkkG6mY/KLykG4AAA
+l44zgodkDEuj17c7XdoPSQAA
+7
+
+SendSmallFile
+True
+CqUqbTfjd0mBGFOXrmWVDgAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+HZZAVH0FIU6ZVBzk208coQAA
+
+4
+
+lpszFileName
+LPCTSTR
+HZZAVH0FIU6ZVBzk208coQAA
+
+
+pHead
+LPWSABUF
+HZZAVH0FIU6ZVBzk208coQAA
+1
+
+Cpp
+CppConst
+CppConst
+True
+DiQ9kwx73UGrvS8/ef1AIQAA
+
+
+
+pTail
+LPWSABUF
+HZZAVH0FIU6ZVBzk208coQAA
+1
+
+Cpp
+CppConst
+CppConst
+True
+y49IejYoY0qSqeLBBoRK8AAA
+
+
+
+return
+pdkReturn
+BOOL
+HZZAVH0FIU6ZVBzk208coQAA
+
+
+
+SetSocketBufferSize
+True
+CqUqbTfjd0mBGFOXrmWVDgAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+RsjErIAYP0em72A7wdfIOAAA
+
+2
+
+dwSocketBufferSize
+DWORD
+RsjErIAYP0em72A7wdfIOAAA
+
+
+return
+pdkReturn
+void
+RsjErIAYP0em72A7wdfIOAAA
+
+
+
+SetKeepAliveTime
+True
+CqUqbTfjd0mBGFOXrmWVDgAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+xHkjUhQkwka9X6Iq+CC49wAA
+
+2
+
+dwKeepAliveTime
+DWORD
+xHkjUhQkwka9X6Iq+CC49wAA
+
+
+return
+pdkReturn
+void
+xHkjUhQkwka9X6Iq+CC49wAA
+
+
+
+SetKeepAliveInterval
+True
+CqUqbTfjd0mBGFOXrmWVDgAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+9ZxyNAhwhECwOA0fhgCFIAAA
+
+2
+
+dwKeepAliveInterval
+DWORD
+9ZxyNAhwhECwOA0fhgCFIAAA
+
+
+return
+pdkReturn
+void
+9ZxyNAhwhECwOA0fhgCFIAAA
+
+
+
+GetSocketBufferSize
+True
+CqUqbTfjd0mBGFOXrmWVDgAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+AFPw5GUrXUaMtDPcjOPi1QAA
+
+1
+
+return
+pdkReturn
+DWORD
+AFPw5GUrXUaMtDPcjOPi1QAA
+
+
+
+GetKeepAliveTime
+True
+CqUqbTfjd0mBGFOXrmWVDgAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+DYAha7DikUSv8zn5eYLNywAA
+
+1
+
+return
+pdkReturn
+DWORD
+DYAha7DikUSv8zn5eYLNywAA
+
+
+
+GetKeepAliveInterval
+True
+CqUqbTfjd0mBGFOXrmWVDgAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+xMQXtcaJQEa/fvrIFZiCsQAA
+
+1
+
+return
+pdkReturn
+DWORD
+xMQXtcaJQEa/fvrIFZiCsQAA
+
+
+2
+8vajZ8HVQUWLlEKb77MjdwAA
+XwIYEdJyaU+OBOCXAgFkDQAA
+
+
+IUdpClient
+jvfBmo6uGkC61ckI99TMgAAA
+8
+F1H1FgAQo0KwYhAVsIoSYQAA
+jbJHR08NXUGCbuGNgp0cOgAA
+A/qe+2hseUW9UB30SiWYewAA
+8YqTxFjKE0eO5ZR6s7KJQAAA
+oleTxFsjKEWwtZuXdUKCNQAA
+mu+wwFogcUaHAV1TyiDrlgAA
+nGY0WS1b7UuLarVAvDm1HwAA
+eMxGh8/HPEOWDLBKq6da9wAA
+1
+VhVmNVhKIEyRJWflThCsqQAA
+1
+TevsU+ekCkCxrYsp/lugswAA
+6
+
+SetMaxDatagramSize
+True
+s/XSjWMZB0WwUzzarQOzNgAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+LkezD0dty0WGYzWhoYrR+gAA
+
+2
+
+dwMaxDatagramSize
+DWORD
+LkezD0dty0WGYzWhoYrR+gAA
+
+
+return
+pdkReturn
+void
+LkezD0dty0WGYzWhoYrR+gAA
+
+
+
+GetMaxDatagramSize
+True
+s/XSjWMZB0WwUzzarQOzNgAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+wL7crcury0eeUEw8kwS5ogAA
+
+1
+
+return
+pdkReturn
+DWORD
+wL7crcury0eeUEw8kwS5ogAA
+
+
+
+SetDetectAttempts
+True
+s/XSjWMZB0WwUzzarQOzNgAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+PkuxOPbSdkG/5vOQ595hbgAA
+
+2
+
+dwDetectAttempts
+DWORD
+PkuxOPbSdkG/5vOQ595hbgAA
+
+
+return
+pdkReturn
+void
+PkuxOPbSdkG/5vOQ595hbgAA
+
+
+
+SetDetectInterval
+True
+s/XSjWMZB0WwUzzarQOzNgAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+G//IssPd2kuG5PYQ1/R5AQAA
+
+2
+
+dwDetectInterval
+DWORD
+G//IssPd2kuG5PYQ1/R5AQAA
+
+
+return
+pdkReturn
+void
+G//IssPd2kuG5PYQ1/R5AQAA
+
+
+
+GetDetectAttempts
+True
+s/XSjWMZB0WwUzzarQOzNgAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+ciGmHJgAyEGxiGhk8PljIgAA
+
+1
+
+return
+pdkReturn
+DWORD
+ciGmHJgAyEGxiGhk8PljIgAA
+
+
+
+GetDetectInterval
+True
+s/XSjWMZB0WwUzzarQOzNgAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+0aFR6DV9lUKHGSz772XcVQAA
+
+1
+
+return
+pdkReturn
+DWORD
+0aFR6DV9lUKHGSz772XcVQAA
+
+
+
+
+IUdpCast
+jvfBmo6uGkC61ckI99TMgAAA
+8
+pliWbIwkj0yRgSGaHICnEAAA
+GFjVGz0h0UKHtQSekLUdFAAA
+h9lDPjAO20uIyIh2EQBEegAA
+EWByVZkFRkeKOTEbtBNHzgAA
+YHlypkK/9EmsY5l1e8kckgAA
+VLGusEwIGUevSmatPhh72wAA
+aakwU3ZJpE+Ypf0KR6wLAgAA
+ThixXfNMcES7+lt9FDiJ3QAA
+1
+MejA8cLC00G/Y3QcvCU6BgAA
+1
+Mrk3QXUHNk2R1/cHV9/5pAAA
+11
+
+SetMaxDatagramSize
+True
+6HMIzI9avUGHDCpvqmkdqQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+Lemeh+D7bk+SiasFqSu2PQAA
+
+2
+
+dwMaxDatagramSize
+DWORD
+Lemeh+D7bk+SiasFqSu2PQAA
+
+
+return
+pdkReturn
+void
+Lemeh+D7bk+SiasFqSu2PQAA
+
+
+
+GetMaxDatagramSize
+True
+6HMIzI9avUGHDCpvqmkdqQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+FrmhusvHAk656SCbpUhHCgAA
+
+1
+
+return
+pdkReturn
+DWORD
+FrmhusvHAk656SCbpUhHCgAA
+
+
+
+SetReuseAddress
+True
+6HMIzI9avUGHDCpvqmkdqQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+nVw3S5A0rUa8tcQ5NiVASwAA
+
+2
+
+bReuseAddress
+BOOL
+nVw3S5A0rUa8tcQ5NiVASwAA
+
+
+return
+pdkReturn
+void
+nVw3S5A0rUa8tcQ5NiVASwAA
+
+
+
+IsReuseAddress
+True
+6HMIzI9avUGHDCpvqmkdqQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+I2XkxXkysU2alUt0LfhJ4gAA
+
+1
+
+return
+pdkReturn
+BOOL
+I2XkxXkysU2alUt0LfhJ4gAA
+
+
+
+SetCastMode
+True
+6HMIzI9avUGHDCpvqmkdqQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+2tLZ0e+je0+HgFYwvmKGSwAA
+
+2
+
+enCastMode
+2tLZ0e+je0+HgFYwvmKGSwAA
+6zImDSI92UG9tawjYrSv0AAA
+
+
+return
+pdkReturn
+void
+2tLZ0e+je0+HgFYwvmKGSwAA
+
+
+
+GetCastMode
+True
+6HMIzI9avUGHDCpvqmkdqQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+84h86FOjyEy24Gj6kEbBxwAA
+
+1
+
+return
+pdkReturn
+84h86FOjyEy24Gj6kEbBxwAA
+6zImDSI92UG9tawjYrSv0AAA
+
+
+
+SetMultiCastTtl
+True
+6HMIzI9avUGHDCpvqmkdqQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+aMsKFuLGwk6Tuk9/yYvdrQAA
+
+2
+
+iMCTtl
+int
+aMsKFuLGwk6Tuk9/yYvdrQAA
+
+
+return
+pdkReturn
+void
+aMsKFuLGwk6Tuk9/yYvdrQAA
+
+
+
+GetMultiCastTtl
+True
+6HMIzI9avUGHDCpvqmkdqQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+f2mBky6Obk61jx3S39FmcAAA
+
+1
+
+return
+pdkReturn
+int
+f2mBky6Obk61jx3S39FmcAAA
+
+
+
+SetMultiCastLoop
+True
+6HMIzI9avUGHDCpvqmkdqQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+UHQaBohb3EO396LQltE0DwAA
+
+2
+
+bMCLoop
+BOOL
+UHQaBohb3EO396LQltE0DwAA
+
+
+return
+pdkReturn
+void
+UHQaBohb3EO396LQltE0DwAA
+
+
+
+IsMultiCastLoop
+True
+6HMIzI9avUGHDCpvqmkdqQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+2kje4RSx/EGCqq5mU5J/3wAA
+
+1
+
+return
+pdkReturn
+BOOL
+2kje4RSx/EGCqq5mU5J/3wAA
+
+
+
+GetRemoteAddress
+True
+6HMIzI9avUGHDCpvqmkdqQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+0Pbk1BkkzU6td8aNoIU6XAAA
+
+4
+
+lpszAddress
+TCHAR
+0Pbk1BkkzU6td8aNoIU6XAAA
+
+
+iAddressLen
+int
+0Pbk1BkkzU6td8aNoIU6XAAA
+1
+
+Cpp
+CppPointer
+CppPointer
+&
+c2v5Ay4KK0mu77xDqfW8vAAA
+
+
+
+usPort
+USHORT
+0Pbk1BkkzU6td8aNoIU6XAAA
+1
+
+Cpp
+CppPointer
+CppPointer
+&
+3Vh4Sq/CgEebsPlah8nukAAA
+
+
+
+return
+pdkReturn
+BOOL
+0Pbk1BkkzU6td8aNoIU6XAAA
+
+
+
+
+IPullSocket
+jvfBmo6uGkC61ckI99TMgAAA
+16
+XJoHYNGE7keWE488T/cGaQAA
+zzs8DI25UUCNQ43/MQ+qVAAA
+jSQfkWH1OkmUyiATCqE/DwAA
+KtTRZu7JbEKDKjsZkk0IdAAA
+RHC6AHfVy0Gw4f4lr8UMCwAA
+KBfLPUZWk0qvj+vMol6VOgAA
+w/haTVdteEORvPvvEHgaowAA
+Ck0SZdeQBkGHx/n+RpQ/vQAA
+a0c9acKJG0SO2mD4HdFWdAAA
+tw1IrAx/fESMVbbUMfR0hwAA
+t2cW3RTa00GUioEfEZBe9AAA
+yGyum2zi9Uq1SmcgGwWodgAA
+Jvi95wSHaUOQ7NJzuaLYowAA
+41HLcaXKPU6iL79WioVYngAA
+ViYY1GaRa0qxoDIXxFgxQwAA
+KwKv5e2Cn0GDIT8TEqD2lQAA
+1
+eCOHns6MTUaMdNrY0M8eCgAA
+6
+ETiy7j/ak0iclwwFrOCPHwAA
+krwZJNbQpUee1OjG3HesgAAA
+SWj0s9+zMUW6Sa0s98LfDgAA
+DLbR09fsFE6Bx8bzfHmD6AAA
+tdi+ObP8UEaZOtjDaYNnMwAA
+6zlAYO2+JEmTh0JuwrP0jgAA
+3
+
+Fetch
+True
+BaqYQl/65Uy16GMJC7nLawAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+cgO4XXJjlU+jp30SASdXGgAA
+
+4
+
+dwConnID
+cgO4XXJjlU+jp30SASdXGgAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+pData
+BYTE
+cgO4XXJjlU+jp30SASdXGgAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+Og9kZ1Xu102smEyFTAhnmgAA
+
+
+
+iLength
+int
+cgO4XXJjlU+jp30SASdXGgAA
+
+
+return
+pdkReturn
+cgO4XXJjlU+jp30SASdXGgAA
+VQDDk4BU6UmBmig6SmOuoQAA
+
+
+
+Peek
+True
+BaqYQl/65Uy16GMJC7nLawAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+jLPCsPfjI0CNcXSMzge3MQAA
+
+4
+
+dwConnID
+jLPCsPfjI0CNcXSMzge3MQAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+pData
+BYTE
+jLPCsPfjI0CNcXSMzge3MQAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+yTMeI76WDUqqh6NHP6HtVwAA
+
+
+
+iLength
+int
+jLPCsPfjI0CNcXSMzge3MQAA
+
+
+return
+pdkReturn
+jLPCsPfjI0CNcXSMzge3MQAA
+VQDDk4BU6UmBmig6SmOuoQAA
+
+
+
+IPullSocket
+UMLStandard
+destroy
+vkPrivate
+BaqYQl/65Uy16GMJC7nLawAA
+
+4
+D3LgOgnPC0mo2/9kRF5CzAAA
+WMCkhXUbiUeaUViuDxIS7gAA
+N26WeATCm0+5rYzcDRu3eAAA
+g5GpNbyCk0OP7608E9Vd2gAA
+
+
+IPullClient
+jvfBmo6uGkC61ckI99TMgAAA
+12
+KeV/t2xsK0+PmCUPXcqplgAA
+Oht2zSUFtUiVLtO5Bv1fegAA
+BRdhWHD9IEiTyIhhQMyINwAA
+sWYnea/l+kmBg00TdIdrswAA
+3G0QePyBUU2U+ZdFBZdeaQAA
+b9fWwFLP3UWkdotR2hgX2wAA
+uM+mWaXW9UqOjgaWdHMa7gAA
+3zzDQ4ljXUyXzpIsW3LQiwAA
+nVtu8nPKAk22+oIBt8kPjAAA
+aJeXCxGlmEKsy8OPpW0ingAA
+Gc16A41OjkGXNLvpg6vmSQAA
+sGI4sAU5bkix4g66jHTM/gAA
+3
+wIyBqLGeaEauN2RIkujQrAAA
+t7BFiOV+U0+3Fzwd6nXwzgAA
+1tgP9ALDWkSXfAEOH31nEAAA
+3
+
+Fetch
+True
+LPfLjDLmzkKy/sn51dyX7gAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+b5f9MD0AtkeuN79sme+E2gAA
+
+3
+
+pData
+BYTE
+b5f9MD0AtkeuN79sme+E2gAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+P3+N+MgvJ0ey6Qk0Vf6+VQAA
+
+
+
+iLength
+int
+b5f9MD0AtkeuN79sme+E2gAA
+
+
+return
+pdkReturn
+b5f9MD0AtkeuN79sme+E2gAA
+VQDDk4BU6UmBmig6SmOuoQAA
+
+
+
+Peek
+True
+LPfLjDLmzkKy/sn51dyX7gAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+YASw0VxOv0y6F5IlJt9dMQAA
+
+3
+
+pData
+BYTE
+YASw0VxOv0y6F5IlJt9dMQAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+/zh3zudhYkOgxTZTUfQ28gAA
+
+
+
+iLength
+int
+YASw0VxOv0y6F5IlJt9dMQAA
+
+
+return
+pdkReturn
+YASw0VxOv0y6F5IlJt9dMQAA
+VQDDk4BU6UmBmig6SmOuoQAA
+
+
+
+IPullClient
+UMLStandard
+destroy
+vkPrivate
+LPfLjDLmzkKy/sn51dyX7gAA
+
+2
+ykScGgFhYECpgmHks746nwAA
+8Dmc2hy1qkCg3B1+LncpMAAA
+
+
+ITcpPullServer
+jvfBmo6uGkC61ckI99TMgAAA
+8
+PK1lPcGwCkO4ClijCg6U4QAA
+kmMKQofMq06NVuB9xv0DEwAA
+Pbd7421jwUOfRSrw7NrAjQAA
+tN7A8f0zdUCaEQ9ttQrqgAAA
+vwPKwpBbd0GUOwpQTiwJIwAA
+SVKltLfsBEKO65EbcGVLfAAA
+nFpsCSVN4EywibH/eGe5ggAA
+JAvzaxKf8kqnc39M6uNJ4gAA
+2
+ETiy7j/ak0iclwwFrOCPHwAA
+RvwWYNXraU2xkdsooYM/NwAA
+2
+
+ToPull
+skClassifier
+gJKazn/X+U6+FJp/F2soRAAA
+1
+
+Cpp
+CppMemberFunction
+CppInline
+True
+a22XnjLylkC6pPrM063G6AAA
+
+2
+
+pServer
+a22XnjLylkC6pPrM063G6AAA
+GoHMKPRtzES/2hlDzLtwnAAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+da6KPUpOnkuM7gM+HBH1FwAA
+
+
+
+return
+pdkReturn
+a22XnjLylkC6pPrM063G6AAA
+BaqYQl/65Uy16GMJC7nLawAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+D3LgOgnPC0mo2/9kRF5CzAAA
+
+
+
+
+ToServer
+skClassifier
+gJKazn/X+U6+FJp/F2soRAAA
+1
+
+Cpp
+CppMemberFunction
+CppInline
+True
+nfMtOxpMvkiYqWPhEk+eswAA
+
+2
+
+pPullSocket
+nfMtOxpMvkiYqWPhEk+eswAA
+BaqYQl/65Uy16GMJC7nLawAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+WMCkhXUbiUeaUViuDxIS7gAA
+
+
+
+return
+pdkReturn
+nfMtOxpMvkiYqWPhEk+eswAA
+YNdJIJRIm0SpW7CG17MtyAAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+4lYcEooM20qvD7Cm0s0sHAAA
+
+
+
+
+
+ITcpPullAgent
+jvfBmo6uGkC61ckI99TMgAAA
+8
++2HvTQsUAk+HjQ5fXiU8owAA
+Zt9ux3apgU2A9+dT3PlLuQAA
+U1iV73eD/EKDcYBLLs8SbgAA
+F+kjP5IVjkCktmcV7GpefwAA
+bfxTyfA02Ue+pDo34ZXTAQAA
+uz3bs+otU06psOTqopWQ5wAA
+qresWiI5R022VvwFyq1FmAAA
+n2zOZxJZCUeRutQvVzK48gAA
+2
+krwZJNbQpUee1OjG3HesgAAA
+Vo9KdG21TU67s/EtgyfoVQAA
+2
+
+ToPull
+skClassifier
+QvkeGvTpWU2SJ0MXVIx/AwAA
+1
+
+Cpp
+CppMemberFunction
+CppInline
+True
+g8FWrwrOsk2xaSWwzLwBywAA
+
+2
+
+pAgent
+g8FWrwrOsk2xaSWwzLwBywAA
+tc20+9LmREuR1dUMSybNdQAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+yjAKf34ydEKKe2mdOjqgcwAA
+
+
+
+return
+pdkReturn
+g8FWrwrOsk2xaSWwzLwBywAA
+BaqYQl/65Uy16GMJC7nLawAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+N26WeATCm0+5rYzcDRu3eAAA
+
+
+
+
+ToAgent
+skClassifier
+QvkeGvTpWU2SJ0MXVIx/AwAA
+1
+
+Cpp
+CppMemberFunction
+CppInline
+True
+6kTzFyp0yEKHWiBeqCP9CwAA
+
+2
+
+pPullSocket
+6kTzFyp0yEKHWiBeqCP9CwAA
+BaqYQl/65Uy16GMJC7nLawAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+g5GpNbyCk0OP7608E9Vd2gAA
+
+
+
+return
+pdkReturn
+6kTzFyp0yEKHWiBeqCP9CwAA
+ilTzVOgexUSPHrK2FSqS9wAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+HhGV7MnAEUSpUJYBiZ94UQAA
+
+
+
+
+
+ITcpPullClient
+jvfBmo6uGkC61ckI99TMgAAA
+8
+zqmdKXYEt0GXqYV17S23CAAA
+lPLDWCSrwEm0x6QoK6wnYwAA
+HpX+r8mvDkWEvQ5BNbiD1AAA
+QVYcuhXqMUW+ghNJaNocdAAA
+JO73WwZwyUit/u2y4GvaEQAA
+iqHHrnOvgEG+TiaUqXhfcAAA
+1irNlD+XQE2AlX5OA+9pvQAA
+geszcr8n/02Tb1vHjXTQwwAA
+2
+wIyBqLGeaEauN2RIkujQrAAA
+GJ1pEOa7xE+Vx6DHIVvLbwAA
+2
+
+ToPull
+skClassifier
+SjUoRiw3TUOE/FQirpeMogAA
+1
+
+Cpp
+CppMemberFunction
+CppInline
+True
+rTXsgR4NCE+yYN3Y/oufiwAA
+
+2
+
+pClient
+rTXsgR4NCE+yYN3Y/oufiwAA
+R8hLgFt1fEaSSxBO7KbEBQAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+ui8T/xO9oEiXpayGYfJlwwAA
+
+
+
+return
+pdkReturn
+rTXsgR4NCE+yYN3Y/oufiwAA
+LPfLjDLmzkKy/sn51dyX7gAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+ykScGgFhYECpgmHks746nwAA
+
+
+
+
+ToClient
+skClassifier
+SjUoRiw3TUOE/FQirpeMogAA
+1
+
+Cpp
+CppMemberFunction
+CppInline
+True
+c0Hq5A+WekCceKwhN0b2JAAA
+
+2
+
+pPullClient
+c0Hq5A+WekCceKwhN0b2JAAA
+LPfLjDLmzkKy/sn51dyX7gAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+8Dmc2hy1qkCg3B1+LncpMAAA
+
+
+
+return
+pdkReturn
+c0Hq5A+WekCceKwhN0b2JAAA
+CqUqbTfjd0mBGFOXrmWVDgAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+8vajZ8HVQUWLlEKb77MjdwAA
+
+
+
+
+
+CTcpAgent
+jvfBmo6uGkC61ckI99TMgAAA
+8
+nninAmAC7U2238tYjDUvxQAA
+zeqFNx3vlkOe+49bdxZASgAA
+DJNQ3zQI+kKgTIhce2m20AAA
+96iOMQyyKkG+yRyQ3G4aYwAA
+4AOpRzJdoEe6n+U1thlGDwAA
+ysW2A7t0fUK34HJLeQ1VFQAA
+G2QusJy32k+Cf2J9W0Q59wAA
+V/VPHkn4jkGYMGdLg2rdJgAA
+1
+M9A+DWOIeUGk+YFgByCYmAAA
+3
+IDQB44Q61kudclcYwyYEMwAA
+YVPRQLCk1keYCHnO8PWR/AAA
+TfYW/muhnkCoBvGlNPHSNgAA
+48
+
+CTcpAgent
+UMLStandard
+create
+vkPrivate
++hvdtNLBPUeUmdoy9WnIywAA
+1
+
+psoListener
+GaiMwJEmnEyxBdXScBG+5AAA
+skl0Nm/UIUCTsqkUAIXmzAAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+SOpFN5D6dUi/yOIJ1NO6NAAA
+
+
+
+
+CTcpAgent
+UMLStandard
+destroy
+vkPrivate
++hvdtNLBPUeUmdoy9WnIywAA
+
+
+Start
++hvdtNLBPUeUmdoy9WnIywAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+8XybYNS2vkWssa0TFIab8QAA
+
+3
+
+pdkReturn
+BOOL
+8XybYNS2vkWssa0TFIab8QAA
+
+
+lpszBindAddress
+LPCTSTR
+8XybYNS2vkWssa0TFIab8QAA
+
+
+bAsyncConnect
+BOOL
+8XybYNS2vkWssa0TFIab8QAA
+
+
+
+Stop
++hvdtNLBPUeUmdoy9WnIywAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+OvWhIJQIpEasTYe5OT0a5QAA
+
+1
+
+return
+pdkReturn
+BOOL
+OvWhIJQIpEasTYe5OT0a5QAA
+
+
+
+Connect
++hvdtNLBPUeUmdoy9WnIywAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+jV8C++Q20k6V5b5C45yvlQAA
+
+4
+
+pszRemoteAddress
+LPCTSTR
+jV8C++Q20k6V5b5C45yvlQAA
+
+
+usPort
+USHORT
+jV8C++Q20k6V5b5C45yvlQAA
+
+
+pdwConnID
+jV8C++Q20k6V5b5C45yvlQAA
+G8TfQngB3UemVJWZg5KbggAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+51I86s1DOke3qJOgWgqVLAAA
+
+
+
+return
+pdkReturn
+BOOL
+jV8C++Q20k6V5b5C45yvlQAA
+
+
+
+Send
++hvdtNLBPUeUmdoy9WnIywAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+QbKluSBULUy5qEYXN8aUXQAA
+
+5
+
+dwConnID
+QbKluSBULUy5qEYXN8aUXQAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+pBuffer
+BYTE
+QbKluSBULUy5qEYXN8aUXQAA
+2
+
+Cpp
+CppConst
+CppConst
+True
+lCjagAwFNU+5cleJOF3xKgAA
+
+
+Cpp
+CppPointer
+CppPointer
+*
+lCjagAwFNU+5cleJOF3xKgAA
+
+
+
+iLength
+int
+QbKluSBULUy5qEYXN8aUXQAA
+
+
+iOffset
+int
+QbKluSBULUy5qEYXN8aUXQAA
+
+
+return
+pdkReturn
+BOOL
+QbKluSBULUy5qEYXN8aUXQAA
+
+
+
+SendPackets
++hvdtNLBPUeUmdoy9WnIywAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+dUzn/H61rEmo9KhmXUge/AAA
+
+4
+
+dwConnID
+dUzn/H61rEmo9KhmXUge/AAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+pBuffers
+WSABUF
+dUzn/H61rEmo9KhmXUge/AAA
+1
+
+Cpp
+CppConst
+CppConst
+True
+oijLFD+Irku57XRr5yAdowAA
+
+
+
+iCount
+int
+dUzn/H61rEmo9KhmXUge/AAA
+
+
+return
+pdkReturn
+BOOL
+dUzn/H61rEmo9KhmXUge/AAA
+
+
+
+SendSmallFile
++hvdtNLBPUeUmdoy9WnIywAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+NetK/QLhnUOrgXRav/oWLQAA
+
+5
+
+dwConnID
+NetK/QLhnUOrgXRav/oWLQAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+lpszFileName
+LPCTSTR
+NetK/QLhnUOrgXRav/oWLQAA
+
+
+pHead
+LPWSABUF
+NetK/QLhnUOrgXRav/oWLQAA
+1
+
+Cpp
+CppConst
+CppConst
+True
+34pql+rKb068K55aNtPybAAA
+
+
+
+pTail
+LPWSABUF
+NetK/QLhnUOrgXRav/oWLQAA
+1
+
+Cpp
+CppConst
+CppConst
+True
+Ngwv0oukGEaJ1b3xUicOkQAA
+
+
+
+return
+pdkReturn
+BOOL
+NetK/QLhnUOrgXRav/oWLQAA
+
+
+
+HasStarted
++hvdtNLBPUeUmdoy9WnIywAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+zjmHffbWIEyP/4UAEzbaSwAA
+
+1
+
+return
+pdkReturn
+BOOL
+zjmHffbWIEyP/4UAEzbaSwAA
+
+
+
+GetState
++hvdtNLBPUeUmdoy9WnIywAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+bF5bqhXvlEyg3a7oWRu0LAAA
+
+1
+
+return
+pdkReturn
+bF5bqhXvlEyg3a7oWRu0LAAA
+3KsfqnlMb0ieGw/IAO5hFQAA
+
+
+
+Disconnect
++hvdtNLBPUeUmdoy9WnIywAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+LKp1L65IvEWRUpalbHj4egAA
+
+3
+
+dwConnID
+LKp1L65IvEWRUpalbHj4egAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+bForce
+BOOL
+LKp1L65IvEWRUpalbHj4egAA
+
+
+return
+pdkReturn
+BOOL
+LKp1L65IvEWRUpalbHj4egAA
+
+
+
+DisconnectLongConnections
++hvdtNLBPUeUmdoy9WnIywAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+YeF3cYkzY02JYlqPOsoG9QAA
+
+3
+
+dwPeriod
+DWORD
+YeF3cYkzY02JYlqPOsoG9QAA
+
+
+bForce
+BOOL
+YeF3cYkzY02JYlqPOsoG9QAA
+
+
+return
+pdkReturn
+BOOL
+YeF3cYkzY02JYlqPOsoG9QAA
+
+
+
+DisconnectSilenceConnections
++hvdtNLBPUeUmdoy9WnIywAA
+3
+
+pdkReturn
+BOOL
+GHqlBeCMIU61oJNe1G8VzAAA
+
+
+dwPeriod
+DWORD
+GHqlBeCMIU61oJNe1G8VzAAA
+
+
+bForce
+BOOL
+GHqlBeCMIU61oJNe1G8VzAAA
+
+
+
+GetLocalAddress
++hvdtNLBPUeUmdoy9WnIywAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+X90qAsY0iUeJUPXmi7tYwQAA
+
+5
+
+dwConnID
+X90qAsY0iUeJUPXmi7tYwQAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+lpszAddress
+TCHAR
+X90qAsY0iUeJUPXmi7tYwQAA
+
+
+iAddressLen
+int
+X90qAsY0iUeJUPXmi7tYwQAA
+1
+
+Cpp
+CppPointer
+CppPointer
+&
+pisUlDEWBEK4f3uFIq8iDgAA
+
+
+
+usPort
+USHORT
+X90qAsY0iUeJUPXmi7tYwQAA
+1
+
+Cpp
+CppPointer
+CppPointer
+&
+DzcTtkf8Pk6Xg58T5iHgSwAA
+
+
+
+return
+pdkReturn
+BOOL
+X90qAsY0iUeJUPXmi7tYwQAA
+
+
+
+GetRemoteAddress
++hvdtNLBPUeUmdoy9WnIywAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+LlkEypQ56kGa3EIOg6ZPHAAA
+
+5
+
+dwConnID
+LlkEypQ56kGa3EIOg6ZPHAAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+lpszAddress
+TCHAR
+LlkEypQ56kGa3EIOg6ZPHAAA
+
+
+iAddressLen
+int
+LlkEypQ56kGa3EIOg6ZPHAAA
+1
+
+Cpp
+CppPointer
+CppPointer
+&
+7g4dBOnE+kuoj720ok4LRAAA
+
+
+
+usPort
+USHORT
+LlkEypQ56kGa3EIOg6ZPHAAA
+1
+
+Cpp
+CppPointer
+CppPointer
+&
+3w08v5MbB06w2W8fUK0M9AAA
+
+
+
+return
+pdkReturn
+BOOL
+LlkEypQ56kGa3EIOg6ZPHAAA
+
+
+
+GetPendingDataLength
++hvdtNLBPUeUmdoy9WnIywAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+5sX7kgB8mk+wWgFB8uUTPgAA
+
+3
+
+dwConnID
+5sX7kgB8mk+wWgFB8uUTPgAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+iPending
+int
+5sX7kgB8mk+wWgFB8uUTPgAA
+1
+
+Cpp
+CppPointer
+CppPointer
+&
+RXkYq3BY3Eu3qH03Re/QrwAA
+
+
+
+return
+pdkReturn
+BOOL
+5sX7kgB8mk+wWgFB8uUTPgAA
+
+
+
+GetConnectionCount
++hvdtNLBPUeUmdoy9WnIywAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+SDISs2LqsEW28yH/0QinXwAA
+
+1
+
+return
+pdkReturn
+DWORD
+SDISs2LqsEW28yH/0QinXwAA
+
+
+
+GetAllConnectionIDs
++hvdtNLBPUeUmdoy9WnIywAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+akGyv9Hjikq5bCPXoYb0PwAA
+
+3
+
+pIDs
+akGyv9Hjikq5bCPXoYb0PwAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+dwCount
+DWORD
+akGyv9Hjikq5bCPXoYb0PwAA
+1
+
+Cpp
+CppPointer
+CppPointer
+&
+iM1GtPsaEkmMQSevsCV42gAA
+
+
+
+return
+pdkReturn
+BOOL
+akGyv9Hjikq5bCPXoYb0PwAA
+
+
+
+GetConnectPeriod
++hvdtNLBPUeUmdoy9WnIywAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+c6Y3A96vz0qa9lNSWqp8PAAA
+
+3
+
+dwConnID
+c6Y3A96vz0qa9lNSWqp8PAAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+dwPeriod
+DWORD
+c6Y3A96vz0qa9lNSWqp8PAAA
+1
+
+Cpp
+CppPointer
+CppPointer
+&
+Tmb6KGr370qC38kgmsHZOwAA
+
+
+
+return
+pdkReturn
+BOOL
+c6Y3A96vz0qa9lNSWqp8PAAA
+
+
+
+GetSilencePeriod
++hvdtNLBPUeUmdoy9WnIywAA
+3
+
+pdkReturn
+BOOL
+vYwz3XqhHUKUn56sA0KXEAAA
+
+
+dwConnID
+vYwz3XqhHUKUn56sA0KXEAAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+dwPeriod
+DWORD
+vYwz3XqhHUKUn56sA0KXEAAA
+
+
+
+GetLastError
++hvdtNLBPUeUmdoy9WnIywAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+c2KWKu9jI0OpuyEwMjKbKQAA
+
+1
+
+return
+pdkReturn
+c2KWKu9jI0OpuyEwMjKbKQAA
+R9EXi7T78E6Gt882nRMyDwAA
+
+
+
+GetLastErrorDesc
++hvdtNLBPUeUmdoy9WnIywAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+5uQT36vT7EWILdyXEI2jkwAA
+
+1
+
+return
+pdkReturn
+LPCTSTR
+5uQT36vT7EWILdyXEI2jkwAA
+
+
+
+SetConnectionExtra
++hvdtNLBPUeUmdoy9WnIywAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+gyT6/s9EQkKCoP/R/htYJwAA
+
+3
+
+dwConnID
+gyT6/s9EQkKCoP/R/htYJwAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+pExtra
+PVOID
+gyT6/s9EQkKCoP/R/htYJwAA
+
+
+return
+pdkReturn
+BOOL
+gyT6/s9EQkKCoP/R/htYJwAA
+
+
+
+GetConnectionExtra
++hvdtNLBPUeUmdoy9WnIywAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+AIwVPn57FE2A8qcqAnVqZgAA
+
+3
+
+dwConnID
+AIwVPn57FE2A8qcqAnVqZgAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+ppExtra
+PVOID
+AIwVPn57FE2A8qcqAnVqZgAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+w0NeYcz8tEySRo8rScz37gAA
+
+
+
+return
+pdkReturn
+BOOL
+AIwVPn57FE2A8qcqAnVqZgAA
+
+
+
+SetSendPolicy
++hvdtNLBPUeUmdoy9WnIywAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+2jNtUUJ/4keRYENj9zta7QAA
+
+2
+
+enSendPolicy
+2jNtUUJ/4keRYENj9zta7QAA
+p4RvBvwp3kOxyo/4mj2ZKwAA
+
+
+return
+pdkReturn
+void
+2jNtUUJ/4keRYENj9zta7QAA
+
+
+
+SetMarkSilence
++hvdtNLBPUeUmdoy9WnIywAA
+2
+
+pdkReturn
+void
+TLv4U1BAO0aKP6eeHTFmOgAA
+
+
+bMarkSilence
+BOOL
+TLv4U1BAO0aKP6eeHTFmOgAA
+
+
+
+IsMarkSilence
++hvdtNLBPUeUmdoy9WnIywAA
+1
+
+pdkReturn
+BOOL
+HKLLo5ga3U63NFS7OHfcWAAA
+
+
+
+SetWorkerThreadCount
++hvdtNLBPUeUmdoy9WnIywAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+bzOhz/m1gUO5kLQM5c1LMAAA
+
+2
+
+dwWorkerThreadCount
+DWORD
+bzOhz/m1gUO5kLQM5c1LMAAA
+
+
+return
+pdkReturn
+void
+bzOhz/m1gUO5kLQM5c1LMAAA
+
+
+
+SetSocketBufferSize
++hvdtNLBPUeUmdoy9WnIywAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+wFj0pIlekE60HZEZyQmksgAA
+
+2
+
+dwSocketBufferSize
+DWORD
+wFj0pIlekE60HZEZyQmksgAA
+
+
+return
+pdkReturn
+void
+wFj0pIlekE60HZEZyQmksgAA
+
+
+
+SetFreeSocketObjLockTime
++hvdtNLBPUeUmdoy9WnIywAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+Mr3If0x/7ECGuwq6Jk1phQAA
+
+2
+
+dwFreeSocketObjLockTime
+DWORD
+Mr3If0x/7ECGuwq6Jk1phQAA
+
+
+return
+pdkReturn
+void
+Mr3If0x/7ECGuwq6Jk1phQAA
+
+
+
+SetFreeSocketObjPool
++hvdtNLBPUeUmdoy9WnIywAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+D4Zg1YB0skmTL2K7XdIK0QAA
+
+2
+
+dwFreeSocketObjPool
+DWORD
+D4Zg1YB0skmTL2K7XdIK0QAA
+
+
+return
+pdkReturn
+void
+D4Zg1YB0skmTL2K7XdIK0QAA
+
+
+
+SetFreeBufferObjPool
++hvdtNLBPUeUmdoy9WnIywAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+OrZbYP5Ar0mKSPILWqzi6wAA
+
+2
+
+dwFreeBufferObjPool
+DWORD
+OrZbYP5Ar0mKSPILWqzi6wAA
+
+
+return
+pdkReturn
+void
+OrZbYP5Ar0mKSPILWqzi6wAA
+
+
+
+SetFreeSocketObjHold
++hvdtNLBPUeUmdoy9WnIywAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+mxZjDqE1KUiPCBUNJCjnFwAA
+
+2
+
+dwFreeSocketObjHold
+DWORD
+mxZjDqE1KUiPCBUNJCjnFwAA
+
+
+return
+pdkReturn
+void
+mxZjDqE1KUiPCBUNJCjnFwAA
+
+
+
+SetFreeBufferObjHold
++hvdtNLBPUeUmdoy9WnIywAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+0hpPphLtykq4+LRMszgTWAAA
+
+2
+
+dwFreeBufferObjHold
+DWORD
+0hpPphLtykq4+LRMszgTWAAA
+
+
+return
+pdkReturn
+void
+0hpPphLtykq4+LRMszgTWAAA
+
+
+
+SetKeepAliveTime
++hvdtNLBPUeUmdoy9WnIywAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+BnE583tGokSuJUvgsb+CcwAA
+
+2
+
+dwKeepAliveTime
+DWORD
+BnE583tGokSuJUvgsb+CcwAA
+
+
+return
+pdkReturn
+void
+BnE583tGokSuJUvgsb+CcwAA
+
+
+
+SetKeepAliveInterval
++hvdtNLBPUeUmdoy9WnIywAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+4sOac3NFLEa2Ktjn6GXfkAAA
+
+2
+
+dwKeepAliveInterval
+DWORD
+4sOac3NFLEa2Ktjn6GXfkAAA
+
+
+return
+pdkReturn
+void
+4sOac3NFLEa2Ktjn6GXfkAAA
+
+
+
+SetReuseAddress
++hvdtNLBPUeUmdoy9WnIywAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+jYmhcvk/KkCi98wxVyxlgQAA
+
+2
+
+bReuseAddress
+BOOL
+jYmhcvk/KkCi98wxVyxlgQAA
+
+
+return
+pdkReturn
+void
+jYmhcvk/KkCi98wxVyxlgQAA
+
+
+
+GetSendPolicy
++hvdtNLBPUeUmdoy9WnIywAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+FVmUlcrLIE2kc9PpzlIhMAAA
+
+1
+
+return
+pdkReturn
+FVmUlcrLIE2kc9PpzlIhMAAA
+p4RvBvwp3kOxyo/4mj2ZKwAA
+
+
+
+GetWorkerThreadCount
++hvdtNLBPUeUmdoy9WnIywAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+6AuN4iAs2k2LSP2yMYljVAAA
+
+1
+
+return
+pdkReturn
+DWORD
+6AuN4iAs2k2LSP2yMYljVAAA
+
+
+
+GetSocketBufferSize
++hvdtNLBPUeUmdoy9WnIywAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
++PGe7N2/FE6XtIk4s5JVAwAA
+
+1
+
+return
+pdkReturn
+DWORD
++PGe7N2/FE6XtIk4s5JVAwAA
+
+
+
+GetFreeSocketObjLockTime
++hvdtNLBPUeUmdoy9WnIywAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+W79yrdGkN0KA5XGVec0dwwAA
+
+1
+
+return
+pdkReturn
+DWORD
+W79yrdGkN0KA5XGVec0dwwAA
+
+
+
+GetFreeSocketObjPool
++hvdtNLBPUeUmdoy9WnIywAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+mIKLuqW66EyF4y2uWImVuwAA
+
+1
+
+return
+pdkReturn
+DWORD
+mIKLuqW66EyF4y2uWImVuwAA
+
+
+
+GetFreeBufferObjPool
++hvdtNLBPUeUmdoy9WnIywAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+45ZSCQbOWU6wJTNVUtN+xQAA
+
+1
+
+return
+pdkReturn
+DWORD
+45ZSCQbOWU6wJTNVUtN+xQAA
+
+
+
+GetFreeSocketObjHold
++hvdtNLBPUeUmdoy9WnIywAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
++ehGpW8yUkmrFNu0LRJgKgAA
+
+1
+
+return
+pdkReturn
+DWORD
++ehGpW8yUkmrFNu0LRJgKgAA
+
+
+
+GetFreeBufferObjHold
++hvdtNLBPUeUmdoy9WnIywAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+XTafu99nxkeEJcL+cgJQLgAA
+
+1
+
+return
+pdkReturn
+DWORD
+XTafu99nxkeEJcL+cgJQLgAA
+
+
+
+GetKeepAliveTime
++hvdtNLBPUeUmdoy9WnIywAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+1+U2OC8YKE+6LWY0VE2ZCgAA
+
+1
+
+return
+pdkReturn
+DWORD
+1+U2OC8YKE+6LWY0VE2ZCgAA
+
+
+
+GetKeepAliveInterval
++hvdtNLBPUeUmdoy9WnIywAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+qRcbFHSM90qXO0CV4Lq79gAA
+
+1
+
+return
+pdkReturn
+DWORD
+qRcbFHSM90qXO0CV4Lq79gAA
+
+
+
+IsReuseAddress
++hvdtNLBPUeUmdoy9WnIywAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+mZTRn52mzUKy479NHeRbNAAA
+
+1
+
+return
+pdkReturn
+BOOL
+mZTRn52mzUKy479NHeRbNAAA
+
+
+
+
+CTcpClient
+jvfBmo6uGkC61ckI99TMgAAA
+8
+PGFFeARNxk+lxLKoUolRcgAA
+bhq+EKQMh0mJ5HMPBgvYmgAA
+IZzOP8acO0GJJlNhV+/wsAAA
+1Ep9fPeyp02DLG+kWwBmAgAA
+9/z70h7WbU+nSBlyL/MOfAAA
+369cYTvudUecz049/FDJjgAA
+J9CWNyRztkO4LbU7+KL+oQAA
+DoDrdNCp6ESoxgG/U/jBXgAA
+1
+hwXxX+YbkkG6mY/KLykG4AAA
+3
+ZNw4OjQkUkmijjdgoAjX+gAA
+PhcJjlYZKkK5/K0LejildAAA
+Tl0fIre+Z0iT2dYHwMCvCgAA
+26
+
+Start
+rNsPUCIqcESb1NED1xr04AAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+xqIYrcUgnkSQ1GQGjhpGJgAA
+
+5
+
+pdkReturn
+BOOL
+xqIYrcUgnkSQ1GQGjhpGJgAA
+
+
+lpszRemoteAddress
+LPCTSTR
+xqIYrcUgnkSQ1GQGjhpGJgAA
+
+
+usPort
+USHORT
+xqIYrcUgnkSQ1GQGjhpGJgAA
+
+
+bAsyncConnect
+BOOL
+xqIYrcUgnkSQ1GQGjhpGJgAA
+
+
+lpszBindAddress
+LPCTSTR
+xqIYrcUgnkSQ1GQGjhpGJgAA
+
+
+
+Stop
+rNsPUCIqcESb1NED1xr04AAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+/Qhmo/fLEkuF39ZikfRjFQAA
+
+1
+
+return
+pdkReturn
+BOOL
+/Qhmo/fLEkuF39ZikfRjFQAA
+
+
+
+Send
+rNsPUCIqcESb1NED1xr04AAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+iJFqK2IVl0+NVNtTEkyl/wAA
+
+4
+
+pBuffer
+BYTE
+iJFqK2IVl0+NVNtTEkyl/wAA
+2
+
+Cpp
+CppConst
+CppConst
+True
+LuALeibffEexnFyOS/DuGQAA
+
+
+Cpp
+CppPointer
+CppPointer
+*
+LuALeibffEexnFyOS/DuGQAA
+
+
+
+iLength
+int
+iJFqK2IVl0+NVNtTEkyl/wAA
+
+
+iOffset
+int
+iJFqK2IVl0+NVNtTEkyl/wAA
+
+
+return
+pdkReturn
+BOOL
+iJFqK2IVl0+NVNtTEkyl/wAA
+
+
+
+SendPackets
+rNsPUCIqcESb1NED1xr04AAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+MSFxfox08EGCuO6P2TauPAAA
+
+3
+
+pBuffers
+WSABUF
+MSFxfox08EGCuO6P2TauPAAA
+1
+
+Cpp
+CppConst
+CppConst
+True
+H59cxWwCJU+FyKrezLgc4wAA
+
+
+
+iCount
+int
+MSFxfox08EGCuO6P2TauPAAA
+
+
+return
+pdkReturn
+BOOL
+MSFxfox08EGCuO6P2TauPAAA
+
+
+
+SendSmallFile
+rNsPUCIqcESb1NED1xr04AAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+a7csUxLGw0Cx5cCnwo7QPgAA
+
+4
+
+lpszFileName
+LPCTSTR
+a7csUxLGw0Cx5cCnwo7QPgAA
+
+
+pHead
+LPWSABUF
+a7csUxLGw0Cx5cCnwo7QPgAA
+1
+
+Cpp
+CppConst
+CppConst
+True
+Z3eIW+13y0WDUo0h1/zbhQAA
+
+
+
+pTail
+LPWSABUF
+a7csUxLGw0Cx5cCnwo7QPgAA
+1
+
+Cpp
+CppConst
+CppConst
+True
+kRkXXIyT206L0QntlJ0zhgAA
+
+
+
+return
+pdkReturn
+BOOL
+a7csUxLGw0Cx5cCnwo7QPgAA
+
+
+
+HasStarted
+rNsPUCIqcESb1NED1xr04AAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+oAZrKOgYfkabqeEVBol75wAA
+
+1
+
+return
+pdkReturn
+BOOL
+oAZrKOgYfkabqeEVBol75wAA
+
+
+
+GetState
+rNsPUCIqcESb1NED1xr04AAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+FXzC/uhRnkSq4Tn7EFpBdAAA
+
+1
+
+return
+pdkReturn
+FXzC/uhRnkSq4Tn7EFpBdAAA
+3KsfqnlMb0ieGw/IAO5hFQAA
+
+
+
+GetConnectionID
+rNsPUCIqcESb1NED1xr04AAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+Mnewg9gaLk+kyV625IT+qwAA
+
+1
+
+return
+pdkReturn
+Mnewg9gaLk+kyV625IT+qwAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+
+GetLocalAddress
+rNsPUCIqcESb1NED1xr04AAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+i8zfzrzwzUeHHM7W/v2Q9AAA
+
+4
+
+lpszAddress
+TCHAR
+i8zfzrzwzUeHHM7W/v2Q9AAA
+
+
+iAddressLen
+int
+i8zfzrzwzUeHHM7W/v2Q9AAA
+1
+
+Cpp
+CppPointer
+CppPointer
+&
+IUdrnSu8vEKgvsUmKByPygAA
+
+
+
+usPort
+USHORT
+i8zfzrzwzUeHHM7W/v2Q9AAA
+1
+
+Cpp
+CppPointer
+CppPointer
+&
+EhuWL/p8eUC0D7EyOy9qMwAA
+
+
+
+return
+pdkReturn
+BOOL
+i8zfzrzwzUeHHM7W/v2Q9AAA
+
+
+
+GetPendingDataLength
+rNsPUCIqcESb1NED1xr04AAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+DDVc7sPaVkKo3YUXBWrVVAAA
+
+2
+
+iPending
+int
+DDVc7sPaVkKo3YUXBWrVVAAA
+1
+
+Cpp
+CppPointer
+CppPointer
+&
+DoofxA6q2U2ETRQvxZyHJQAA
+
+
+
+return
+pdkReturn
+BOOL
+DDVc7sPaVkKo3YUXBWrVVAAA
+
+
+
+GetLastError
+rNsPUCIqcESb1NED1xr04AAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+q2xTwE7EsUahHc9cWDtNbAAA
+
+1
+
+return
+pdkReturn
+q2xTwE7EsUahHc9cWDtNbAAA
+R9EXi7T78E6Gt882nRMyDwAA
+
+
+
+GetLastErrorDesc
+rNsPUCIqcESb1NED1xr04AAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+Xii7BTbFWk2PzgC3n50LBAAA
+
+1
+
+return
+pdkReturn
+LPCTSTR
+Xii7BTbFWk2PzgC3n50LBAAA
+
+
+
+SetSocketBufferSize
+rNsPUCIqcESb1NED1xr04AAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+p2dByb32SEaJkvGIKCAk6wAA
+
+2
+
+dwSocketBufferSize
+DWORD
+p2dByb32SEaJkvGIKCAk6wAA
+
+
+return
+pdkReturn
+void
+p2dByb32SEaJkvGIKCAk6wAA
+
+
+
+SetKeepAliveTime
+rNsPUCIqcESb1NED1xr04AAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+1KlKL/wo3kOj+s3bVLTc2gAA
+
+2
+
+dwKeepAliveTime
+DWORD
+1KlKL/wo3kOj+s3bVLTc2gAA
+
+
+return
+pdkReturn
+void
+1KlKL/wo3kOj+s3bVLTc2gAA
+
+
+
+SetKeepAliveInterval
+rNsPUCIqcESb1NED1xr04AAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+bRE3GkXMI0yASmgUvQF/ggAA
+
+2
+
+dwKeepAliveInterval
+DWORD
+bRE3GkXMI0yASmgUvQF/ggAA
+
+
+return
+pdkReturn
+void
+bRE3GkXMI0yASmgUvQF/ggAA
+
+
+
+SetFreeBufferPoolSize
+rNsPUCIqcESb1NED1xr04AAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+X6HZZFjZk0OgRu/CRXrLIAAA
+
+2
+
+dwFreeBufferPoolSize
+DWORD
+X6HZZFjZk0OgRu/CRXrLIAAA
+
+
+return
+pdkReturn
+void
+X6HZZFjZk0OgRu/CRXrLIAAA
+
+
+
+SetFreeBufferPoolHold
+rNsPUCIqcESb1NED1xr04AAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+F8IdpATIL0CSxwuBBR71HgAA
+
+2
+
+dwFreeBufferPoolHold
+DWORD
+F8IdpATIL0CSxwuBBR71HgAA
+
+
+return
+pdkReturn
+void
+F8IdpATIL0CSxwuBBR71HgAA
+
+
+
+SetExtra
+rNsPUCIqcESb1NED1xr04AAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+WfS57xBtK0KpkWXHtYbhJAAA
+
+2
+
+pExtra
+PVOID
+WfS57xBtK0KpkWXHtYbhJAAA
+
+
+return
+pdkReturn
+void
+WfS57xBtK0KpkWXHtYbhJAAA
+
+
+
+GetSocketBufferSize
+rNsPUCIqcESb1NED1xr04AAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+1+abGFrwsUCjf4ddwKhhkwAA
+
+1
+
+return
+pdkReturn
+DWORD
+1+abGFrwsUCjf4ddwKhhkwAA
+
+
+
+GetKeepAliveTime
+rNsPUCIqcESb1NED1xr04AAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+hobqM1NX0US+XJW0vn9xsAAA
+
+1
+
+return
+pdkReturn
+DWORD
+hobqM1NX0US+XJW0vn9xsAAA
+
+
+
+GetKeepAliveInterval
+rNsPUCIqcESb1NED1xr04AAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+76xwRulW5UWszv+8CTgVOAAA
+
+1
+
+return
+pdkReturn
+DWORD
+76xwRulW5UWszv+8CTgVOAAA
+
+
+
+GetFreeBufferPoolSize
+rNsPUCIqcESb1NED1xr04AAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+6v1bjl9EjkS1MQ4AErwwjgAA
+
+1
+
+return
+pdkReturn
+DWORD
+6v1bjl9EjkS1MQ4AErwwjgAA
+
+
+
+GetFreeBufferPoolHold
+rNsPUCIqcESb1NED1xr04AAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+4byDgL/4nU+5Ri/VX5RnmQAA
+
+1
+
+return
+pdkReturn
+DWORD
+4byDgL/4nU+5Ri/VX5RnmQAA
+
+
+
+GetExtra
+rNsPUCIqcESb1NED1xr04AAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+EKN6QyrYA0uX2qMfahWTWQAA
+
+1
+
+return
+pdkReturn
+PVOID
+EKN6QyrYA0uX2qMfahWTWQAA
+
+
+
+CTcpClient
+UMLStandard
+create
+vkPrivate
+rNsPUCIqcESb1NED1xr04AAA
+1
+
+psoListener
+HH8IxhnEe02DYLKVHG2PFQAA
+HwLi+AyuiUa754Eutz2k5AAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+zFezEQ9xPkK/0POS3GJN3AAA
+
+
+
+
+CTcpClient
+UMLStandard
+destroy
+vkPrivate
+rNsPUCIqcESb1NED1xr04AAA
+
+
+
+CTcpPullAgent
+jvfBmo6uGkC61ckI99TMgAAA
+4
+91D3350Tx0G/REKMBgAVcgAA
+/1i+zUrJvEOaccA5WyubogAA
+1223ya+RA0+ICvNgzySMZgAA
+u0jv0auiuUeMCmshH1Lc/AAA
+2
+SWj0s9+zMUW6Sa0s98LfDgAA
+IDQB44Q61kudclcYwyYEMwAA
+4
+
+Fetch
+JJbEayVgmEyWvR4C1WYpsAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+Zd5pVcvt30yz6A/gXbfW/AAA
+
+4
+
+dwConnID
+Zd5pVcvt30yz6A/gXbfW/AAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+pData
+BYTE
+Zd5pVcvt30yz6A/gXbfW/AAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+zj0ZssKRBk+8OJuLyr+2WQAA
+
+
+
+iLength
+int
+Zd5pVcvt30yz6A/gXbfW/AAA
+
+
+return
+pdkReturn
+Zd5pVcvt30yz6A/gXbfW/AAA
+VQDDk4BU6UmBmig6SmOuoQAA
+
+
+
+Peek
+JJbEayVgmEyWvR4C1WYpsAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+KcPeQjykq0KpiMC/A6pQQwAA
+
+4
+
+dwConnID
+KcPeQjykq0KpiMC/A6pQQwAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+pData
+BYTE
+KcPeQjykq0KpiMC/A6pQQwAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+T3WXjYz9Q0ODShUTa0iTlgAA
+
+
+
+iLength
+int
+KcPeQjykq0KpiMC/A6pQQwAA
+
+
+return
+pdkReturn
+KcPeQjykq0KpiMC/A6pQQwAA
+VQDDk4BU6UmBmig6SmOuoQAA
+
+
+
+CTcpPullAgent
+UMLStandard
+create
+vkPrivate
+JJbEayVgmEyWvR4C1WYpsAAA
+1
+
+psoListener
+bHjGpU8TVEaljiK4zrOw5wAA
+skl0Nm/UIUCTsqkUAIXmzAAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+1IzM6A2aLECcC/0wa1pI4QAA
+
+
+
+
+CTcpPullAgent
+UMLStandard
+destroy
+vkPrivate
+JJbEayVgmEyWvR4C1WYpsAAA
+
+
+
+CTcpPullClient
+jvfBmo6uGkC61ckI99TMgAAA
+4
+pHz4Yn9KW0u1EHHgf7i2PQAA
+buSF1GY2aUe2XvnVYnG63AAA
+XcKh1JxMxUOeZp3VWu5kfQAA
+HQnHkxQ1v0+FWvVWfOgiMgAA
+2
+t7BFiOV+U0+3Fzwd6nXwzgAA
+ZNw4OjQkUkmijjdgoAjX+gAA
+4
+
+Fetch
+dUFVpJ56j0WxczyDxsGS+gAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+6pYLE5ejyUOt4qpc0d5NMQAA
+
+3
+
+pData
+BYTE
+6pYLE5ejyUOt4qpc0d5NMQAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+J56gOs/VDUmPeZsS48dM0wAA
+
+
+
+iLength
+int
+6pYLE5ejyUOt4qpc0d5NMQAA
+
+
+return
+pdkReturn
+6pYLE5ejyUOt4qpc0d5NMQAA
+VQDDk4BU6UmBmig6SmOuoQAA
+
+
+
+Peek
+dUFVpJ56j0WxczyDxsGS+gAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+ANgjWVq5XkmV2+smTSXUdgAA
+
+3
+
+pData
+BYTE
+ANgjWVq5XkmV2+smTSXUdgAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+iHnpUUGwd02F376uArpcdgAA
+
+
+
+iLength
+int
+ANgjWVq5XkmV2+smTSXUdgAA
+
+
+return
+pdkReturn
+ANgjWVq5XkmV2+smTSXUdgAA
+VQDDk4BU6UmBmig6SmOuoQAA
+
+
+
+CTcpPullClient
+UMLStandard
+create
+vkPrivate
+dUFVpJ56j0WxczyDxsGS+gAA
+1
+
+psoListener
+CbYIiPZdTE2NK+6wqArbagAA
+HwLi+AyuiUa754Eutz2k5AAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+O/zc/hQ0+EOg3dj2SV2i6wAA
+
+
+
+
+CTcpPullClient
+UMLStandard
+destroy
+vkPrivate
+dUFVpJ56j0WxczyDxsGS+gAA
+
+
+
+CTcpPullServer
+jvfBmo6uGkC61ckI99TMgAAA
+4
+pH4m1vGfz0+s2Byn9+X25QAA
+Xd0IheJaBky2v052QS7rnAAA
+HnrKwuRzYUCnstMyLcCzqAAA
+fl4mh0o9/UmBWuN3JGYJHwAA
+2
+DLbR09fsFE6Bx8bzfHmD6AAA
+UT9syzbMZEyZsIIcEMpphAAA
+4
+
+Fetch
+5tmwPyb6D0Ki98vc8dVPhQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+8tjq927oxEy5KAfYp2WjHgAA
+
+4
+
+dwConnID
+8tjq927oxEy5KAfYp2WjHgAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+pData
+BYTE
+8tjq927oxEy5KAfYp2WjHgAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+CCPKQzHShkWpxv/S9OoM2QAA
+
+
+
+iLength
+int
+8tjq927oxEy5KAfYp2WjHgAA
+
+
+return
+pdkReturn
+8tjq927oxEy5KAfYp2WjHgAA
+VQDDk4BU6UmBmig6SmOuoQAA
+
+
+
+Peek
+5tmwPyb6D0Ki98vc8dVPhQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+SFhs11NkLkS7UCRXRseYMQAA
+
+4
+
+dwConnID
+SFhs11NkLkS7UCRXRseYMQAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+pData
+BYTE
+SFhs11NkLkS7UCRXRseYMQAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+AyetOz7XDEyaTE8NIVFNTQAA
+
+
+
+iLength
+int
+SFhs11NkLkS7UCRXRseYMQAA
+
+
+return
+pdkReturn
+SFhs11NkLkS7UCRXRseYMQAA
+VQDDk4BU6UmBmig6SmOuoQAA
+
+
+
+CTcpPullServer
+UMLStandard
+create
+vkPrivate
+5tmwPyb6D0Ki98vc8dVPhQAA
+1
+
+psoListener
+IfitnXZWGUyv3p7NgZt7MQAA
+h8NmVuBtVUWgcCSKCdxePgAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+tW7BVXw750CVMd+46YfU4gAA
+
+
+
+
+CTcpPullServer
+UMLStandard
+destroy
+vkPrivate
+5tmwPyb6D0Ki98vc8dVPhQAA
+
+
+
+CTcpServer
+jvfBmo6uGkC61ckI99TMgAAA
+8
+b5sh7cGyAEG5dKPNO5ax0wAA
+UZW5tMzLckaYSBfL3b99rAAA
+YiRb6U9yg0C7AYu3iGL3zAAA
+zp5oS4yR6EabvfVBnp6QggAA
+qxTRLB0cx0KH3i5id+UidgAA
+2ObYpQrBl0KbgwOj+6lQ/gAA
+06MGS8ZaakG5T9v5oESjuwAA
+mddI3tZC0EKl5vREk7K/bQAA
+1
+O5dkSXpa9UWV4M9yJ7QzIwAA
+3
+UT9syzbMZEyZsIIcEMpphAAA
+aQ1uf7mN+EuF/eGcASNwmgAA
+dYbvw1/fskefHEscBdgpZgAA
+50
+
+CTcpServer
+UMLStandard
+create
+vkPrivate
+gWn1z7ujyEu9Gf7LdRrPIAAA
+1
+
+psoListener
+HicZjKBDlkul3a45zfbrWwAA
+h8NmVuBtVUWgcCSKCdxePgAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+m0VjNIF00UeJ9xj8Mli6YAAA
+
+
+
+
+CTcpServer
+UMLStandard
+destroy
+vkPrivate
+gWn1z7ujyEu9Gf7LdRrPIAAA
+
+
+Start
+gWn1z7ujyEu9Gf7LdRrPIAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+WNuECjxTO0OV54fk7z5qgQAA
+
+3
+
+pdkReturn
+BOOL
+WNuECjxTO0OV54fk7z5qgQAA
+
+
+lpszBindAddress
+LPCTSTR
+WNuECjxTO0OV54fk7z5qgQAA
+
+
+usPort
+USHORT
+WNuECjxTO0OV54fk7z5qgQAA
+
+
+
+Stop
+gWn1z7ujyEu9Gf7LdRrPIAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+PSUfVIv7VUqY6IAJm44/OwAA
+
+1
+
+return
+pdkReturn
+BOOL
+PSUfVIv7VUqY6IAJm44/OwAA
+
+
+
+Send
+gWn1z7ujyEu9Gf7LdRrPIAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+Qa3sZx75kkeGpKq4oQxYCwAA
+
+5
+
+dwConnID
+Qa3sZx75kkeGpKq4oQxYCwAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+pBuffer
+BYTE
+Qa3sZx75kkeGpKq4oQxYCwAA
+2
+
+Cpp
+CppConst
+CppConst
+True
+YgnG9IYTiES//4wNL7CiUAAA
+
+
+Cpp
+CppPointer
+CppPointer
+*
+YgnG9IYTiES//4wNL7CiUAAA
+
+
+
+iLength
+int
+Qa3sZx75kkeGpKq4oQxYCwAA
+
+
+iOffset
+int
+Qa3sZx75kkeGpKq4oQxYCwAA
+
+
+return
+pdkReturn
+BOOL
+Qa3sZx75kkeGpKq4oQxYCwAA
+
+
+
+SendPackets
+gWn1z7ujyEu9Gf7LdRrPIAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+Xg8k8XUkX0uSMjg8Xh1lzQAA
+
+4
+
+dwConnID
+Xg8k8XUkX0uSMjg8Xh1lzQAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+pBuffers
+WSABUF
+Xg8k8XUkX0uSMjg8Xh1lzQAA
+1
+
+Cpp
+CppConst
+CppConst
+True
+dz+d2kpwWk2KKxRAFyeONQAA
+
+
+
+iCount
+int
+Xg8k8XUkX0uSMjg8Xh1lzQAA
+
+
+return
+pdkReturn
+BOOL
+Xg8k8XUkX0uSMjg8Xh1lzQAA
+
+
+
+SendSmallFile
+gWn1z7ujyEu9Gf7LdRrPIAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+voEgbJeJL06UjR81AqCJCwAA
+
+5
+
+dwConnID
+voEgbJeJL06UjR81AqCJCwAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+lpszFileName
+LPCTSTR
+voEgbJeJL06UjR81AqCJCwAA
+
+
+pHead
+LPWSABUF
+voEgbJeJL06UjR81AqCJCwAA
+1
+
+Cpp
+CppConst
+CppConst
+True
+va71ehMsLkuWlyY7owFAmwAA
+
+
+
+pTail
+LPWSABUF
+voEgbJeJL06UjR81AqCJCwAA
+1
+
+Cpp
+CppConst
+CppConst
+True
+iesXqVX0Jk69xBvbUAeCGwAA
+
+
+
+return
+pdkReturn
+BOOL
+voEgbJeJL06UjR81AqCJCwAA
+
+
+
+HasStarted
+gWn1z7ujyEu9Gf7LdRrPIAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+3P4DBT/2w0qzvxF6ErfvXwAA
+
+1
+
+return
+pdkReturn
+BOOL
+3P4DBT/2w0qzvxF6ErfvXwAA
+
+
+
+GetState
+gWn1z7ujyEu9Gf7LdRrPIAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+4lLln52JB0+y6UmWps2l2QAA
+
+1
+
+return
+pdkReturn
+4lLln52JB0+y6UmWps2l2QAA
+3KsfqnlMb0ieGw/IAO5hFQAA
+
+
+
+Disconnect
+gWn1z7ujyEu9Gf7LdRrPIAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+ZudCe9Se/kiozXsnycfrOgAA
+
+3
+
+dwConnID
+ZudCe9Se/kiozXsnycfrOgAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+bForce
+BOOL
+ZudCe9Se/kiozXsnycfrOgAA
+
+
+return
+pdkReturn
+BOOL
+ZudCe9Se/kiozXsnycfrOgAA
+
+
+
+DisconnectLongConnections
+gWn1z7ujyEu9Gf7LdRrPIAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+bxl6cH2dS0ShdTXysP5sZAAA
+
+3
+
+dwPeriod
+DWORD
+bxl6cH2dS0ShdTXysP5sZAAA
+
+
+bForce
+BOOL
+bxl6cH2dS0ShdTXysP5sZAAA
+
+
+return
+pdkReturn
+BOOL
+bxl6cH2dS0ShdTXysP5sZAAA
+
+
+
+DisconnectSilenceConnections
+gWn1z7ujyEu9Gf7LdRrPIAAA
+3
+
+pdkReturn
+BOOL
+da6aw9lovUWsafF1lyOfUgAA
+
+
+dwPeriod
+DWORD
+da6aw9lovUWsafF1lyOfUgAA
+
+
+bForce
+BOOL
+da6aw9lovUWsafF1lyOfUgAA
+
+
+
+GetListenAddress
+gWn1z7ujyEu9Gf7LdRrPIAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+bab2ob9uq0miNrVxXSnE8QAA
+
+4
+
+lpszAddress
+TCHAR
+bab2ob9uq0miNrVxXSnE8QAA
+
+
+iAddressLen
+int
+bab2ob9uq0miNrVxXSnE8QAA
+1
+
+Cpp
+CppPointer
+CppPointer
+&
+P4tGl06gY0GjYF4QZiSgmQAA
+
+
+
+usPort
+USHORT
+bab2ob9uq0miNrVxXSnE8QAA
+1
+
+Cpp
+CppPointer
+CppPointer
+&
++dzmgJA/cEis65UtkNrr+AAA
+
+
+
+return
+pdkReturn
+BOOL
+bab2ob9uq0miNrVxXSnE8QAA
+
+
+
+GetLocalAddress
+gWn1z7ujyEu9Gf7LdRrPIAAA
+5
+
+pdkReturn
+BOOL
+e1R6DrhGP0SAoD3Ou6JLoQAA
+
+
+dwConnID
+e1R6DrhGP0SAoD3Ou6JLoQAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+lpszAddress
+TCHAR
+e1R6DrhGP0SAoD3Ou6JLoQAA
+
+
+iAddressLen
+int
+e1R6DrhGP0SAoD3Ou6JLoQAA
+
+
+usPort
+USHORT
+e1R6DrhGP0SAoD3Ou6JLoQAA
+
+
+
+GetRemoteAddress
+gWn1z7ujyEu9Gf7LdRrPIAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+HGusc9p4aU+/j0G3p11t4gAA
+
+5
+
+dwConnID
+HGusc9p4aU+/j0G3p11t4gAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+lpszAddress
+TCHAR
+HGusc9p4aU+/j0G3p11t4gAA
+
+
+iAddressLen
+int
+HGusc9p4aU+/j0G3p11t4gAA
+1
+
+Cpp
+CppPointer
+CppPointer
+&
+1c8J5/6oLEWhIXx4UMUmFwAA
+
+
+
+usPort
+USHORT
+HGusc9p4aU+/j0G3p11t4gAA
+1
+
+Cpp
+CppPointer
+CppPointer
+&
+MwI5/wHU1k6nNhe+1FlJoAAA
+
+
+
+return
+pdkReturn
+BOOL
+HGusc9p4aU+/j0G3p11t4gAA
+
+
+
+GetPendingDataLength
+gWn1z7ujyEu9Gf7LdRrPIAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+5enMiFrhpkiNU531KDOX/QAA
+
+3
+
+dwConnID
+5enMiFrhpkiNU531KDOX/QAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+iPending
+int
+5enMiFrhpkiNU531KDOX/QAA
+1
+
+Cpp
+CppPointer
+CppPointer
+&
+9X/b1+6z2kW05/IbJ+tkKgAA
+
+
+
+return
+pdkReturn
+BOOL
+5enMiFrhpkiNU531KDOX/QAA
+
+
+
+GetConnectionCount
+gWn1z7ujyEu9Gf7LdRrPIAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+98cGDEFsZ0208oMr9tVrMgAA
+
+1
+
+return
+pdkReturn
+DWORD
+98cGDEFsZ0208oMr9tVrMgAA
+
+
+
+GetAllConnectionIDs
+gWn1z7ujyEu9Gf7LdRrPIAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+1H+gT//0/0WQwZ2jVWDzggAA
+
+3
+
+pIDs
+1H+gT//0/0WQwZ2jVWDzggAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+dwCount
+DWORD
+1H+gT//0/0WQwZ2jVWDzggAA
+1
+
+Cpp
+CppPointer
+CppPointer
+&
+ojL1tzU6qEaOS3pvKi6P1AAA
+
+
+
+return
+pdkReturn
+BOOL
+1H+gT//0/0WQwZ2jVWDzggAA
+
+
+
+GetConnectPeriod
+gWn1z7ujyEu9Gf7LdRrPIAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+E9WaC1aE+kiRmbmsTe+UPgAA
+
+3
+
+dwConnID
+E9WaC1aE+kiRmbmsTe+UPgAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+dwPeriod
+DWORD
+E9WaC1aE+kiRmbmsTe+UPgAA
+1
+
+Cpp
+CppPointer
+CppPointer
+&
+7X1Uj1YsWk2xAt9Xfi5uGgAA
+
+
+
+return
+pdkReturn
+BOOL
+E9WaC1aE+kiRmbmsTe+UPgAA
+
+
+
+GetSilencePeriod
+gWn1z7ujyEu9Gf7LdRrPIAAA
+3
+
+pdkReturn
+BOOL
+xFUPIaEZGUyGgZCCCAhAcgAA
+
+
+dwConnID
+xFUPIaEZGUyGgZCCCAhAcgAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+dwPeriod
+DWORD
+xFUPIaEZGUyGgZCCCAhAcgAA
+
+
+
+GetLastError
+gWn1z7ujyEu9Gf7LdRrPIAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+J6pe/JR6f0+OL+tlZiq8nQAA
+
+1
+
+return
+pdkReturn
+J6pe/JR6f0+OL+tlZiq8nQAA
+R9EXi7T78E6Gt882nRMyDwAA
+
+
+
+GetLastErrorDesc
+gWn1z7ujyEu9Gf7LdRrPIAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+6QItk0+fhki3/lXH5AvyigAA
+
+1
+
+return
+pdkReturn
+LPCTSTR
+6QItk0+fhki3/lXH5AvyigAA
+
+
+
+SetConnectionExtra
+gWn1z7ujyEu9Gf7LdRrPIAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+mtzoTUHVJkG9ujUoG4CTOwAA
+
+3
+
+dwConnID
+mtzoTUHVJkG9ujUoG4CTOwAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+pExtra
+PVOID
+mtzoTUHVJkG9ujUoG4CTOwAA
+
+
+return
+pdkReturn
+BOOL
+mtzoTUHVJkG9ujUoG4CTOwAA
+
+
+
+GetConnectionExtra
+gWn1z7ujyEu9Gf7LdRrPIAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+yuoDnIFJxUqeZBpzSlUtGwAA
+
+3
+
+dwConnID
+yuoDnIFJxUqeZBpzSlUtGwAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+ppExtra
+PVOID
+yuoDnIFJxUqeZBpzSlUtGwAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+9gEOcpiaHkS5bu551ImwmAAA
+
+
+
+return
+pdkReturn
+BOOL
+yuoDnIFJxUqeZBpzSlUtGwAA
+
+
+
+SetSendPolicy
+gWn1z7ujyEu9Gf7LdRrPIAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+i2AR5hxEb0ugpJYc+CQRXAAA
+
+2
+
+enSendPolicy
+i2AR5hxEb0ugpJYc+CQRXAAA
+p4RvBvwp3kOxyo/4mj2ZKwAA
+
+
+return
+pdkReturn
+void
+i2AR5hxEb0ugpJYc+CQRXAAA
+
+
+
+SetMarkSilence
+gWn1z7ujyEu9Gf7LdRrPIAAA
+2
+
+pdkReturn
+void
+ZP0sZjpgOkOEnlHkczpKKgAA
+
+
+bMarkSilence
+BOOL
+ZP0sZjpgOkOEnlHkczpKKgAA
+
+
+
+IsMarkSilence
+gWn1z7ujyEu9Gf7LdRrPIAAA
+1
+
+pdkReturn
+BOOL
+Qs0Hp3qbY0KUonjBPBZQuAAA
+
+
+
+SetWorkerThreadCount
+gWn1z7ujyEu9Gf7LdRrPIAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
++fKMpf0aSUirUgyZMTGBSwAA
+
+2
+
+dwWorkerThreadCount
+DWORD
++fKMpf0aSUirUgyZMTGBSwAA
+
+
+return
+pdkReturn
+void
++fKMpf0aSUirUgyZMTGBSwAA
+
+
+
+SetSocketListenQueue
+gWn1z7ujyEu9Gf7LdRrPIAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+SExY330NS02NgiVI7+JoMgAA
+
+2
+
+dwSocketListenQueue
+DWORD
+SExY330NS02NgiVI7+JoMgAA
+
+
+return
+pdkReturn
+void
+SExY330NS02NgiVI7+JoMgAA
+
+
+
+SetAcceptSocketCount
+gWn1z7ujyEu9Gf7LdRrPIAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+ncjAYEgC8USbMG0ddB7L5wAA
+
+2
+
+dwAcceptSocketCount
+DWORD
+ncjAYEgC8USbMG0ddB7L5wAA
+
+
+return
+pdkReturn
+void
+ncjAYEgC8USbMG0ddB7L5wAA
+
+
+
+SetSocketBufferSize
+gWn1z7ujyEu9Gf7LdRrPIAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+yMzlCNfHdEScjW2OJ1M4/AAA
+
+2
+
+dwSocketBufferSize
+DWORD
+yMzlCNfHdEScjW2OJ1M4/AAA
+
+
+return
+pdkReturn
+void
+yMzlCNfHdEScjW2OJ1M4/AAA
+
+
+
+SetFreeSocketObjLockTime
+gWn1z7ujyEu9Gf7LdRrPIAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+Nge/Hdjqg0GbGc98UvGyVgAA
+
+2
+
+dwFreeSocketObjLockTime
+DWORD
+Nge/Hdjqg0GbGc98UvGyVgAA
+
+
+return
+pdkReturn
+void
+Nge/Hdjqg0GbGc98UvGyVgAA
+
+
+
+SetFreeSocketObjPool
+gWn1z7ujyEu9Gf7LdRrPIAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+0aUKEtluIEqD5wx4cR4RswAA
+
+2
+
+dwFreeSocketObjPool
+DWORD
+0aUKEtluIEqD5wx4cR4RswAA
+
+
+return
+pdkReturn
+void
+0aUKEtluIEqD5wx4cR4RswAA
+
+
+
+SetFreeBufferObjPool
+gWn1z7ujyEu9Gf7LdRrPIAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+FHgTKiJJJEyK9en+2x2M8AAA
+
+2
+
+dwFreeBufferObjPool
+DWORD
+FHgTKiJJJEyK9en+2x2M8AAA
+
+
+return
+pdkReturn
+void
+FHgTKiJJJEyK9en+2x2M8AAA
+
+
+
+SetFreeSocketObjHold
+gWn1z7ujyEu9Gf7LdRrPIAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+E55zoB+p50GnLHOutUr2zwAA
+
+2
+
+dwFreeSocketObjHold
+DWORD
+E55zoB+p50GnLHOutUr2zwAA
+
+
+return
+pdkReturn
+void
+E55zoB+p50GnLHOutUr2zwAA
+
+
+
+SetFreeBufferObjHold
+gWn1z7ujyEu9Gf7LdRrPIAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+5rULNVIvxkOj5fOPHEmYCAAA
+
+2
+
+dwFreeBufferObjHold
+DWORD
+5rULNVIvxkOj5fOPHEmYCAAA
+
+
+return
+pdkReturn
+void
+5rULNVIvxkOj5fOPHEmYCAAA
+
+
+
+SetKeepAliveTime
+gWn1z7ujyEu9Gf7LdRrPIAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+8A5JZLJU4EKE6PZSBa1JVwAA
+
+2
+
+dwKeepAliveTime
+DWORD
+8A5JZLJU4EKE6PZSBa1JVwAA
+
+
+return
+pdkReturn
+void
+8A5JZLJU4EKE6PZSBa1JVwAA
+
+
+
+SetKeepAliveInterval
+gWn1z7ujyEu9Gf7LdRrPIAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+njKp69GCz025yL6sXubKVQAA
+
+2
+
+dwKeepAliveInterval
+DWORD
+njKp69GCz025yL6sXubKVQAA
+
+
+return
+pdkReturn
+void
+njKp69GCz025yL6sXubKVQAA
+
+
+
+GetSendPolicy
+gWn1z7ujyEu9Gf7LdRrPIAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+riEuS0bzp0yO0nzoKjWV2gAA
+
+1
+
+return
+pdkReturn
+riEuS0bzp0yO0nzoKjWV2gAA
+p4RvBvwp3kOxyo/4mj2ZKwAA
+
+
+
+GetWorkerThreadCount
+gWn1z7ujyEu9Gf7LdRrPIAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+jbMxTClSLUaCjYTt40yPDwAA
+
+1
+
+return
+pdkReturn
+DWORD
+jbMxTClSLUaCjYTt40yPDwAA
+
+
+
+GetSocketListenQueue
+gWn1z7ujyEu9Gf7LdRrPIAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+eKGTZ+RPZ0Ss89HiQrobzgAA
+
+1
+
+return
+pdkReturn
+DWORD
+eKGTZ+RPZ0Ss89HiQrobzgAA
+
+
+
+GetAcceptSocketCount
+gWn1z7ujyEu9Gf7LdRrPIAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+Vx3+1yqd40qlorW55XK9lQAA
+
+1
+
+return
+pdkReturn
+DWORD
+Vx3+1yqd40qlorW55XK9lQAA
+
+
+
+GetSocketBufferSize
+gWn1z7ujyEu9Gf7LdRrPIAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+8O3Qx26yyU24lcOdwSzEwwAA
+
+1
+
+return
+pdkReturn
+DWORD
+8O3Qx26yyU24lcOdwSzEwwAA
+
+
+
+GetFreeSocketObjLockTime
+gWn1z7ujyEu9Gf7LdRrPIAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+UQuO/yXPpU+DxpN0tmv1LAAA
+
+1
+
+return
+pdkReturn
+DWORD
+UQuO/yXPpU+DxpN0tmv1LAAA
+
+
+
+GetFreeSocketObjPool
+gWn1z7ujyEu9Gf7LdRrPIAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+hPVCc5OGBUq31Xm+Jrj1SwAA
+
+1
+
+return
+pdkReturn
+DWORD
+hPVCc5OGBUq31Xm+Jrj1SwAA
+
+
+
+GetFreeBufferObjPool
+gWn1z7ujyEu9Gf7LdRrPIAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+bOV+KRWj2kma45eDcmjCwgAA
+
+1
+
+return
+pdkReturn
+DWORD
+bOV+KRWj2kma45eDcmjCwgAA
+
+
+
+GetFreeSocketObjHold
+gWn1z7ujyEu9Gf7LdRrPIAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+o0UvM9u6AkyUqa/ncC+5/QAA
+
+1
+
+return
+pdkReturn
+DWORD
+o0UvM9u6AkyUqa/ncC+5/QAA
+
+
+
+GetFreeBufferObjHold
+gWn1z7ujyEu9Gf7LdRrPIAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+Fkcm0tDQJk2Bx6tGsXzyfwAA
+
+1
+
+return
+pdkReturn
+DWORD
+Fkcm0tDQJk2Bx6tGsXzyfwAA
+
+
+
+GetKeepAliveTime
+gWn1z7ujyEu9Gf7LdRrPIAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+MF0ti+aW+Ei/jomjMk92KQAA
+
+1
+
+return
+pdkReturn
+DWORD
+MF0ti+aW+Ei/jomjMk92KQAA
+
+
+
+GetKeepAliveInterval
+gWn1z7ujyEu9Gf7LdRrPIAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+EGoeJjga2UKOA4Q9Pky91QAA
+
+1
+
+return
+pdkReturn
+DWORD
+EGoeJjga2UKOA4Q9Pky91QAA
+
+
+
+
+CUdpCast
+jvfBmo6uGkC61ckI99TMgAAA
+4
+19i0QowlNkm9OgeAWSgS4wAA
+/AI6I93qBU6Dgo5pPu5AvwAA
+437lb/H8rkK+pp5JkdAQgAAA
+FUkNog+BvkaMSCSFGgVRRwAA
+1
+Mrk3QXUHNk2R1/cHV9/5pAAA
+30
+
+Start
+ukpy8IZAy0KEameLGY9mtQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+s+EMwnAUekS+sLJVWEA3ygAA
+
+5
+
+pdkReturn
+BOOL
+s+EMwnAUekS+sLJVWEA3ygAA
+
+
+lpszRemoteAddress
+LPCTSTR
+s+EMwnAUekS+sLJVWEA3ygAA
+
+
+usPort
+USHORT
+s+EMwnAUekS+sLJVWEA3ygAA
+
+
+bAsyncConnect
+BOOL
+s+EMwnAUekS+sLJVWEA3ygAA
+
+
+lpszBindAddress
+LPCTSTR
+s+EMwnAUekS+sLJVWEA3ygAA
+
+
+
+Stop
+ukpy8IZAy0KEameLGY9mtQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+BRqxpPnJB02Z7yNhe5WLlgAA
+
+1
+
+return
+pdkReturn
+BOOL
+BRqxpPnJB02Z7yNhe5WLlgAA
+
+
+
+Send
+ukpy8IZAy0KEameLGY9mtQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+ZKwCOozZGU2U3e4J0sZm/AAA
+
+4
+
+pBuffer
+BYTE
+ZKwCOozZGU2U3e4J0sZm/AAA
+2
+
+Cpp
+CppConst
+CppConst
+True
+Gri9o6KcbkaavMrAe6YZDAAA
+
+
+Cpp
+CppPointer
+CppPointer
+*
+Gri9o6KcbkaavMrAe6YZDAAA
+
+
+
+iLength
+int
+ZKwCOozZGU2U3e4J0sZm/AAA
+
+
+iOffset
+int
+ZKwCOozZGU2U3e4J0sZm/AAA
+
+
+return
+pdkReturn
+BOOL
+ZKwCOozZGU2U3e4J0sZm/AAA
+
+
+
+SendPackets
+ukpy8IZAy0KEameLGY9mtQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+/BCbW0oDoE21y44ENIBWEgAA
+
+3
+
+pBuffers
+WSABUF
+/BCbW0oDoE21y44ENIBWEgAA
+1
+
+Cpp
+CppConst
+CppConst
+True
+JNk1hyTzqUSAyxMA6ZehsgAA
+
+
+
+iCount
+int
+/BCbW0oDoE21y44ENIBWEgAA
+
+
+return
+pdkReturn
+BOOL
+/BCbW0oDoE21y44ENIBWEgAA
+
+
+
+HasStarted
+ukpy8IZAy0KEameLGY9mtQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+Pb6paLdxBUmwv1LwvOSuyQAA
+
+1
+
+return
+pdkReturn
+BOOL
+Pb6paLdxBUmwv1LwvOSuyQAA
+
+
+
+GetState
+ukpy8IZAy0KEameLGY9mtQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+BW3q+IxsSkqKTi2HASdcuAAA
+
+1
+
+return
+pdkReturn
+BW3q+IxsSkqKTi2HASdcuAAA
+3KsfqnlMb0ieGw/IAO5hFQAA
+
+
+
+GetConnectionID
+ukpy8IZAy0KEameLGY9mtQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+hfOGgSAI5kGonyA1fDaxJwAA
+
+1
+
+return
+pdkReturn
+hfOGgSAI5kGonyA1fDaxJwAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+
+GetLocalAddress
+ukpy8IZAy0KEameLGY9mtQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+CNfYEnKVOkiRNm/bqkhS/gAA
+
+4
+
+lpszAddress
+TCHAR
+CNfYEnKVOkiRNm/bqkhS/gAA
+
+
+iAddressLen
+int
+CNfYEnKVOkiRNm/bqkhS/gAA
+1
+
+Cpp
+CppPointer
+CppPointer
+&
+fI4gwHeX7USmxxEEvQmNvAAA
+
+
+
+usPort
+USHORT
+CNfYEnKVOkiRNm/bqkhS/gAA
+1
+
+Cpp
+CppPointer
+CppPointer
+&
+oFhL8l0vCUSl5jE5q7VfSQAA
+
+
+
+return
+pdkReturn
+BOOL
+CNfYEnKVOkiRNm/bqkhS/gAA
+
+
+
+GetPendingDataLength
+ukpy8IZAy0KEameLGY9mtQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+XylyyfePc0mZAaSowiSqxgAA
+
+2
+
+iPending
+int
+XylyyfePc0mZAaSowiSqxgAA
+1
+
+Cpp
+CppPointer
+CppPointer
+&
+PA5UCcn+1kKTYJgD4F/O3AAA
+
+
+
+return
+pdkReturn
+BOOL
+XylyyfePc0mZAaSowiSqxgAA
+
+
+
+GetLastError
+ukpy8IZAy0KEameLGY9mtQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+aCa+NEE+HkuXuh2sgengYAAA
+
+1
+
+return
+pdkReturn
+aCa+NEE+HkuXuh2sgengYAAA
+R9EXi7T78E6Gt882nRMyDwAA
+
+
+
+GetLastErrorDesc
+ukpy8IZAy0KEameLGY9mtQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+sRAwmVO8ekK0uBQQXvvTDAAA
+
+1
+
+return
+pdkReturn
+LPCTSTR
+sRAwmVO8ekK0uBQQXvvTDAAA
+
+
+
+SetMaxDatagramSize
+ukpy8IZAy0KEameLGY9mtQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+lxI+T5gKnkGjPVmfm7ji+QAA
+
+2
+
+dwMaxDatagramSize
+DWORD
+lxI+T5gKnkGjPVmfm7ji+QAA
+
+
+return
+pdkReturn
+void
+lxI+T5gKnkGjPVmfm7ji+QAA
+
+
+
+SetFreeBufferPoolSize
+ukpy8IZAy0KEameLGY9mtQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+dpnyRE06okaoRqmS55GE7AAA
+
+2
+
+dwFreeBufferPoolSize
+DWORD
+dpnyRE06okaoRqmS55GE7AAA
+
+
+return
+pdkReturn
+void
+dpnyRE06okaoRqmS55GE7AAA
+
+
+
+SetFreeBufferPoolHold
+ukpy8IZAy0KEameLGY9mtQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+ZxJFhePYmEafWALwp7C/ewAA
+
+2
+
+dwFreeBufferPoolHold
+DWORD
+ZxJFhePYmEafWALwp7C/ewAA
+
+
+return
+pdkReturn
+void
+ZxJFhePYmEafWALwp7C/ewAA
+
+
+
+SetReuseAddress
+ukpy8IZAy0KEameLGY9mtQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+1biIWbHvkU+ufQyuNDUv5wAA
+
+2
+
+bReuseAddress
+BOOL
+1biIWbHvkU+ufQyuNDUv5wAA
+
+
+return
+pdkReturn
+void
+1biIWbHvkU+ufQyuNDUv5wAA
+
+
+
+SetCastMode
+ukpy8IZAy0KEameLGY9mtQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+BFDDJ3+amUS0VsVJmaI3JAAA
+
+2
+
+enCastMode
+BFDDJ3+amUS0VsVJmaI3JAAA
+6zImDSI92UG9tawjYrSv0AAA
+
+
+return
+pdkReturn
+void
+BFDDJ3+amUS0VsVJmaI3JAAA
+
+
+
+SetMultiCastTtl
+ukpy8IZAy0KEameLGY9mtQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+HiK7peKXAUaP2oWNKIbatQAA
+
+2
+
+iMCTtl
+int
+HiK7peKXAUaP2oWNKIbatQAA
+
+
+return
+pdkReturn
+void
+HiK7peKXAUaP2oWNKIbatQAA
+
+
+
+SetMultiCastLoop
+ukpy8IZAy0KEameLGY9mtQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+H/9A0sY+/0+tq31v58qkDQAA
+
+2
+
+bMCLoop
+BOOL
+H/9A0sY+/0+tq31v58qkDQAA
+
+
+return
+pdkReturn
+void
+H/9A0sY+/0+tq31v58qkDQAA
+
+
+
+SetExtra
+ukpy8IZAy0KEameLGY9mtQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+Kfcy4yTWhkixG+DpUCkTfgAA
+
+2
+
+pExtra
+PVOID
+Kfcy4yTWhkixG+DpUCkTfgAA
+
+
+return
+pdkReturn
+void
+Kfcy4yTWhkixG+DpUCkTfgAA
+
+
+
+GetMaxDatagramSize
+ukpy8IZAy0KEameLGY9mtQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+thoqGC8LREaKXi/aixk7xwAA
+
+1
+
+return
+pdkReturn
+DWORD
+thoqGC8LREaKXi/aixk7xwAA
+
+
+
+GetFreeBufferPoolSize
+ukpy8IZAy0KEameLGY9mtQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+xq34nllvVkyqsRo61UQugAAA
+
+1
+
+return
+pdkReturn
+DWORD
+xq34nllvVkyqsRo61UQugAAA
+
+
+
+GetFreeBufferPoolHold
+ukpy8IZAy0KEameLGY9mtQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+Ziy0lNNJFkyTRfVJ+A0oVwAA
+
+1
+
+return
+pdkReturn
+DWORD
+Ziy0lNNJFkyTRfVJ+A0oVwAA
+
+
+
+IsReuseAddress
+ukpy8IZAy0KEameLGY9mtQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+Od6wQJ/Az0ixAY/Et3QXsAAA
+
+1
+
+return
+pdkReturn
+BOOL
+Od6wQJ/Az0ixAY/Et3QXsAAA
+
+
+
+GetCastMode
+ukpy8IZAy0KEameLGY9mtQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+FIZHwyAcuEidT11YxBvWOQAA
+
+1
+
+return
+pdkReturn
+FIZHwyAcuEidT11YxBvWOQAA
+6zImDSI92UG9tawjYrSv0AAA
+
+
+
+GetMultiCastTtl
+ukpy8IZAy0KEameLGY9mtQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+PF0gqTRakUGwLeMAG0waxgAA
+
+1
+
+return
+pdkReturn
+int
+PF0gqTRakUGwLeMAG0waxgAA
+
+
+
+IsMultiCastLoop
+ukpy8IZAy0KEameLGY9mtQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+ituZO/fRNEq0SkbpGhXmCAAA
+
+1
+
+return
+pdkReturn
+BOOL
+ituZO/fRNEq0SkbpGhXmCAAA
+
+
+
+GetExtra
+ukpy8IZAy0KEameLGY9mtQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+SjwsjJESN0euap2zwtAkHAAA
+
+1
+
+return
+pdkReturn
+PVOID
+SjwsjJESN0euap2zwtAkHAAA
+
+
+
+GetRemoteAddress
+ukpy8IZAy0KEameLGY9mtQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+rGpDkEsf+kaM21gi2+CjUwAA
+
+4
+
+lpszAddress
+TCHAR
+rGpDkEsf+kaM21gi2+CjUwAA
+
+
+iAddressLen
+int
+rGpDkEsf+kaM21gi2+CjUwAA
+1
+
+Cpp
+CppPointer
+CppPointer
+&
+Xkn0TE6dck+W+g1we5IprwAA
+
+
+
+usPort
+USHORT
+rGpDkEsf+kaM21gi2+CjUwAA
+1
+
+Cpp
+CppPointer
+CppPointer
+&
+BnxFkA9j3k6jnIVqK9LMWQAA
+
+
+
+return
+pdkReturn
+BOOL
+rGpDkEsf+kaM21gi2+CjUwAA
+
+
+
+CUdpCast
+UMLStandard
+create
+vkPrivate
+ukpy8IZAy0KEameLGY9mtQAA
+1
+
+psoListener
+1AtPq7azIUSOBIkR8N8CGQAA
+r22NFz2+L0aq+kmESgCiYAAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+EyoF0ndo9kCFpkNwo8KVngAA
+
+
+
+
+CUdpCast
+UMLStandard
+destroy
+vkPrivate
+ukpy8IZAy0KEameLGY9mtQAA
+
+
+
+CUdpClient
+jvfBmo6uGkC61ckI99TMgAAA
+4
+c825HJK3kEKsHWC48ErTtwAA
+EpDVQXqw+kS1DDjafknYfAAA
+klA0bERhtU+pvNTIByNKQAAA
+8UpXJ0wJV0OrYQBWBniWYgAA
+1
+TevsU+ekCkCxrYsp/lugswAA
+25
+
+Start
+ecegk3x5sEKpNtWGALy6NAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+zIOyLoZDmkKv9Lcbf17k8gAA
+
+5
+
+pdkReturn
+BOOL
+zIOyLoZDmkKv9Lcbf17k8gAA
+
+
+lpszRemoteAddress
+LPCTSTR
+zIOyLoZDmkKv9Lcbf17k8gAA
+
+
+usPort
+USHORT
+zIOyLoZDmkKv9Lcbf17k8gAA
+
+
+bAsyncConnect
+BOOL
+zIOyLoZDmkKv9Lcbf17k8gAA
+
+
+lpszBindAddress
+LPCTSTR
+zIOyLoZDmkKv9Lcbf17k8gAA
+
+
+
+Stop
+ecegk3x5sEKpNtWGALy6NAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+tZCHj+FpEEusNlF3kdinfgAA
+
+1
+
+return
+pdkReturn
+BOOL
+tZCHj+FpEEusNlF3kdinfgAA
+
+
+
+Send
+ecegk3x5sEKpNtWGALy6NAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+w+sMdF9lt0qwnTiey9oImAAA
+
+4
+
+pBuffer
+BYTE
+w+sMdF9lt0qwnTiey9oImAAA
+2
+
+Cpp
+CppConst
+CppConst
+True
+jAdLbFphm0KG0yGNqjPc3gAA
+
+
+Cpp
+CppPointer
+CppPointer
+*
+jAdLbFphm0KG0yGNqjPc3gAA
+
+
+
+iLength
+int
+w+sMdF9lt0qwnTiey9oImAAA
+
+
+iOffset
+int
+w+sMdF9lt0qwnTiey9oImAAA
+
+
+return
+pdkReturn
+BOOL
+w+sMdF9lt0qwnTiey9oImAAA
+
+
+
+SendPackets
+ecegk3x5sEKpNtWGALy6NAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+p+CJ//jWcEOzgsf5TqGbCQAA
+
+3
+
+pBuffers
+WSABUF
+p+CJ//jWcEOzgsf5TqGbCQAA
+1
+
+Cpp
+CppConst
+CppConst
+True
+iwMxJu8yJkic9L9nxSpdeAAA
+
+
+
+iCount
+int
+p+CJ//jWcEOzgsf5TqGbCQAA
+
+
+return
+pdkReturn
+BOOL
+p+CJ//jWcEOzgsf5TqGbCQAA
+
+
+
+HasStarted
+ecegk3x5sEKpNtWGALy6NAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+3CKXDObB2EW5dFzW+bM8dQAA
+
+1
+
+return
+pdkReturn
+BOOL
+3CKXDObB2EW5dFzW+bM8dQAA
+
+
+
+GetState
+ecegk3x5sEKpNtWGALy6NAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+KVpcp5EDUE6dlTijnlHiYgAA
+
+1
+
+return
+pdkReturn
+KVpcp5EDUE6dlTijnlHiYgAA
+3KsfqnlMb0ieGw/IAO5hFQAA
+
+
+
+GetConnectionID
+ecegk3x5sEKpNtWGALy6NAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+r6e+GcFnwkS/Y/sA8VCBUgAA
+
+1
+
+return
+pdkReturn
+r6e+GcFnwkS/Y/sA8VCBUgAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+
+GetLocalAddress
+ecegk3x5sEKpNtWGALy6NAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+2CRjxruutE6+1ML89666ewAA
+
+4
+
+lpszAddress
+TCHAR
+2CRjxruutE6+1ML89666ewAA
+
+
+iAddressLen
+int
+2CRjxruutE6+1ML89666ewAA
+1
+
+Cpp
+CppPointer
+CppPointer
+&
+6prk4FpT00aGQECslZhIwwAA
+
+
+
+usPort
+USHORT
+2CRjxruutE6+1ML89666ewAA
+1
+
+Cpp
+CppPointer
+CppPointer
+&
+IRsxMMUfr0aW1f3jLxrElwAA
+
+
+
+return
+pdkReturn
+BOOL
+2CRjxruutE6+1ML89666ewAA
+
+
+
+GetPendingDataLength
+ecegk3x5sEKpNtWGALy6NAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+92GkqRAi0EmEJIRI75uXWQAA
+
+2
+
+iPending
+int
+92GkqRAi0EmEJIRI75uXWQAA
+1
+
+Cpp
+CppPointer
+CppPointer
+&
+9YsQZU6/4kKqr7m7dOIBSAAA
+
+
+
+return
+pdkReturn
+BOOL
+92GkqRAi0EmEJIRI75uXWQAA
+
+
+
+GetLastError
+ecegk3x5sEKpNtWGALy6NAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+l7gJX1gHeEOcRAiR/9Z1ZwAA
+
+1
+
+return
+pdkReturn
+l7gJX1gHeEOcRAiR/9Z1ZwAA
+R9EXi7T78E6Gt882nRMyDwAA
+
+
+
+GetLastErrorDesc
+ecegk3x5sEKpNtWGALy6NAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+q6Onhue/W0azrlq9g7mSxQAA
+
+1
+
+return
+pdkReturn
+LPCTSTR
+q6Onhue/W0azrlq9g7mSxQAA
+
+
+
+SetMaxDatagramSize
+ecegk3x5sEKpNtWGALy6NAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+4/QFkGQHzUCWxshLC9WWKwAA
+
+2
+
+dwMaxDatagramSize
+DWORD
+4/QFkGQHzUCWxshLC9WWKwAA
+
+
+return
+pdkReturn
+void
+4/QFkGQHzUCWxshLC9WWKwAA
+
+
+
+SetDetectAttempts
+ecegk3x5sEKpNtWGALy6NAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+FxCMhZYpnECCgD4xPI1RpgAA
+
+2
+
+dwDetectAttempts
+DWORD
+FxCMhZYpnECCgD4xPI1RpgAA
+
+
+return
+pdkReturn
+void
+FxCMhZYpnECCgD4xPI1RpgAA
+
+
+
+SetDetectInterval
+ecegk3x5sEKpNtWGALy6NAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+PMqAd26Oj0O0DDxvw6hKngAA
+
+2
+
+dwDetectInterval
+DWORD
+PMqAd26Oj0O0DDxvw6hKngAA
+
+
+return
+pdkReturn
+void
+PMqAd26Oj0O0DDxvw6hKngAA
+
+
+
+SetFreeBufferPoolSize
+ecegk3x5sEKpNtWGALy6NAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+jj8wNRbfAU6kkxOyHwoJIAAA
+
+2
+
+dwFreeBufferPoolSize
+DWORD
+jj8wNRbfAU6kkxOyHwoJIAAA
+
+
+return
+pdkReturn
+void
+jj8wNRbfAU6kkxOyHwoJIAAA
+
+
+
+SetFreeBufferPoolHold
+ecegk3x5sEKpNtWGALy6NAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+DRteDd5jGEuER7AFHvMcVAAA
+
+2
+
+dwFreeBufferPoolHold
+DWORD
+DRteDd5jGEuER7AFHvMcVAAA
+
+
+return
+pdkReturn
+void
+DRteDd5jGEuER7AFHvMcVAAA
+
+
+
+SetExtra
+ecegk3x5sEKpNtWGALy6NAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+Ayuf+gWpdUSaJOnTAH9B2QAA
+
+2
+
+pExtra
+PVOID
+Ayuf+gWpdUSaJOnTAH9B2QAA
+
+
+return
+pdkReturn
+void
+Ayuf+gWpdUSaJOnTAH9B2QAA
+
+
+
+GetMaxDatagramSize
+ecegk3x5sEKpNtWGALy6NAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+LgVX+Em2+ke7LPUBORGrGwAA
+
+1
+
+return
+pdkReturn
+DWORD
+LgVX+Em2+ke7LPUBORGrGwAA
+
+
+
+GetDetectAttempts
+ecegk3x5sEKpNtWGALy6NAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+gVv98hNni0y0K1VVeOPJMQAA
+
+1
+
+return
+pdkReturn
+DWORD
+gVv98hNni0y0K1VVeOPJMQAA
+
+
+
+GetDetectInterval
+ecegk3x5sEKpNtWGALy6NAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+5xwkob5Bm0Woy6v+QzPSdwAA
+
+1
+
+return
+pdkReturn
+DWORD
+5xwkob5Bm0Woy6v+QzPSdwAA
+
+
+
+GetFreeBufferPoolSize
+ecegk3x5sEKpNtWGALy6NAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+ICHiH/G9QEK2h9jwvl5FAgAA
+
+1
+
+return
+pdkReturn
+DWORD
+ICHiH/G9QEK2h9jwvl5FAgAA
+
+
+
+GetFreeBufferPoolHold
+ecegk3x5sEKpNtWGALy6NAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+iRtcG/ORF0203GIJo3qzFAAA
+
+1
+
+return
+pdkReturn
+DWORD
+iRtcG/ORF0203GIJo3qzFAAA
+
+
+
+GetExtra
+ecegk3x5sEKpNtWGALy6NAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+sfmmbu0NQ0K1WLLSswVHHgAA
+
+1
+
+return
+pdkReturn
+PVOID
+sfmmbu0NQ0K1WLLSswVHHgAA
+
+
+
+CUdpClient
+UMLStandard
+create
+vkPrivate
+ecegk3x5sEKpNtWGALy6NAAA
+1
+
+psoListener
+TcyApNTnqk+DJWA+cSg5CgAA
+/JHLRlaovkibrttO8nZPPgAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+fd40Q5EVIE+le0pAEDqLewAA
+
+
+
+
+CUdpClient
+UMLStandard
+destroy
+vkPrivate
+ecegk3x5sEKpNtWGALy6NAAA
+
+
+
+CUdpServer
+jvfBmo6uGkC61ckI99TMgAAA
+4
+bwCisxwrCEKKPJ3Eu3K44AAA
+jhA06x9mmES8g/q2bBvKqwAA
+EGyeYAZNvEmOFCpPS+ohJAAA
+P1GnNsXQ20GUwjGbj2RuQgAA
+1
+j09xKlrPNkS8/NZ3JXD5MwAA
+47
+
+CUdpServer
+UMLStandard
+create
+vkPrivate
+W+YbXZBJDU6NfEjOApatvwAA
+1
+
+psoListener
+D8ifRSgqUU+ta46XJbntLwAA
+ZMn2cmFZr0+GuJk5rQoyDgAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+xXvRk1+KjEC2XroCTRCe9AAA
+
+
+
+
+CUdpServer
+UMLStandard
+destroy
+vkPrivate
+W+YbXZBJDU6NfEjOApatvwAA
+
+
+Start
+W+YbXZBJDU6NfEjOApatvwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+V5lIUnsABkK514V2fZzY6wAA
+
+3
+
+pdkReturn
+BOOL
+V5lIUnsABkK514V2fZzY6wAA
+
+
+lpszBindAddress
+LPCTSTR
+V5lIUnsABkK514V2fZzY6wAA
+
+
+usPort
+USHORT
+V5lIUnsABkK514V2fZzY6wAA
+
+
+
+Stop
+W+YbXZBJDU6NfEjOApatvwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+Jlw2s/Uaz0m75V4w1X+2/AAA
+
+1
+
+return
+pdkReturn
+BOOL
+Jlw2s/Uaz0m75V4w1X+2/AAA
+
+
+
+Send
+W+YbXZBJDU6NfEjOApatvwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+no2kqiZ/5UK5S/xSHP6g8gAA
+
+5
+
+dwConnID
+no2kqiZ/5UK5S/xSHP6g8gAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+pBuffer
+BYTE
+no2kqiZ/5UK5S/xSHP6g8gAA
+2
+
+Cpp
+CppConst
+CppConst
+True
+VvNuGbd5CUioUSkCNV41+gAA
+
+
+Cpp
+CppPointer
+CppPointer
+*
+VvNuGbd5CUioUSkCNV41+gAA
+
+
+
+iLength
+int
+no2kqiZ/5UK5S/xSHP6g8gAA
+
+
+iOffset
+int
+no2kqiZ/5UK5S/xSHP6g8gAA
+
+
+return
+pdkReturn
+BOOL
+no2kqiZ/5UK5S/xSHP6g8gAA
+
+
+
+SendPackets
+W+YbXZBJDU6NfEjOApatvwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+Cpu3dWcxeU2vPC0nafcrEwAA
+
+4
+
+dwConnID
+Cpu3dWcxeU2vPC0nafcrEwAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+pBuffers
+WSABUF
+Cpu3dWcxeU2vPC0nafcrEwAA
+1
+
+Cpp
+CppConst
+CppConst
+True
+yJO4PkvqBk2ck5gYDFby4QAA
+
+
+
+iCount
+int
+Cpu3dWcxeU2vPC0nafcrEwAA
+
+
+return
+pdkReturn
+BOOL
+Cpu3dWcxeU2vPC0nafcrEwAA
+
+
+
+HasStarted
+W+YbXZBJDU6NfEjOApatvwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+ywlSsmVVrU2IL5R80v0WAQAA
+
+1
+
+return
+pdkReturn
+BOOL
+ywlSsmVVrU2IL5R80v0WAQAA
+
+
+
+GetState
+W+YbXZBJDU6NfEjOApatvwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+gbgFm9Cj5UiFIRMYaFGeEQAA
+
+1
+
+return
+pdkReturn
+gbgFm9Cj5UiFIRMYaFGeEQAA
+3KsfqnlMb0ieGw/IAO5hFQAA
+
+
+
+Disconnect
+W+YbXZBJDU6NfEjOApatvwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+hXPxs+F7aUSecehrerb89gAA
+
+3
+
+dwConnID
+hXPxs+F7aUSecehrerb89gAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+bForce
+BOOL
+hXPxs+F7aUSecehrerb89gAA
+
+
+return
+pdkReturn
+BOOL
+hXPxs+F7aUSecehrerb89gAA
+
+
+
+DisconnectLongConnections
+W+YbXZBJDU6NfEjOApatvwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+7+AHi+CNBECiCONGWUOnGwAA
+
+3
+
+dwPeriod
+DWORD
+7+AHi+CNBECiCONGWUOnGwAA
+
+
+bForce
+BOOL
+7+AHi+CNBECiCONGWUOnGwAA
+
+
+return
+pdkReturn
+BOOL
+7+AHi+CNBECiCONGWUOnGwAA
+
+
+
+DisconnectSilenceConnections
+W+YbXZBJDU6NfEjOApatvwAA
+3
+
+pdkReturn
+BOOL
+DwP9i6+skUaeeCQElWHsqQAA
+
+
+dwPeriod
+DWORD
+DwP9i6+skUaeeCQElWHsqQAA
+
+
+bForce
+BOOL
+DwP9i6+skUaeeCQElWHsqQAA
+
+
+
+GetListenAddress
+W+YbXZBJDU6NfEjOApatvwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+LMId/VDCCEu9lyaMMPntpQAA
+
+4
+
+lpszAddress
+TCHAR
+LMId/VDCCEu9lyaMMPntpQAA
+
+
+iAddressLen
+int
+LMId/VDCCEu9lyaMMPntpQAA
+1
+
+Cpp
+CppPointer
+CppPointer
+&
+yUvgRjyykEaGnEaRFfQWkQAA
+
+
+
+usPort
+USHORT
+LMId/VDCCEu9lyaMMPntpQAA
+1
+
+Cpp
+CppPointer
+CppPointer
+&
+Nf/iQXbgUEWmxssUuQCDJQAA
+
+
+
+return
+pdkReturn
+BOOL
+LMId/VDCCEu9lyaMMPntpQAA
+
+
+
+GetLocalAddress
+W+YbXZBJDU6NfEjOApatvwAA
+5
+
+pdkReturn
+BOOL
+/lenETd6RUeEYN30BelSogAA
+
+
+dwConnID
+/lenETd6RUeEYN30BelSogAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+lpszAddress
+TCHAR
+/lenETd6RUeEYN30BelSogAA
+
+
+iAddressLen
+int
+/lenETd6RUeEYN30BelSogAA
+
+
+usPort
+USHORT
+/lenETd6RUeEYN30BelSogAA
+
+
+
+GetRemoteAddress
+W+YbXZBJDU6NfEjOApatvwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+NuH1XXveUkm11bYVHQ7k9AAA
+
+5
+
+dwConnID
+NuH1XXveUkm11bYVHQ7k9AAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+lpszAddress
+TCHAR
+NuH1XXveUkm11bYVHQ7k9AAA
+
+
+iAddressLen
+int
+NuH1XXveUkm11bYVHQ7k9AAA
+1
+
+Cpp
+CppPointer
+CppPointer
+&
+f9MWFcvolUCvwVErXEVSbwAA
+
+
+
+usPort
+USHORT
+NuH1XXveUkm11bYVHQ7k9AAA
+1
+
+Cpp
+CppPointer
+CppPointer
+&
+VzTHfpQacEWEHJ0SNjm7rAAA
+
+
+
+return
+pdkReturn
+BOOL
+NuH1XXveUkm11bYVHQ7k9AAA
+
+
+
+GetPendingDataLength
+W+YbXZBJDU6NfEjOApatvwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+yGn1U0J5OE2ackx8nLy47wAA
+
+3
+
+dwConnID
+yGn1U0J5OE2ackx8nLy47wAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+iPending
+int
+yGn1U0J5OE2ackx8nLy47wAA
+1
+
+Cpp
+CppPointer
+CppPointer
+&
+C3P0R3s+Bkq3xVXzc906ZAAA
+
+
+
+return
+pdkReturn
+BOOL
+yGn1U0J5OE2ackx8nLy47wAA
+
+
+
+GetConnectionCount
+W+YbXZBJDU6NfEjOApatvwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+jeArLgFBQkuAsARHVPbldAAA
+
+1
+
+return
+pdkReturn
+DWORD
+jeArLgFBQkuAsARHVPbldAAA
+
+
+
+GetAllConnectionIDs
+W+YbXZBJDU6NfEjOApatvwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+QyTkJ1y0gkq6sdItFzUaHwAA
+
+3
+
+pIDs
+QyTkJ1y0gkq6sdItFzUaHwAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+dwCount
+DWORD
+QyTkJ1y0gkq6sdItFzUaHwAA
+1
+
+Cpp
+CppPointer
+CppPointer
+&
+h6aKqov8NE61OoApVgEBAgAA
+
+
+
+return
+pdkReturn
+BOOL
+QyTkJ1y0gkq6sdItFzUaHwAA
+
+
+
+GetConnectPeriod
+W+YbXZBJDU6NfEjOApatvwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+mQaNW2ycnEiO4gkpuBNjDAAA
+
+3
+
+dwConnID
+mQaNW2ycnEiO4gkpuBNjDAAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+dwPeriod
+DWORD
+mQaNW2ycnEiO4gkpuBNjDAAA
+1
+
+Cpp
+CppPointer
+CppPointer
+&
+h9Vlf9SWaEShtJRegwFK2gAA
+
+
+
+return
+pdkReturn
+BOOL
+mQaNW2ycnEiO4gkpuBNjDAAA
+
+
+
+GetSilencePeriod
+W+YbXZBJDU6NfEjOApatvwAA
+3
+
+pdkReturn
+BOOL
+kl+dFCyY9UaQpvgwLftQCQAA
+
+
+dwConnID
+kl+dFCyY9UaQpvgwLftQCQAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+dwPeriod
+DWORD
+kl+dFCyY9UaQpvgwLftQCQAA
+
+
+
+GetLastError
+W+YbXZBJDU6NfEjOApatvwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+TNfshbZlfU+l5iFZEGxweAAA
+
+1
+
+return
+pdkReturn
+TNfshbZlfU+l5iFZEGxweAAA
+R9EXi7T78E6Gt882nRMyDwAA
+
+
+
+GetLastErrorDesc
+W+YbXZBJDU6NfEjOApatvwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+2M1YnjnH60CSUcL8NjF8UgAA
+
+1
+
+return
+pdkReturn
+LPCTSTR
+2M1YnjnH60CSUcL8NjF8UgAA
+
+
+
+SetConnectionExtra
+W+YbXZBJDU6NfEjOApatvwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+lZOxp482bUCE/wkelwniEgAA
+
+3
+
+dwConnID
+lZOxp482bUCE/wkelwniEgAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+pExtra
+PVOID
+lZOxp482bUCE/wkelwniEgAA
+
+
+return
+pdkReturn
+BOOL
+lZOxp482bUCE/wkelwniEgAA
+
+
+
+GetConnectionExtra
+W+YbXZBJDU6NfEjOApatvwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+nmWJZNhXmE2NcOSdXZQulAAA
+
+3
+
+dwConnID
+nmWJZNhXmE2NcOSdXZQulAAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+ppExtra
+PVOID
+nmWJZNhXmE2NcOSdXZQulAAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+3hbHnmGUoE2wHMGzb90XuwAA
+
+
+
+return
+pdkReturn
+BOOL
+nmWJZNhXmE2NcOSdXZQulAAA
+
+
+
+SetSendPolicy
+W+YbXZBJDU6NfEjOApatvwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+oG/E4zVa70uUS7VtaPwp2wAA
+
+2
+
+enSendPolicy
+oG/E4zVa70uUS7VtaPwp2wAA
+p4RvBvwp3kOxyo/4mj2ZKwAA
+
+
+return
+pdkReturn
+void
+oG/E4zVa70uUS7VtaPwp2wAA
+
+
+
+SetMarkSilence
+W+YbXZBJDU6NfEjOApatvwAA
+2
+
+pdkReturn
+void
+W0LICNwwH0CBJaD776pyBwAA
+
+
+bMarkSilence
+BOOL
+W0LICNwwH0CBJaD776pyBwAA
+
+
+
+IsMarkSilence
+W+YbXZBJDU6NfEjOApatvwAA
+1
+
+pdkReturn
+BOOL
++GtCyW44AkyhhlJBsZqNBgAA
+
+
+
+SetWorkerThreadCount
+W+YbXZBJDU6NfEjOApatvwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+356sgNben0adz63c+AptuwAA
+
+2
+
+dwWorkerThreadCount
+DWORD
+356sgNben0adz63c+AptuwAA
+
+
+return
+pdkReturn
+void
+356sgNben0adz63c+AptuwAA
+
+
+
+SetFreeSocketObjLockTime
+W+YbXZBJDU6NfEjOApatvwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+QOJXMk1ZiUqOko/3phm99gAA
+
+2
+
+dwFreeSocketObjLockTime
+DWORD
+QOJXMk1ZiUqOko/3phm99gAA
+
+
+return
+pdkReturn
+void
+QOJXMk1ZiUqOko/3phm99gAA
+
+
+
+SetFreeSocketObjPool
+W+YbXZBJDU6NfEjOApatvwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+zTnCCuODdkqUMJjRKKx4AgAA
+
+2
+
+dwFreeSocketObjPool
+DWORD
+zTnCCuODdkqUMJjRKKx4AgAA
+
+
+return
+pdkReturn
+void
+zTnCCuODdkqUMJjRKKx4AgAA
+
+
+
+SetFreeBufferObjPool
+W+YbXZBJDU6NfEjOApatvwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+pPH+7+5rUUKFKEzMEEgKAAAA
+
+2
+
+dwFreeBufferObjPool
+DWORD
+pPH+7+5rUUKFKEzMEEgKAAAA
+
+
+return
+pdkReturn
+void
+pPH+7+5rUUKFKEzMEEgKAAAA
+
+
+
+SetFreeSocketObjHold
+W+YbXZBJDU6NfEjOApatvwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+Zu2/V9cN1kG7hpd0G5at9AAA
+
+2
+
+dwFreeSocketObjHold
+DWORD
+Zu2/V9cN1kG7hpd0G5at9AAA
+
+
+return
+pdkReturn
+void
+Zu2/V9cN1kG7hpd0G5at9AAA
+
+
+
+SetFreeBufferObjHold
+W+YbXZBJDU6NfEjOApatvwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+5pFEaYktg0yhGdty6wQYygAA
+
+2
+
+dwFreeBufferObjHold
+DWORD
+5pFEaYktg0yhGdty6wQYygAA
+
+
+return
+pdkReturn
+void
+5pFEaYktg0yhGdty6wQYygAA
+
+
+
+SetMaxDatagramSize
+W+YbXZBJDU6NfEjOApatvwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+mqEkH1ShrEefLMvsOtm94QAA
+
+2
+
+dwMaxDatagramSize
+DWORD
+mqEkH1ShrEefLMvsOtm94QAA
+
+
+return
+pdkReturn
+void
+mqEkH1ShrEefLMvsOtm94QAA
+
+
+
+SetPostReceiveCount
+W+YbXZBJDU6NfEjOApatvwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+gEY7IkqHq0qt9XjFLp0w+wAA
+
+2
+
+dwPostReceiveCount
+DWORD
+gEY7IkqHq0qt9XjFLp0w+wAA
+
+
+return
+pdkReturn
+void
+gEY7IkqHq0qt9XjFLp0w+wAA
+
+
+
+SetDetectAttempts
+W+YbXZBJDU6NfEjOApatvwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+H/n8La7u6UCaEKXZPoOGLgAA
+
+2
+
+dwDetectAttempts
+DWORD
+H/n8La7u6UCaEKXZPoOGLgAA
+
+
+return
+pdkReturn
+void
+H/n8La7u6UCaEKXZPoOGLgAA
+
+
+
+SetDetectInterval
+W+YbXZBJDU6NfEjOApatvwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+ZP/6aUbFXEKzLuDralQl/QAA
+
+2
+
+dwDetectInterval
+DWORD
+ZP/6aUbFXEKzLuDralQl/QAA
+
+
+return
+pdkReturn
+void
+ZP/6aUbFXEKzLuDralQl/QAA
+
+
+
+GetSendPolicy
+W+YbXZBJDU6NfEjOApatvwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+hEMV7R4Qqk+ZXAonll6vFgAA
+
+1
+
+return
+pdkReturn
+hEMV7R4Qqk+ZXAonll6vFgAA
+p4RvBvwp3kOxyo/4mj2ZKwAA
+
+
+
+GetWorkerThreadCount
+W+YbXZBJDU6NfEjOApatvwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+bZjMCld+OE+W8oMnZr7f4gAA
+
+1
+
+return
+pdkReturn
+DWORD
+bZjMCld+OE+W8oMnZr7f4gAA
+
+
+
+GetFreeSocketObjLockTime
+W+YbXZBJDU6NfEjOApatvwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+tofVgud1R0GX2wIXppIKbQAA
+
+1
+
+return
+pdkReturn
+DWORD
+tofVgud1R0GX2wIXppIKbQAA
+
+
+
+GetFreeSocketObjPool
+W+YbXZBJDU6NfEjOApatvwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+Kr/kejswmUSd298tenPZ3AAA
+
+1
+
+return
+pdkReturn
+DWORD
+Kr/kejswmUSd298tenPZ3AAA
+
+
+
+GetFreeBufferObjPool
+W+YbXZBJDU6NfEjOApatvwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+r00rl2MKRE27YyH9h2svGAAA
+
+1
+
+return
+pdkReturn
+DWORD
+r00rl2MKRE27YyH9h2svGAAA
+
+
+
+GetFreeSocketObjHold
+W+YbXZBJDU6NfEjOApatvwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+yDm/D0kDzkOIIK7eot1XVAAA
+
+1
+
+return
+pdkReturn
+DWORD
+yDm/D0kDzkOIIK7eot1XVAAA
+
+
+
+GetFreeBufferObjHold
+W+YbXZBJDU6NfEjOApatvwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+zXfIjMYGVEmJxJsJbFMbxwAA
+
+1
+
+return
+pdkReturn
+DWORD
+zXfIjMYGVEmJxJsJbFMbxwAA
+
+
+
+GetMaxDatagramSize
+W+YbXZBJDU6NfEjOApatvwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+xC8b1oS77UKHEne0jj7SzgAA
+
+1
+
+return
+pdkReturn
+DWORD
+xC8b1oS77UKHEne0jj7SzgAA
+
+
+
+GetPostReceiveCount
+W+YbXZBJDU6NfEjOApatvwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+LjE+Lnma802EZWcL1FKEfwAA
+
+1
+
+return
+pdkReturn
+DWORD
+LjE+Lnma802EZWcL1FKEfwAA
+
+
+
+GetDetectAttempts
+W+YbXZBJDU6NfEjOApatvwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+85mjXmu76kqaH/d89f0pfQAA
+
+1
+
+return
+pdkReturn
+DWORD
+85mjXmu76kqaH/d89f0pfQAA
+
+
+
+GetDetectInterval
+W+YbXZBJDU6NfEjOApatvwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+priYIVlXUkqJpWdiYmTOkwAA
+
+1
+
+return
+pdkReturn
+DWORD
+priYIVlXUkqJpWdiYmTOkwAA
+
+
+
+
+CONNID
+Cpp
+CppTypedef
+jvfBmo6uGkC61ckI99TMgAAA
+4
+MXVhp44nXE2Zyz2ZTeA7nAAA
+UI1zHaOwb0i+koDgk989YwAA
+mDpURrCz2UOaqNUVJLzTnQAA
+Pec6MHGcIkeNEzaV2GiamQAA
+1
+
+Cpp
+CppTypedef
+CppTypedefDefinition
+ULONG_PTR
+G8TfQngB3UemVJWZg5KbggAA
+
+96
+Wdlbg4usN0qTDZTKnnzz/gAA
+N2w5ow4KHk6m6v6crMwscwAA
+C70oqA4dmUqydxL0MdYgIgAA
+nSGxKnb2ik6mNllfkYJPRQAA
+x9futDv2W0OYznm1lLACSwAA
+qaX3MwH6qE+JLuXfT0PiSQAA
+Zbj9PXnwa0CpyjR03Yo/1wAA
+UdJbPNeyFUKgOIdtDRLfGwAA
+zb3/+mQ3pkmVjnvOtdbXKQAA
+PPJf1snCfkyrzPZxG8v5PAAA
+QZoNzAXj8km7ncXj2+IFmgAA
+kq7MNRJ8eUezjVOCApp/rAAA
+xxVYAN+F3kmPAxyVbyDdrwAA
+CTeC9mW7xky4U+BQo15oTQAA
+r3xIx2J58EG3f2KedMHEqgAA
+lFJkBt0bcUCs2GYIDQUIewAA
+e2p/JMNuUUOUgmYKRCWUFAAA
+NWMl+/HtFUiomW1KQlxfwQAA
+GGyja/ZOXkqUbOk+5lhSYQAA
+6y/ffQxOREesN08Iq4JkpgAA
+qflysDF530ejLVS4JfugVAAA
+Yum1OlPEt0S5Ak/0O2tPoAAA
+PNCACarP0kqSZchxngLXXAAA
+l9d06eLmGUmt8ehgftXXJQAA
+fZgfPfmZ0kWFHkLtpuzOlwAA
+WSJXyzwZ9EKHdnIClaS4pAAA
+RAUm9vbotECXqoARKDRt4gAA
+qzSAepQJjUOv5stmf5aBDwAA
+TA+9YdIfyEyO22ILr7x7mQAA
+a+NNlT35IkW3hP2u6nHO8wAA
+oEqCBUc6r0mr7bBPzsO2DgAA
+K6RisZHnIEiG9VZ3ElSTNgAA
+06q418O6FEOlWfOa7XazAwAA
+6CPh/dT0NkGnyhSYKUxe4gAA
+2iuz603QB0a9uPY25LQy0QAA
+AAf1rZcXTkeS7fEaJKHDZgAA
+51I86s1DOke3qJOgWgqVLAAA
+vODfXnG5ZkmzGrpqYNUG2wAA
+SncxM0JmCESwiLc8dat8cQAA
+qjklpLt7nEqyg18zWQpOfAAA
+hhvGUgN+XkKeKht7VmDa8AAA
+PR8/vDBp6Ei24n21q0Qe/QAA
+1DW1M42OnEekQHHaaHqO9wAA
+eF4RBAlr6UCkWfm6uQwUaAAA
+oSdysn7H9ESnkTF1DAYJbwAA
+UAh7pE0ELEesQ5ThcfXGywAA
+42B/4OU3EEWId/DxPeloAgAA
+Emuk13E5wEiY2U4qcIPozQAA
+g1nJZ0b+Tkirr6fhVP4jsQAA
+7BJAhk7VMkewT16Uyq0p2QAA
+VuPbvrJAOk2PrHp33sZFIQAA
+Zl5BhI61+06rfnfjl62+HgAA
+rBvKrEwkqkybw98VhI4gTwAA
+3ewJV7UAe0GumcKUwiNSQQAA
+TAerpmyu/Ei1ACCr9D3WDAAA
+fm2p2iDQaEicTX/UpTmEKAAA
+d9AlDlD2D0ahlv0rJcYC+wAA
+ihOfWbq61U+IXRxh+s6ZewAA
+7+b/W0LXPkW7BwT8KKHcDAAA
+NB+z9SNhHkGKDmbeKq+uvgAA
+WHQx0D9xk0C97xe/Ep8JFgAA
+ZfFoJEf+O0GTU75AhYOrtQAA
+4qi9+jECo06Hhot1sslYpQAA
+sNBCscxV9027vg5CbNb91gAA
+vHNohVZUb0ywlTxUUYZ7VAAA
+B+wTGesur0SSGdNpbmTmdwAA
+iW8eFBuhZkG1Dm2tbSpy5gAA
+CO4GrmQdakOtDHKXAaCcDQAA
+u57IlKOdzkW8rhlQuTBzWwAA
+8cekXGl0GEucId2K41Cl9wAA
+aDE1RwH36kafHTUy2XXdGQAA
+b33D5qBDNkuWJmD5QTOjcQAA
+ftD8uqizQ0W63U4pFgx7mwAA
+9JsRHyLb8ki45KaRqc5w/gAA
+XfUlO3vayEq5xoqsZ3WP1QAA
+riSvTRwZqEyCBlrsKEXjFAAA
+3QxM4aKQt0KpjtVQ+rsoFAAA
+K768ob1efE6KQdpEn/n1hQAA
+qGuTiizUo066hg7l4e7HUwAA
+geQtoLdOK0eqVli4raUElAAA
+9swYyf06XECXOjgGYBx0UQAA
+wkIw6QaFP0qDsvDSWMKNPAAA
+jNTrEIVDcUCIPpvPnWYWuQAA
+JwoQP56bGUOBhMeh7uKVhgAA
+yW49v//LYUiNgkiOfHetbAAA
+DCw6iqQ14kCHiPXmCBHIXQAA
+3oIcc7vO8UqYAMrZ8TQ8ugAA
+quMjKZ6INE6m4AEmqeoQ4AAA
+CPU18g7ktkekxBeGjc5Q7AAA
+uFhdgbRhqkKuVt27lDlhswAA
+CQ1zjtLoaEilRlLmWlDccAAA
+rLnx+0UUFkmVfh4pcR6gOwAA
+rpdkh412OkqIDXJrsHTQKwAA
+QDhy/s2v5Uy5TQ/x0uPPtgAA
+xj7TBVUsl0mvbg4D2vnd2gAA
+rsKd0Gtz3ESvzO70jijmzgAA
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+SX/KZkmsDk+r8uamHH4ZLgAA
+9FsvxqZjkEyUqc9w2NDcQgAA
+8
+ou+qiPZb2EWcpS5YuaAwNgAA
+c38pT9MjCEWSk2UJzMhDaAAA
+KZMw+i1FXkGzXXh8F7CFaAAA
+JBLfVaW/40qfMN47OJAUFQAA
+XBwdnbOUeUGy7Kw2Hi7UwgAA
+IMSt3e4yckqn1oIeq3HFYAAA
+c+RDHN9iU0CUxRQpNBd9lQAA
+Ggx66EfEAkKlk2yZzolJPAAA
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+h8NmVuBtVUWgcCSKCdxePgAA
+SX/KZkmsDk+r8uamHH4ZLgAA
+8
+goQrd740yESQtkn3nn8pxQAA
+IETzQSFXh069+tMk+8NG8gAA
+djwqZk3PdUuU9P4Ud7cKBQAA
+Euz2bhKUV06cot782+K5vwAA
+EfIZpecC8kCNpGkl/RSoIQAA
+Mr8LifDa0UqZKMVYf8ErAQAA
+goz0IiZTkUWgDLmFUZjdGQAA
+l2mwYAdq2Uud3WNUAAgSYAAA
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+nhHxAccKxEm2g0sPkFAnhwAA
+h8NmVuBtVUWgcCSKCdxePgAA
+4
+j7Q4Ps/iSkW6kizmnaitXgAA
+PTKwj4q/I0ShpL3RnSgfCQAA
+nAMenYQw5Uy+UEnB2RnwvQAA
+ZQSqfFtmkE2jj946BhCgDwAA
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+9yFTOYs1vEa8s69V7MjeDgAA
+nhHxAccKxEm2g0sPkFAnhwAA
+4
+1rNVwRf2vEGRGeC8SwdAEAAA
+y/L9qKYTQ0+eWsJBoL1IgAAA
+J4eXaoWhukmIYuj6knwcEwAA
+sjkuz/YHykCKpS5qitI6FAAA
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+ZMn2cmFZr0+GuJk5rQoyDgAA
+SX/KZkmsDk+r8uamHH4ZLgAA
+8
+GncN+LFplkq1zurpPaUdwgAA
+9xRLTrq9IUq8AdFDvi3GuQAA
+5s6HsRi2b0uwIS4LMz3DuAAA
+8uZw0YHNEUmkPJCFkz8T3gAA
+67vn5p+OzkersHhkDjZ4igAA
+ZLFPuXcouUuSrdi0UDRJmgAA
+FvElIA2yUkei3MLMoa8k2gAA
+Dthe7dQ5RkyqhrSPP9XnKgAA
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+Z797Ei2tSUi6O/GTUGUZfgAA
+ZMn2cmFZr0+GuJk5rQoyDgAA
+4
+deLw1RNzjEqsvILJ+ibF7AAA
+51pyWaL0CU2frOZ5zjyI2wAA
+E2rBvdl9VUWj4VqXDkaZ5gAA
+sLWQNpiHvk+TWraPIbIZeAAA
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+lJ5FZia7y0evV31w/xLmsAAA
+9FsvxqZjkEyUqc9w2NDcQgAA
+8
+zea0bPu5nk+a1o5fWOzJHwAA
+xJfsE4G5lEqANAnN8ENc4QAA
+4EsSVk2+2kWONvweIAFt2AAA
+3bXJm+ojzEW1itRkv6lbdAAA
+kiw5jSvMHEypQrYjs7EtggAA
+l29NGFssr0Oph9Nmvqs75wAA
+ls8Fv1dy8k2Wl7LVjx5LLQAA
+NozOK6S620+qcY7JiLt/hwAA
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+skl0Nm/UIUCTsqkUAIXmzAAA
+lJ5FZia7y0evV31w/xLmsAAA
+8
+1N+R/u7G/0uGQCTvcKagCAAA
+ytrOyZ41mE2QIBwJkvlH4QAA
+o7Ot+jP6IEOS76Hr++G0uAAA
+bMlgO115dUWbM89joy/4GgAA
+Xczg4RYGK0epoiVJPcNKBQAA
+FCKhBb0jnEyEn7YexR+RlAAA
+7dGi6Cz5PEOPdS8qzAGxlQAA
+cQ9Yhd24Wkq4SQQtMvuB4wAA
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+HjFZEYW1wEOsKFuTmPnHegAA
+skl0Nm/UIUCTsqkUAIXmzAAA
+4
+3NlbjHNH2ECymHRy7yzyAQAA
+/BekJ/FXvkujXFx+QlPowgAA
+26/YsJ6Oq0SNjxxOUi0nRQAA
+k46DaLygdkSf/20Yk3JBEQAA
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+hNuH1fWUHU2IT4Poty2GiwAA
+HjFZEYW1wEOsKFuTmPnHegAA
+4
+lWI1Zq3eQEGenqREuNOFyAAA
+dRYz7D5qgUqwJ+Pe9lQWNAAA
+F99tUBHNsk69EMaYgEUuoQAA
+ODUhv71Ts02GVPo+m3t0fwAA
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+HwLi+AyuiUa754Eutz2k5AAA
+BZTI/4OA7kG+nFfsclldCgAA
+8
+dgyqUNu8ck2rwaT63rOxsgAA
+VS7xhkemyk6N0W+72/94AQAA
+5QCQMYRtlkWhaCRpq1cVAAAA
+f7kRl0rvM0WkGcfE154lGgAA
+OJLWmo8NskCKPdf/f829bQAA
+2fA+Ni3QEk6wzHzG0Vi23QAA
+Ac129XF/7EmTSnACzkicGgAA
+luSPlO7yuUmYjRD341y7TAAA
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+c38EVYXmckWErbW5Cl4UwgAA
+HwLi+AyuiUa754Eutz2k5AAA
+4
+SS7IMtrGi0W+o/mmD4DTcQAA
+dsN+JqqRnkaGxifilWIP2gAA
+ygVe6QYMrU2KjM1DmzPOQwAA
+MW1jdyNVj0aZonbOWJcidwAA
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+4OTsa4LGqUqntun16mJ7kAAA
+c38EVYXmckWErbW5Cl4UwgAA
+4
+5NgNJQ+GMkWxtYcACgmvwQAA
+dW8YoS7Kh0KQK694gSP8ZAAA
+Zutt4UEcsEW5VhGobwz7PwAA
++YIQHLXA8k+gVyiGz0VsbgAA
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+/JHLRlaovkibrttO8nZPPgAA
+BZTI/4OA7kG+nFfsclldCgAA
+8
+ZtlRtj7fpU+vne+4TxLP2QAA
+sOHJjy6mOkG+iujo2jmtBQAA
+vTkmP4tXqkqCFRzsSrA7OgAA
+fqXurAuhJ0CxFMNN3Ha/kgAA
+JMbhoZv7zE6YPY6DRZa03AAA
+HdxilnEczUaxyL6EjpKuOQAA
++z9EeDfekEWSwMZ0by6AFwAA
+PR3hmDUfqUWMblF+CaEsfAAA
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+eLrcJo0DgE2AjvOF61yczQAA
+/JHLRlaovkibrttO8nZPPgAA
+4
+vkjSSO/iqUCY1V/2BXexKQAA
+NNUZ4iWSlEKetkMV+pJNLgAA
+L+t5c4ysTE6Xwu5bJDDp8QAA
+XTqd6vcw6U2CEpwy+qj/YAAA
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+r22NFz2+L0aq+kmESgCiYAAA
+BZTI/4OA7kG+nFfsclldCgAA
+8
+JWavOb3aY0mzbGXClEGqKwAA
+eJkCVv9peUC9C1Xl7Qt9gQAA
+ukUvh3oLakuhl003p4qpLwAA
+NIYeLqF8kEOJtGwEcSq4RQAA
+twCGjPyb2Ual3NJyUUi6KwAA
+CHma4YTb2kyFs40oB7lTnQAA
+g/nhzJ5tR0mfsnm8l+H+cAAA
+xCI/ux18cUq3onQpVpKalAAA
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+sJBjmKjtoEWtenBeaDLnjwAA
+r22NFz2+L0aq+kmESgCiYAAA
+4
+I2oTjriYG0akeelXSVfgOAAA
+GHrtEAGTaEKJ02Riv2MnlwAA
+ncDt+ezXM0ed89//p7QEIQAA
+0Ae8agrF+E6XD53DOOKriwAA
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+GoHMKPRtzES/2hlDzLtwnAAA
+SqNjwMrIrEaWmScJhNPQOwAA
+8
+qCBk3LUtOkKsa7q+Smy33QAA
+O0ZvATMt8kKFhwKR94hgkgAA
+RchnMhJQIEuIy4hStD7cMwAA
+QiumQ4FlokCBbnqaRnP1PAAA
+c9sExiBPSkmQeGMpookzmAAA
+r4pRczKZDEqLTIa+Uv4hAwAA
+Gek4/rBbQE2AhN4C2QtmHwAA
+eP5PI5++WkmO2ocAZKQzaAAA
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+YNdJIJRIm0SpW7CG17MtyAAA
+GoHMKPRtzES/2hlDzLtwnAAA
+8
+c//7pRRoQUSF81xKijSycAAA
+CFnUSa0l80u7I/SUX5OqdgAA
+smgqRMylXkWhpl/T9wDY9QAA
+f+3U3XscTEyGDU1iTZkk3QAA
+GzIRPV6QhUOs4qO7ybP5uwAA
+b5Wt2k7dUUexN/g2NhNs4gAA
+ChdyhRn2/U2HgOGMZ8fqNAAA
+ncBurfWb10GtjNMKoxl0pwAA
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+KqnhKB+uXkKxW6LqS8YzcgAA
+GoHMKPRtzES/2hlDzLtwnAAA
+8
+DYIGs3eF+UCxvimOqtHM+AAA
+3PuxzUJqTkadJllKss6M+QAA
+Ivcs17PRN0qmdMfoqmg++AAA
+JqsfWjUbl0uyq3vL4pbvHQAA
+zDENN75Zf0iG7KHHxpwdwAAA
+AKmb+VMUfEyhnDy9QH0ltAAA
+kCkw7XtCXU2PVP7mtmKBDgAA
+eZvnTWEFJ0uUea9wio47qwAA
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+tc20+9LmREuR1dUMSybNdQAA
+SqNjwMrIrEaWmScJhNPQOwAA
+8
+1Ot9CLFgT0aqcmufZU92nAAA
+XiZYrR3hok2IOo9BZDKbywAA
+A0/dF17oZUu3dTS5MAEQ0gAA
+aAiLn8LnWUGPzt+AjAIm8gAA
+4MVBssIp/ESMM6YFA1eFnQAA
+lMZFWNt/sUySKYoX/1yCiAAA
+HB5blXh1f0+48L/0izbNgQAA
+xWTGWw3VuEiWVa4XjrHjOgAA
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+ilTzVOgexUSPHrK2FSqS9wAA
+tc20+9LmREuR1dUMSybNdQAA
+8
+1JZtgwF9xk+gPmUzc0oJJgAA
+bxIE6AfC6UytbeH5sTR2BwAA
+GpWLPlBxa0GCqFyvuLdyAQAA
+1j/84UXBVEOJhvz5d9FWSQAA
+FdpNOlB6l02sPzaVkt78vAAA
+0jqMhhUux0K75yTuQLfOxwAA
+XK3zHlENckeFjMLJfXgSvgAA
+9G4AEIlw6UWApHibm5CB2AAA
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+CqUqbTfjd0mBGFOXrmWVDgAA
+R8hLgFt1fEaSSxBO7KbEBQAA
+8
+/6R5uO+otkKh3lilaF1WNAAA
+K36PpLG600i+0ImA6b9RhQAA
+AbJz3RGlmEWM2b6lAV3ABgAA
+YhSObfexfE6PoPRtcd4r4gAA
+DkHschnvwECm+DPfXBZNSAAA
+reE0paYhq0SHUC5aEEQQ4gAA
+yx1ldGEH8kq2wvEk/qzxxwAA
+NwyCGPQGb0SGFf5dLiPM1AAA
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+s/XSjWMZB0WwUzzarQOzNgAA
+R8hLgFt1fEaSSxBO7KbEBQAA
+8
+DnsxaGRhoUW9bJrBu99KZQAA
+xosvW1bcbEqf17i1B7dmwgAA
+kOhYrTLUn0Ws4OYSIL+MRQAA
+7TgeFsDfnUKXZvflRDJQtQAA
+oYFkVEhJqkKMEGaBuTnwAQAA
+z4oGv765k0yXa5qfSekTkAAA
+zT4g0D60GkOzyybPatDgOAAA
+hO1LDiqrZEuFVbaR0TrvbAAA
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+6HMIzI9avUGHDCpvqmkdqQAA
+R8hLgFt1fEaSSxBO7KbEBQAA
+8
+psIMlRQ2Dk2JbyUb+Gg0YAAA
+IrmIW82wkU2E0ati90YYOwAA
+XzAxQPjCPUC+SYqhvot0iwAA
+Zq8hTAK2Ckmw6wm674lftQAA
+CE0M/fXDXUiH1zsQOE+6fAAA
+6lxfetSsrEOT7X3Evs0cWAAA
+pUycG8VLzUK+8QNxofMMLAAA
+dCFk/gs320GRdJ0pSBsZZQAA
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+gJKazn/X+U6+FJp/F2soRAAA
+BaqYQl/65Uy16GMJC7nLawAA
+8
++Yt/btzSikSosVg4o4SWKAAA
+tyC1v93+2kua0TzR6a7hGgAA
+mfkrDY0+QEK9Kn4Lb3xWqAAA
+LFIHYizyaUajAunzCnbXJwAA
+Od7nNH4/q0q+9miS+BQMQAAA
+IQA3jbeMXEiqT07uVKIBwAAA
+3/OF3Cm+t0i1PXp8eNNITgAA
+SBPICWRItEi4WkedLHl4GwAA
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+gJKazn/X+U6+FJp/F2soRAAA
+YNdJIJRIm0SpW7CG17MtyAAA
+8
+6S1n014H2ESngn7Aw3cgAAAA
+63U/0aGAbEKcoRAQwmvDiwAA
+X8x3KRlEEEy2kf6Su8vQ1gAA
+cqC5G5Ie3kiuqGR05se5SgAA
+lRW9X1ac10yI+fo42IJIvAAA
+uvmeOGu3U0ObhRCH+N/cYgAA
+bsaPOhHQ7UGDtaN/ica6gwAA
+uL/mV/MeU025M9zMAgRD/AAA
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+QvkeGvTpWU2SJ0MXVIx/AwAA
+BaqYQl/65Uy16GMJC7nLawAA
+8
+F+HzSvwj8ki7nHVW0VFcigAA
+jCDdcZ6ZXU2EOsSYih6ExwAA
+SmIb8/cjDkm2kX6k/b8ntAAA
+DTiUSZIULUmTC4HtfeC3AAAA
+t/MfWdUyF0OEhTxYbOiw7AAA
+UTvgSLsazECdxl6VrGbavQAA
+S6i3jl6a8E6QdB+rlPDufAAA
+R8qbDPmknkOAp2O6LVl9XAAA
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+QvkeGvTpWU2SJ0MXVIx/AwAA
+ilTzVOgexUSPHrK2FSqS9wAA
+8
+rcltMulnr0qF/qeBFloYFgAA
+9hb9MkGFx0+r8kkgfseS5wAA
++Z0y+HpafUykWClO0g7bSwAA
+LIPZyMH9Sk+S6LVONEva/wAA
+TmGQgMctk0KObDDJHr3mHgAA
+v1kqzxBAbk2IvVIzlqDO+wAA
+fb9dVgo/gU+jTRGezpDpLwAA
+p560ijiYxkCwEwQ0Iaef3gAA
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+SjUoRiw3TUOE/FQirpeMogAA
+LPfLjDLmzkKy/sn51dyX7gAA
+8
+rhnnQCbHikuDeN+Oo4/FMAAA
+qmNqzvGTwUu/uQ7vUhCAXwAA
+fcsS2BO4EkChu1RbUUaFIQAA
+Kl/PRgRaiEGYeX8Ioupo8wAA
+KEO/1z0YY0SJHTZqg5v5hQAA
+yYwdiA76RUGvs8LNcYb8ogAA
+HW9HdRPS4E6zKir3r1LbIQAA
+aw4alqX9OEe4wfd2ybEhPwAA
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+SjUoRiw3TUOE/FQirpeMogAA
+CqUqbTfjd0mBGFOXrmWVDgAA
+8
+Qjq2UGfu1U6yEC9G7GFncAAA
+EZ0R5BsS2EiNXWtJLkot/AAA
+C8i3eIqe/0+28YXwhDr+fwAA
+L1FrRLEd+ki2VTqIrxRm2QAA
+7yaK+OouTkeaR94qcVEXVgAA
+V5CgvrxyrUaDeI0bIP2/jQAA
+T0/lonmG50uYTiZzyRagNwAA
+URWno2ktQUGMKlEOxyq+NAAA
+
+
+jvfBmo6uGkC61ckI99TMgAAA
++hvdtNLBPUeUmdoy9WnIywAA
+ilTzVOgexUSPHrK2FSqS9wAA
+4
+LXo50YVn5k6y4i7dLt9JNAAA
+A6p9uYQnAUake5kt6fboOgAA
+hwqG1MhHZEO6TnTm8tPYEgAA
+BI4QKfy4LU+aD2bIBSLU1wAA
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+rNsPUCIqcESb1NED1xr04AAA
+CqUqbTfjd0mBGFOXrmWVDgAA
+4
+Knkuk2do/0KUUmk1qKGJVQAA
+PoNF9wqiakqi7H2sSQgFEQAA
+1U+QYJuP1USrQmw6+eWPhwAA
+UHcFiQyS2023I5whuRKy/gAA
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+JJbEayVgmEyWvR4C1WYpsAAA
+BaqYQl/65Uy16GMJC7nLawAA
+4
+0rhL0gj7UkqmJd2x+BAiLgAA
+yuRUENpwE0OiMB2tNJ40SQAA
+blRMeSSVyk6S9Q6ktugY1AAA
+c/UgcMa5IUK8gNCvhK1KcgAA
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+JJbEayVgmEyWvR4C1WYpsAAA
++hvdtNLBPUeUmdoy9WnIywAA
+4
+bhOoN0b4HEeSRvduzhJxPgAA
+hRcyH0TnfE6fWW/bhbSFVwAA
+klBeBRv3TEmxO7NFrPw7AgAA
+WSuAYv/19EipFycyuvP0jwAA
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+dUFVpJ56j0WxczyDxsGS+gAA
+LPfLjDLmzkKy/sn51dyX7gAA
+4
+JKJUz4S/4kW5nWG9k4dnrAAA
++XGMMutMLU+2sOdaGJtJKAAA
+4LdLXxgofkeQljsnri1qCQAA
+cjSGwgMlakG69dFL30/p3QAA
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+dUFVpJ56j0WxczyDxsGS+gAA
+rNsPUCIqcESb1NED1xr04AAA
+4
+T52ERlC6LUShYtwcwiX3XQAA
+GXUwktB+mUmMyGAe6v0nTQAA
+3mYd4Qs0q0WuCqLLfsl7fgAA
+K03uqu3VKki6nz/PcnPmSAAA
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+5tmwPyb6D0Ki98vc8dVPhQAA
+BaqYQl/65Uy16GMJC7nLawAA
+4
+S76dtnBSdU2GyTzCpjqjGQAA
+jE1fxhEqeEOyzCx9TigIMAAA
+astHPBLQAke+cV3sm5HkgAAA
+yVW2frPFcUukgF4+NIT/TwAA
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+5tmwPyb6D0Ki98vc8dVPhQAA
+gWn1z7ujyEu9Gf7LdRrPIAAA
+4
+qtiyA4yHnEKefRjnWB5NMAAA
+tMXXck5570yGI2PzqPcaXwAA
+rBAKeYumSEe3qbFRoT9JzwAA
+D4a01z/R0UK/G3Ua/sSzdwAA
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+gWn1z7ujyEu9Gf7LdRrPIAAA
+YNdJIJRIm0SpW7CG17MtyAAA
+4
+Wna6ao9UaEa+LOqkRAVQJwAA
+XCT77hd1uEece5kAr4VfDgAA
+4slM817uV0WYVY5kD2kpBAAA
+2oZ9iO7gTUiXx6WG4oqbDAAA
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+ukpy8IZAy0KEameLGY9mtQAA
+6HMIzI9avUGHDCpvqmkdqQAA
+4
+TPDwJYaaYECgn2lLX27JzQAA
+lrCmOoar4ES3Y9rZSa4YNAAA
+cSXLhxOkDEOX1LQxY+CajAAA
+xgbOSm+ioEGzQFghdEuD2QAA
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+ecegk3x5sEKpNtWGALy6NAAA
+s/XSjWMZB0WwUzzarQOzNgAA
+4
+cvrjA1QmMEe6KhCf6X4QZQAA
+Y1F4jb5ClEGG4w2MWXzjYAAA
+Fz/CNTPOVEWGj5MDwoavUwAA
+iXLoEqPOYEGdMbPt5lfkZAAA
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+W+YbXZBJDU6NfEjOApatvwAA
+KqnhKB+uXkKxW6LqS8YzcgAA
+4
+mYiPI1jKUUy+l8TS2jnHkwAA
+52eAKOALwkOwbrXOf4JhDQAA
+bIpaty6YhEax7CSTvo6y1AAA
+Th272KyIREaU+jNyB6ysEgAA
+
+
+IPackSocket
+jvfBmo6uGkC61ckI99TMgAAA
+16
+2NPkGxsE60eclahgOjVMgAAA
+qanVb+lWC0akcJOwRG/MEAAA
+rhbpNUyjIEqMgrAdnnT36QAA
+f3uwOOrYjUO915OhF6FxMAAA
+XsluK/m59E+/IMf4Y9b0rAAA
+1YlSBB09GkS+u5/rCTPOWwAA
+o4LzBtp6JEySykeTk1zFmwAA
+SIKdLcfuPUCDoOLG1N0MggAA
+o4hWQrYZQkOmrY1zgQbErQAA
+XZV5HfZFiU24ipOMLajLigAA
+jOF0qC/hukiZjCcy1pQvBAAA
+fyd9aLZb7UGu3D3TmXMGbQAA
+tzOblJolkE++35/W1yMpSgAA
+aHVtU4ycQEupCzbxGFo83QAA
+EL323Vobv0eVxpn0DXJO8gAA
+A2/QUHwmN0a0LcfcPNb8EAAA
+7
+sgmcH4+s1Em05SzAjJdHjAAA
+WUHNHDfka0O+CbvKWj/7kQAA
+v+HDY4XmuEqbLAgnV9F1XgAA
+x2cv/pfP+0KLEYoWHGBFVAAA
+OH/WIarq+EioSJWJSZjh6AAA
+WevwuaXm10S10CfIFVFoFwAA
+zC0n+CWc7Eq8t3+2/ieK3wAA
+5
+
+SetMaxPackSize
+True
+Pv24uWWaqUu82r7VGD3ZNwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+yiu064LKGkqSPXKDvu6lEgAA
+
+2
+
+dwMaxPackSize
+DWORD
+yiu064LKGkqSPXKDvu6lEgAA
+
+
+return
+pdkReturn
+void
+yiu064LKGkqSPXKDvu6lEgAA
+
+
+
+SetPackHeaderFlag
+True
+Pv24uWWaqUu82r7VGD3ZNwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+59gJg0Y41U6P1Uf/Ltq9bQAA
+
+2
+
+usPackHeaderFlag
+USHORT
+59gJg0Y41U6P1Uf/Ltq9bQAA
+
+
+return
+pdkReturn
+void
+59gJg0Y41U6P1Uf/Ltq9bQAA
+
+
+
+GetMaxPackSize
+True
+Pv24uWWaqUu82r7VGD3ZNwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+KcPyYFPkLkGCbsT8q0c/swAA
+
+1
+
+return
+pdkReturn
+DWORD
+KcPyYFPkLkGCbsT8q0c/swAA
+
+
+
+GetPackHeaderFlag
+True
+Pv24uWWaqUu82r7VGD3ZNwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+uE1F67PHLEqLMpua/PX1bAAA
+
+1
+
+return
+pdkReturn
+USHORT
+uE1F67PHLEqLMpua/PX1bAAA
+
+
+
+IPackSocket
+UMLStandard
+destroy
+vkPrivate
+Pv24uWWaqUu82r7VGD3ZNwAA
+
+4
++gwOOVHEKEC3d7c6ZslFKwAA
+DQXPCFFri06p9vDhntrwswAA
+INOu6si0U0esJ5QdnvqevgAA
+Irvwq5MHbk6LOaC8nQbvzwAA
+
+
+IPackClient
+jvfBmo6uGkC61ckI99TMgAAA
+12
+iW4CiDDhyEqlkb7itLSOuQAA
+sqc0il9xH06nWVATGkOfuwAA
+k96N8NyU60ixtqHKWEn2lAAA
+8tLZHMkQgEyCa8TXoiRKRgAA
+Yb89wcpcAk2cxvunkv6qmgAA
+hzS+9JC6U0yyfs4CvvEskAAA
+kuiez2+Yw02w897Ni7ln2wAA
+s4uJ3w4uWkyKW07Th4vicAAA
+4j80tfni4UmZL6wIRCcF1wAA
+gkBxNeekf0GfPCLiPWclKwAA
+5MQyiVwFi0m16vbQmhpXTAAA
+ErSxa18bfUq08B5kayys+AAA
+3
+xly9lJtUukKwQ90VKrZR2AAA
+N9PjlD8Kvk26PvXMITpM2QAA
+toD1Nhg/ik+9R8r966zdrgAA
+5
+
+SetMaxPackSize
+True
+tvyRlzR70kaEb8akK1WldwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+Sb2xIPoMfEmcprjhWPgyVAAA
+
+2
+
+dwMaxPackSize
+DWORD
+Sb2xIPoMfEmcprjhWPgyVAAA
+
+
+return
+pdkReturn
+void
+Sb2xIPoMfEmcprjhWPgyVAAA
+
+
+
+SetPackHeaderFlag
+True
+tvyRlzR70kaEb8akK1WldwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+6Ya/wy/SAUiJHDk0g2jh7wAA
+
+2
+
+usPackHeaderFlag
+USHORT
+6Ya/wy/SAUiJHDk0g2jh7wAA
+
+
+return
+pdkReturn
+void
+6Ya/wy/SAUiJHDk0g2jh7wAA
+
+
+
+GetMaxPackSize
+True
+tvyRlzR70kaEb8akK1WldwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+EkYZLhEAQkehsqPDZtU75wAA
+
+1
+
+return
+pdkReturn
+DWORD
+EkYZLhEAQkehsqPDZtU75wAA
+
+
+
+GetPackHeaderFlag
+True
+tvyRlzR70kaEb8akK1WldwAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+/07gxRNokUOhodCzx8vihQAA
+
+1
+
+return
+pdkReturn
+USHORT
+/07gxRNokUOhodCzx8vihQAA
+
+
+
+IPackClient
+UMLStandard
+destroy
+vkPrivate
+tvyRlzR70kaEb8akK1WldwAA
+
+2
+gHDDhlJar0yV7nt2BkZnTAAA
+wcXN0QyVyk+g/gkYprOV9QAA
+
+
+ITcpPackServer
+jvfBmo6uGkC61ckI99TMgAAA
+8
+IxgSYDxQe0qqAConM0HORwAA
+2i8a4QqJTEiBathYXQhMuwAA
+bsyVrql6IkmBGTeyRmT8yAAA
+vMfK2EQ7rEaMMnrRkYGyKgAA
+kTpvQ8TEEkmzpYp6oZMMXwAA
+GjXqyOPMfEKk3s3mFwVt+gAA
+EFKVUaX3xkKVvPgpTBIuZgAA
+CyiWvj/TBkOjsAeg0czdzwAA
+2
+sgmcH4+s1Em05SzAjJdHjAAA
+nzQ/3s2PQEG5Cz2AX+hkOgAA
+2
+
+ToPack
+skClassifier
+aDgNVKZkT029alZKzju1xAAA
+1
+
+Cpp
+CppMemberFunction
+CppInline
+True
+vf4CNLDVkk6wd9f0alsTGgAA
+
+2
+
+pServer
+vf4CNLDVkk6wd9f0alsTGgAA
+GoHMKPRtzES/2hlDzLtwnAAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+lqZIR9zpP0y49VT0gCv6swAA
+
+
+
+return
+pdkReturn
+vf4CNLDVkk6wd9f0alsTGgAA
+Pv24uWWaqUu82r7VGD3ZNwAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
++gwOOVHEKEC3d7c6ZslFKwAA
+
+
+
+
+ToServer
+skClassifier
+aDgNVKZkT029alZKzju1xAAA
+1
+
+Cpp
+CppMemberFunction
+CppInline
+True
+GXbVAyywoU+PbkwWOpwriQAA
+
+2
+
+pPackSocket
+GXbVAyywoU+PbkwWOpwriQAA
+Pv24uWWaqUu82r7VGD3ZNwAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+DQXPCFFri06p9vDhntrwswAA
+
+
+
+return
+pdkReturn
+GXbVAyywoU+PbkwWOpwriQAA
+YNdJIJRIm0SpW7CG17MtyAAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+azDXhAug/kC0UeL/V3c2qQAA
+
+
+
+
+
+ITcpPackAgent
+jvfBmo6uGkC61ckI99TMgAAA
+8
+mDfdT1ptZk64YFRjy+qMOgAA
+m6xyT3N2pkyTw61oJYXrvQAA
+/dl3/5EnpUyqy2//SJ9pwwAA
+7Qrfdh28q0SlebHOxi6IoQAA
+kXZKbMdJjEWlFo6Q0wMKUwAA
+RkCx8/mbRUatqL1bHvDz1gAA
+w06vX7FbRkuTtJB+K2zTOgAA
+AkDi0mVJl0ubyilvlYIgzgAA
+2
+WUHNHDfka0O+CbvKWj/7kQAA
+lqZ7xgrWKkewtFXoEKU2+AAA
+2
+
+ToPack
+skClassifier
+vjFkGLWb/kSPpbp9R+skbAAA
+1
+
+Cpp
+CppMemberFunction
+CppInline
+True
+X1JmTUypW06ys21ZeaLUowAA
+
+2
+
+pAgent
+X1JmTUypW06ys21ZeaLUowAA
+tc20+9LmREuR1dUMSybNdQAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+pLUAAVD3Ik2vyLatRkbfrwAA
+
+
+
+return
+pdkReturn
+X1JmTUypW06ys21ZeaLUowAA
+Pv24uWWaqUu82r7VGD3ZNwAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+INOu6si0U0esJ5QdnvqevgAA
+
+
+
+
+ToAgent
+skClassifier
+vjFkGLWb/kSPpbp9R+skbAAA
+1
+
+Cpp
+CppMemberFunction
+CppInline
+True
+Lewh6Ntc10CBoT43vJIF1AAA
+
+2
+
+pPackSocket
+Lewh6Ntc10CBoT43vJIF1AAA
+Pv24uWWaqUu82r7VGD3ZNwAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+Irvwq5MHbk6LOaC8nQbvzwAA
+
+
+
+return
+pdkReturn
+Lewh6Ntc10CBoT43vJIF1AAA
+ilTzVOgexUSPHrK2FSqS9wAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+R2exw8R6DE6K1lw0TUkI2wAA
+
+
+
+
+
+ITcpPackClient
+jvfBmo6uGkC61ckI99TMgAAA
+8
+q5juGoWzLEGEpbKgLo4flwAA
+5T8b7jFprEqa8EO1Q0kKXAAA
+dBGW/2kXV0mAZJjPVCWegQAA
+TYaYZa7SikKXRD+ylXtU7gAA
+32lcn4ak5UeWCJbHkp/gUwAA
+Ug3VKEcDvUabSaQg4iwrgwAA
+JgQRxGdHTU2keN2ayiX8FgAA
+XJ+BteSUJkiA2CijH1W48AAA
+2
+xly9lJtUukKwQ90VKrZR2AAA
+l44zgodkDEuj17c7XdoPSQAA
+2
+
+ToPack
+skClassifier
+NI0md/XcXk+UFEOqL+89owAA
+1
+
+Cpp
+CppMemberFunction
+CppInline
+True
+q69nbMyytESze00rpFcgHAAA
+
+2
+
+pClient
+q69nbMyytESze00rpFcgHAAA
+R8hLgFt1fEaSSxBO7KbEBQAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+fenI/tCbCEGzso47imi01gAA
+
+
+
+return
+pdkReturn
+q69nbMyytESze00rpFcgHAAA
+tvyRlzR70kaEb8akK1WldwAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+gHDDhlJar0yV7nt2BkZnTAAA
+
+
+
+
+ToClient
+skClassifier
+NI0md/XcXk+UFEOqL+89owAA
+1
+
+Cpp
+CppMemberFunction
+CppInline
+True
+uw7CmCQv3k6APko6TVXkmwAA
+
+2
+
+pPackClient
+uw7CmCQv3k6APko6TVXkmwAA
+tvyRlzR70kaEb8akK1WldwAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+wcXN0QyVyk+g/gkYprOV9QAA
+
+
+
+return
+pdkReturn
+uw7CmCQv3k6APko6TVXkmwAA
+CqUqbTfjd0mBGFOXrmWVDgAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+XwIYEdJyaU+OBOCXAgFkDQAA
+
+
+
+
+
+CTcpPackAgent
+jvfBmo6uGkC61ckI99TMgAAA
+4
+D/2eg6bkTEKcTZu0rbkM1wAA
+WNr3PGBfdkenuL1r1X0HoQAA
+Pc0Aebt4wEaB+1vvVGI3lgAA
+ys1sZKIIwUC9t3o7lIelKwAA
+2
+v+HDY4XmuEqbLAgnV9F1XgAA
+YVPRQLCk1keYCHnO8PWR/AAA
+8
+
+SendPackets
+P+YM5jdCmESvfv1Fet1QqAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+dg/9o5UFwUuWrrQhb6d3JQAA
+
+4
+
+dwConnID
+dg/9o5UFwUuWrrQhb6d3JQAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+pBuffers
+WSABUF
+dg/9o5UFwUuWrrQhb6d3JQAA
+1
+
+Cpp
+CppConst
+CppConst
+True
+VveVPRtQVE+2Y5E9ICKkCgAA
+
+
+
+iCount
+int
+dg/9o5UFwUuWrrQhb6d3JQAA
+
+
+return
+pdkReturn
+BOOL
+dg/9o5UFwUuWrrQhb6d3JQAA
+
+
+
+SetMaxPackSize
+P+YM5jdCmESvfv1Fet1QqAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+/VWmyO6HfUihBCSUWdukKwAA
+
+2
+
+dwMaxPackSize
+DWORD
+/VWmyO6HfUihBCSUWdukKwAA
+
+
+return
+pdkReturn
+void
+/VWmyO6HfUihBCSUWdukKwAA
+
+
+
+SetPackHeaderFlag
+P+YM5jdCmESvfv1Fet1QqAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
++YSjwJhn/0KSyuxGzZC3CQAA
+
+2
+
+usPackHeaderFlag
+USHORT
++YSjwJhn/0KSyuxGzZC3CQAA
+
+
+return
+pdkReturn
+void
++YSjwJhn/0KSyuxGzZC3CQAA
+
+
+
+GetMaxPackSize
+P+YM5jdCmESvfv1Fet1QqAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+Et7xVRx3DkiGnBabAiq9WAAA
+
+1
+
+return
+pdkReturn
+DWORD
+Et7xVRx3DkiGnBabAiq9WAAA
+
+
+
+GetPackHeaderFlag
+P+YM5jdCmESvfv1Fet1QqAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+rbLQagIjskevp+dFtDtoqgAA
+
+1
+
+return
+pdkReturn
+USHORT
+rbLQagIjskevp+dFtDtoqgAA
+
+
+
+FireSuperReceive
+P+YM5jdCmESvfv1Fet1QqAAA
+4
+
+pSocketObj
+TSocketObj
+7rWHryV+dUC2/Pn/++4BiwAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
++vBIGgaoFEKFxXsSDOGLWAAA
+
+
+
+pData
+BYTE
+7rWHryV+dUC2/Pn/++4BiwAA
+2
+
+Cpp
+CppConst
+CppConst
+True
+ViKtkRU9b06Y9DwZcUOVxAAA
+
+
+Cpp
+CppPointer
+CppPointer
+*
+ViKtkRU9b06Y9DwZcUOVxAAA
+
+
+
+iLength
+int
+7rWHryV+dUC2/Pn/++4BiwAA
+
+
+return
+pdkReturn
+7rWHryV+dUC2/Pn/++4BiwAA
+2khtjHI2AUSz1nm7UQu8uwAA
+
+
+
+CTcpPackAgent
+UMLStandard
+create
+vkPrivate
+P+YM5jdCmESvfv1Fet1QqAAA
+1
+
+psoListener
+COXZchxbR0aRAmZsWSDhMgAA
+skl0Nm/UIUCTsqkUAIXmzAAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+VbMBZfCU/0ivBlGkfv9qEwAA
+
+
+
+
+CTcpPackAgent
+UMLStandard
+destroy
+vkPrivate
+P+YM5jdCmESvfv1Fet1QqAAA
+
+
+
+CTcpPackClient
+jvfBmo6uGkC61ckI99TMgAAA
+4
+yhdU0K3mvEeeVvCvv3kUNQAA
+rme3i3CfH0K3yeiSkThSAwAA
+ePo4iu/f5Eiz6KGKiV5ziwAA
+VNYHDPGR80ydl9BCPX+gjwAA
+3
+x2cv/pfP+0KLEYoWHGBFVAAA
+PhcJjlYZKkK5/K0LejildAAA
+N9PjlD8Kvk26PvXMITpM2QAA
+8
+
+SendPackets
+L/mIC87mmUWQBG3Zhl0iGQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+cwQQNRSgeEiTzu5bwXNaMwAA
+
+3
+
+pBuffers
+WSABUF
+cwQQNRSgeEiTzu5bwXNaMwAA
+1
+
+Cpp
+CppConst
+CppConst
+True
+Tpe5XywBnUSKWWMjTixRKQAA
+
+
+
+iCount
+int
+cwQQNRSgeEiTzu5bwXNaMwAA
+
+
+return
+pdkReturn
+BOOL
+cwQQNRSgeEiTzu5bwXNaMwAA
+
+
+
+SetMaxPackSize
+L/mIC87mmUWQBG3Zhl0iGQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+G+ApphbCIEWG/fSS2s/FRwAA
+
+2
+
+dwMaxPackSize
+DWORD
+G+ApphbCIEWG/fSS2s/FRwAA
+
+
+return
+pdkReturn
+void
+G+ApphbCIEWG/fSS2s/FRwAA
+
+
+
+SetPackHeaderFlag
+L/mIC87mmUWQBG3Zhl0iGQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+tivsdeY9lUG+yMuJ6+rqpAAA
+
+2
+
+usPackHeaderFlag
+USHORT
+tivsdeY9lUG+yMuJ6+rqpAAA
+
+
+return
+pdkReturn
+void
+tivsdeY9lUG+yMuJ6+rqpAAA
+
+
+
+GetMaxPackSize
+L/mIC87mmUWQBG3Zhl0iGQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+vktlRt/yDUqwbzi7YENXiAAA
+
+1
+
+return
+pdkReturn
+DWORD
+vktlRt/yDUqwbzi7YENXiAAA
+
+
+
+GetPackHeaderFlag
+L/mIC87mmUWQBG3Zhl0iGQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
++QgvovvniEmwYn9hkQOu3QAA
+
+1
+
+return
+pdkReturn
+USHORT
++QgvovvniEmwYn9hkQOu3QAA
+
+
+
+FireSuperReceive
+L/mIC87mmUWQBG3Zhl0iGQAA
+4
+
+pClient
+xMP2LkNMVU+hqi7i9ndqmQAA
+R8hLgFt1fEaSSxBO7KbEBQAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+WwnXTA8xNE2Cazz8YtOMIgAA
+
+
+
+pData
+BYTE
+xMP2LkNMVU+hqi7i9ndqmQAA
+2
+
+Cpp
+CppConst
+CppConst
+True
+rMg5J07WekG9jnA/Ui37BwAA
+
+
+Cpp
+CppPointer
+CppPointer
+*
+rMg5J07WekG9jnA/Ui37BwAA
+
+
+
+iLength
+int
+xMP2LkNMVU+hqi7i9ndqmQAA
+
+
+return
+pdkReturn
+xMP2LkNMVU+hqi7i9ndqmQAA
+2khtjHI2AUSz1nm7UQu8uwAA
+
+
+
+CTcpPackClient
+UMLStandard
+create
+vkPrivate
+L/mIC87mmUWQBG3Zhl0iGQAA
+1
+
+psoListener
+M4uZ5GqOl0yrNkxHQmcbtAAA
+HwLi+AyuiUa754Eutz2k5AAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+2htC5RYGCkmqkKaQAQy/zgAA
+
+
+
+
+CTcpPackClient
+UMLStandard
+destroy
+vkPrivate
+L/mIC87mmUWQBG3Zhl0iGQAA
+
+
+
+CTcpPackServer
+jvfBmo6uGkC61ckI99TMgAAA
+4
+3Oc58Cgr6Uet0hJOu0xXvgAA
+NDxqCLUfbkWKZemsaCefXAAA
+8zkU+PhzbECwKW9TxPk6HQAA
+MwnuVlrmYUarUu9Iz3bskwAA
+2
+OH/WIarq+EioSJWJSZjh6AAA
+aQ1uf7mN+EuF/eGcASNwmgAA
+8
+
+SendPackets
+1ED6OCTjl0y7E7dMMSTJqgAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+5DJim62zFkOgGKcinBl1xAAA
+
+4
+
+dwConnID
+5DJim62zFkOgGKcinBl1xAAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+pBuffers
+WSABUF
+5DJim62zFkOgGKcinBl1xAAA
+1
+
+Cpp
+CppConst
+CppConst
+True
++BdcS2VFzUWglAaUTf3xMwAA
+
+
+
+iCount
+int
+5DJim62zFkOgGKcinBl1xAAA
+
+
+return
+pdkReturn
+BOOL
+5DJim62zFkOgGKcinBl1xAAA
+
+
+
+SetMaxPackSize
+1ED6OCTjl0y7E7dMMSTJqgAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+aX+zswQ4zE2/F1TkaAjL7AAA
+
+2
+
+dwMaxPackSize
+DWORD
+aX+zswQ4zE2/F1TkaAjL7AAA
+
+
+return
+pdkReturn
+void
+aX+zswQ4zE2/F1TkaAjL7AAA
+
+
+
+SetPackHeaderFlag
+1ED6OCTjl0y7E7dMMSTJqgAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+VrYaob80EUSsEqOcioHnaQAA
+
+2
+
+usPackHeaderFlag
+USHORT
+VrYaob80EUSsEqOcioHnaQAA
+
+
+return
+pdkReturn
+void
+VrYaob80EUSsEqOcioHnaQAA
+
+
+
+GetMaxPackSize
+1ED6OCTjl0y7E7dMMSTJqgAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+tsnZsahvbESscDWvIqU4AgAA
+
+1
+
+return
+pdkReturn
+DWORD
+tsnZsahvbESscDWvIqU4AgAA
+
+
+
+GetPackHeaderFlag
+1ED6OCTjl0y7E7dMMSTJqgAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+gw6J2BDRtEuqfM9bN4xzywAA
+
+1
+
+return
+pdkReturn
+USHORT
+gw6J2BDRtEuqfM9bN4xzywAA
+
+
+
+FireSuperReceive
+1ED6OCTjl0y7E7dMMSTJqgAA
+4
+
+pSocketObj
+TSocketObj
++5lOKoH35EOHinXn+nTHiAAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+ZZoxQut0K0yZ/akQ68iccQAA
+
+
+
+pData
+BYTE
++5lOKoH35EOHinXn+nTHiAAA
+2
+
+Cpp
+CppConst
+CppConst
+True
+7VDPXDxtUkS4VcUa+SSCpQAA
+
+
+Cpp
+CppPointer
+CppPointer
+*
+7VDPXDxtUkS4VcUa+SSCpQAA
+
+
+
+iLength
+int
++5lOKoH35EOHinXn+nTHiAAA
+
+
+return
+pdkReturn
++5lOKoH35EOHinXn+nTHiAAA
+2khtjHI2AUSz1nm7UQu8uwAA
+
+
+
+CTcpPackServer
+UMLStandard
+create
+vkPrivate
+1ED6OCTjl0y7E7dMMSTJqgAA
+1
+
+psoListener
+MZBtGzxJrU+pckN4egygYAAA
+h8NmVuBtVUWgcCSKCdxePgAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+nRjXsyaRi0OblwNRuNtT6gAA
+
+
+
+
+CTcpPackServer
+UMLStandard
+destroy
+vkPrivate
+1ED6OCTjl0y7E7dMMSTJqgAA
+
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+aDgNVKZkT029alZKzju1xAAA
+Pv24uWWaqUu82r7VGD3ZNwAA
+8
+6VmHYe/x/0yIaUK5+gKUPQAA
+cG17rEtpik6nu0NmUwJO+QAA
+PAfAjHTjFkiZ7oiA1ohkCAAA
+ISoX722TrEaj3Bll5Rv8bAAA
+jVWzkncwfEWSCcnGG3GRMAAA
+0LBn9ifl6UehFmjLpQCmcwAA
+xP/84tpMxkCTgosqEtsHtgAA
+GhNYJOwNJUimKU587XOtigAA
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+aDgNVKZkT029alZKzju1xAAA
+YNdJIJRIm0SpW7CG17MtyAAA
+8
+zkOykNrc6kiztcGJitCcewAA
+aw1Skb1CS0aPF4YzfGN1BAAA
+HSqp1+8nTEyJo97z66BObQAA
+u3KVvzl6EEic3VwAD+X8PwAA
+dWLQNpbqgUGKW9K/9gerewAA
+wL9nfxmiak+wVj8gVA/5XQAA
+inqtIO/kOEyV/uMEQspxBQAA
+uUJIVxGUIk28m3eMme0G/QAA
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+vjFkGLWb/kSPpbp9R+skbAAA
+Pv24uWWaqUu82r7VGD3ZNwAA
+8
+p0gU0tLurEezo3gjCu27uQAA
+uRxWOxtCzkCw9/EH7JOeggAA
+NH6kRHAeOUyJOfGsN2n2LQAA
+y1UIsMU1skO3xdCl1lVjmwAA
+cQZx6O7MQEC66fQVczNvWgAA
+rBf5E1FdGkuR1lwo9uDdAwAA
+PFrjVmATfES3vyAgdx+/5gAA
+bL6P6lGGMki5dSB58yJtgwAA
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+vjFkGLWb/kSPpbp9R+skbAAA
+ilTzVOgexUSPHrK2FSqS9wAA
+8
+YK6EG+gIsEiUbTkJ6ql6SgAA
+xJDoCDd47UWRrLNxbRGosgAA
+bpD40TTW9UGmszQ04wR4SQAA
+FRbhd2c7uU+/A8ZUIZsJrAAA
+yZVtVLdkT0yyLvZJq0udEwAA
+NDlP8rnHIUKZMXbNCX5XwgAA
+MR7xMeg0j06D94gqhhbZfAAA
+4PkE+tI00UqME4XWlTeOrQAA
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+NI0md/XcXk+UFEOqL+89owAA
+tvyRlzR70kaEb8akK1WldwAA
+8
+JoaiZS5esUKfp06TbpfY+wAA
+cpoqrUMyF0uXUy9wETtiQAAA
+rGnTocuvv0uJUUanQm/c1AAA
+r7qbuSfZh0WeS6Mq1Lky8AAA
+E7Ak0ghm1k6Lg9Jf3y031wAA
+NZWEL1PlSUi0JnqVg70qngAA
+pm2xIt4jYE2Sc3dYD1U9swAA
+ud0FqMeUCEymi+vdZ5NTowAA
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+NI0md/XcXk+UFEOqL+89owAA
+CqUqbTfjd0mBGFOXrmWVDgAA
+8
+Gu2GaGwEMU68V2DWzpQO5gAA
+Aowdv9aj4k2o+lolIRczyQAA
+YtzkgCIm2kOwGAtpbe7jWwAA
+IB0hvjVG3k6jhq7QueiBPgAA
+nifcgJC8Tk+EExWfjsAr/gAA
+055UYWc690KVuELGF7i+5wAA
+qGZ2VJKv3UyvAS117bqgzQAA
+QXSSeJ5EXkq2o2GfE2leDAAA
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+P+YM5jdCmESvfv1Fet1QqAAA
+Pv24uWWaqUu82r7VGD3ZNwAA
+4
+N3O+iMg77E2FWp6Azb67rwAA
+r4Gv/ranAEqFHgYw3+PoJQAA
+CWNma2B5z0OlYWkJDZT5AAAA
+D5EWKjTyrEWEgR7FO23AlAAA
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+P+YM5jdCmESvfv1Fet1QqAAA
++hvdtNLBPUeUmdoy9WnIywAA
+4
+yiiEIOl6hEa3nbjNnPRcnwAA
+8BruboB8IUGLr3Vu/XyR/AAA
+a9WA4Kr1XkS5c3scC6srRgAA
+ARWcj24iEEmazJoRHWs6IgAA
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+L/mIC87mmUWQBG3Zhl0iGQAA
+Pv24uWWaqUu82r7VGD3ZNwAA
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+L/mIC87mmUWQBG3Zhl0iGQAA
+rNsPUCIqcESb1NED1xr04AAA
+4
+2WYqlZl+vkmYyamufjq+FQAA
+Di7xP8e/NEeCzx/jnktsxgAA
+9au1Gv2RpkKmo5meqhRGMwAA
+qYuu2Z+SeE6Fjht0MrkL8wAA
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+1ED6OCTjl0y7E7dMMSTJqgAA
+Pv24uWWaqUu82r7VGD3ZNwAA
+4
+HEPs/Gx6Z0qNmv6avB3TUgAA
+xqPQr7tzu0mzf6Zr5tERMgAA
+E4d7yAZKGkeq4UP1zfhJogAA
+aIf7kv/MwUeK5gXad6vPLQAA
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+1ED6OCTjl0y7E7dMMSTJqgAA
+gWn1z7ujyEu9Gf7LdRrPIAAA
+4
+rXnzBI5Az0iITQ+P+TYCLwAA
+fpsHdHDQm0y0Lu/XAqXbhAAA
+FWFo0RSgekK5B+Mee/8dCAAA
+OewnzXNMrkaSNwXvWiPEkQAA
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+L/mIC87mmUWQBG3Zhl0iGQAA
+tvyRlzR70kaEb8akK1WldwAA
+4
+fHQIM982D0Wo/Y6GIGe8rgAA
+o5OAQDGZw0Wk6DXlPFZFdwAA
+ePrza0QxmEqWJp/kaskLFAAA
+IA8sbtaQDkejTvgMiJXKWQAA
+
+
+CSSLServer
+jvfBmo6uGkC61ckI99TMgAAA
+4
+d35WR8n7+UOgpuuGpsJT/gAA
+k0y3gIvpDk6RBhbDg18g/wAA
+MQOfbZRnPUqaGPZeniATHwAA
+bA1nZ3qju0m1x/ia3HjAFAAA
+1
+dYbvw1/fskefHEscBdgpZgAA
+3
+eCOHns6MTUaMdNrY0M8eCgAA
+SH3SwMKS/UiRlJ4xtt2EGAAA
+pUlSo2/PGUGbOEtx9YGGkAAA
+3
+
+SendPackets
+/a9O/IGkN0ucRkHiSn9HnAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+yxQQjnLaxUGSTt02eGGhuAAA
+
+4
+
+dwConnID
+yxQQjnLaxUGSTt02eGGhuAAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+pBuffers
+WSABUF
+yxQQjnLaxUGSTt02eGGhuAAA
+1
+
+Cpp
+CppConst
+CppConst
+True
+favmAd8dWkipDrasijcgCAAA
+
+
+
+iCount
+int
+yxQQjnLaxUGSTt02eGGhuAAA
+
+
+return
+pdkReturn
+BOOL
+yxQQjnLaxUGSTt02eGGhuAAA
+
+
+
+CSSLServer
+UMLStandard
+create
+vkPrivate
+/a9O/IGkN0ucRkHiSn9HnAAA
+1
+
+psoListener
+NzXQlcfPokifdF4vjQlXjQAA
+h8NmVuBtVUWgcCSKCdxePgAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+xG71pXgMdkypZgGSiBJkEwAA
+
+
+
+
+CSSLServer
+UMLStandard
+destroy
+vkPrivate
+/a9O/IGkN0ucRkHiSn9HnAAA
+
+
+
+CSSLPullServer
+jvfBmo6uGkC61ckI99TMgAAA
+4
+JRAkS2JnWECgZ7ODKbFltAAA
+QimHUVfLlE+cykKOgSl7wgAA
+ZQ2dCPPyyk6It8ynxET4aQAA
+0Ag+vKjaEECwbgPXvJRXIQAA
+2
+tdi+ObP8UEaZOtjDaYNnMwAA
+SH3SwMKS/UiRlJ4xtt2EGAAA
+4
+
+Fetch
+P8xlD7KQ90q3n3d+bn8l1wAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+9nOhaKklQUKozwM6sanKBQAA
+
+4
+
+dwConnID
+9nOhaKklQUKozwM6sanKBQAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+pData
+BYTE
+9nOhaKklQUKozwM6sanKBQAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+J1L+RBprAUKWFFbwR1IM5AAA
+
+
+
+iLength
+int
+9nOhaKklQUKozwM6sanKBQAA
+
+
+return
+pdkReturn
+9nOhaKklQUKozwM6sanKBQAA
+VQDDk4BU6UmBmig6SmOuoQAA
+
+
+
+Peek
+P8xlD7KQ90q3n3d+bn8l1wAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+Kp6iCqyO2EWCIUB28pbkWAAA
+
+4
+
+dwConnID
+Kp6iCqyO2EWCIUB28pbkWAAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+pData
+BYTE
+Kp6iCqyO2EWCIUB28pbkWAAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+t+iOolIYekKSLqZIHwomogAA
+
+
+
+iLength
+int
+Kp6iCqyO2EWCIUB28pbkWAAA
+
+
+return
+pdkReturn
+Kp6iCqyO2EWCIUB28pbkWAAA
+VQDDk4BU6UmBmig6SmOuoQAA
+
+
+
+CSSLPullServer
+UMLStandard
+create
+vkPrivate
+P8xlD7KQ90q3n3d+bn8l1wAA
+1
+
+psoListener
+jyi3khoHV0OdJ5AkT11LjgAA
+h8NmVuBtVUWgcCSKCdxePgAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+xPh7EKKJrke0GF0PHgjevQAA
+
+
+
+
+CSSLPullServer
+UMLStandard
+destroy
+vkPrivate
+P8xlD7KQ90q3n3d+bn8l1wAA
+
+
+
+CSSLPullAgent
+jvfBmo6uGkC61ckI99TMgAAA
+4
+4XXw9vfun0a24Xk6K/eqNwAA
+n3OXigrlkUKONtmVK+Zf/gAA
+AJPtaehmL0mQZMKhq7Oa6AAA
+Y/wtW/NhL0yz10eiW/aWwQAA
+2
+6zlAYO2+JEmTh0JuwrP0jgAA
+DLPvhY5teEiO4nl/ImGDOwAA
+4
+
+Fetch
+YWE1Hn3siEGR0iQqmll+qQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+4xzH+BPVpEu766FK9L2argAA
+
+4
+
+dwConnID
+4xzH+BPVpEu766FK9L2argAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+pData
+BYTE
+4xzH+BPVpEu766FK9L2argAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+vc8c+nGAQkGtEiL4dTy+QwAA
+
+
+
+iLength
+int
+4xzH+BPVpEu766FK9L2argAA
+
+
+return
+pdkReturn
+4xzH+BPVpEu766FK9L2argAA
+VQDDk4BU6UmBmig6SmOuoQAA
+
+
+
+Peek
+YWE1Hn3siEGR0iQqmll+qQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+4SRQQHVzC06gPm5LzJhzigAA
+
+4
+
+dwConnID
+4SRQQHVzC06gPm5LzJhzigAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+pData
+BYTE
+4SRQQHVzC06gPm5LzJhzigAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+YzUddC67BEuZtu23I0sz/gAA
+
+
+
+iLength
+int
+4SRQQHVzC06gPm5LzJhzigAA
+
+
+return
+pdkReturn
+4SRQQHVzC06gPm5LzJhzigAA
+VQDDk4BU6UmBmig6SmOuoQAA
+
+
+
+CSSLPullAgent
+UMLStandard
+create
+vkPrivate
+YWE1Hn3siEGR0iQqmll+qQAA
+1
+
+psoListener
+mnqFbbqrMEOTd7DdrJGqEQAA
+skl0Nm/UIUCTsqkUAIXmzAAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+bSSRih5qYUijxzNDRmFw6gAA
+
+
+
+
+CSSLPullAgent
+UMLStandard
+destroy
+vkPrivate
+YWE1Hn3siEGR0iQqmll+qQAA
+
+
+
+CSSLPackServer
+jvfBmo6uGkC61ckI99TMgAAA
+4
+XdWAkkiMB0qHZvXQfp+tRAAA
+UpnT1fx/+kKwzovGY3CjcgAA
+sUq4t1EfcEKvkw2XHHA/8AAA
+Pc6zpHiHDUuquPHjzyxXTgAA
+2
+pUlSo2/PGUGbOEtx9YGGkAAA
+WevwuaXm10S10CfIFVFoFwAA
+8
+
+SendPackets
+2Ii9/CL9N06CUPFe9+aVlAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+fqILx9MpzUCF8WMLORStVAAA
+
+4
+
+dwConnID
+fqILx9MpzUCF8WMLORStVAAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+pBuffers
+WSABUF
+fqILx9MpzUCF8WMLORStVAAA
+1
+
+Cpp
+CppConst
+CppConst
+True
+FALPFKTekE6J4n3dabTw+gAA
+
+
+
+iCount
+int
+fqILx9MpzUCF8WMLORStVAAA
+
+
+return
+pdkReturn
+BOOL
+fqILx9MpzUCF8WMLORStVAAA
+
+
+
+SetMaxPackSize
+2Ii9/CL9N06CUPFe9+aVlAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+YXjl653h2Ee/YUUMSm5DYwAA
+
+2
+
+dwMaxPackSize
+DWORD
+YXjl653h2Ee/YUUMSm5DYwAA
+
+
+return
+pdkReturn
+void
+YXjl653h2Ee/YUUMSm5DYwAA
+
+
+
+SetPackHeaderFlag
+2Ii9/CL9N06CUPFe9+aVlAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+6T4ITY60W0iXjzZAAhoMdwAA
+
+2
+
+usPackHeaderFlag
+USHORT
+6T4ITY60W0iXjzZAAhoMdwAA
+
+
+return
+pdkReturn
+void
+6T4ITY60W0iXjzZAAhoMdwAA
+
+
+
+GetMaxPackSize
+2Ii9/CL9N06CUPFe9+aVlAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+j1ztzASMhkqmFRlRlzp02gAA
+
+1
+
+return
+pdkReturn
+DWORD
+j1ztzASMhkqmFRlRlzp02gAA
+
+
+
+GetPackHeaderFlag
+2Ii9/CL9N06CUPFe9+aVlAAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+1aPjbMs7zkKE+wtUwZaeVQAA
+
+1
+
+return
+pdkReturn
+USHORT
+1aPjbMs7zkKE+wtUwZaeVQAA
+
+
+
+FireSuperReceive
+2Ii9/CL9N06CUPFe9+aVlAAA
+4
+
+pSocketObj
+TSocketObj
+b4Nnpu3xbk2TDjyaTQ56IwAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+yLmKh9g7DkSImbfpplAc8QAA
+
+
+
+pData
+BYTE
+b4Nnpu3xbk2TDjyaTQ56IwAA
+2
+
+Cpp
+CppConst
+CppConst
+True
+nr9+t8dNakeI5/VOZ8IErgAA
+
+
+Cpp
+CppPointer
+CppPointer
+*
+nr9+t8dNakeI5/VOZ8IErgAA
+
+
+
+iLength
+int
+b4Nnpu3xbk2TDjyaTQ56IwAA
+
+
+return
+pdkReturn
+b4Nnpu3xbk2TDjyaTQ56IwAA
+2khtjHI2AUSz1nm7UQu8uwAA
+
+
+
+CSSLPackServer
+UMLStandard
+create
+vkPrivate
+2Ii9/CL9N06CUPFe9+aVlAAA
+1
+
+psoListener
+p70cvA40eUC1V2AFVQCi/wAA
+h8NmVuBtVUWgcCSKCdxePgAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+fHPrkJ36IkqPL0o/nLUU4AAA
+
+
+
+
+CSSLPackServer
+UMLStandard
+destroy
+vkPrivate
+2Ii9/CL9N06CUPFe9+aVlAAA
+
+
+
+CSSLPackAgent
+jvfBmo6uGkC61ckI99TMgAAA
+4
+VUpwOKU+J0Wj770ubFC9nAAA
+r389auC6S0O+6XHvZ+F1awAA
+/hZUBxmn5EeSPQL0FbR54QAA
+yrbLe8y/IUC7dVQXvwUYyAAA
+2
+ikNlGmT/m06b5kjYjhgFRAAA
+zC0n+CWc7Eq8t3+2/ieK3wAA
+8
+
+SendPackets
+FgE9SfcsvUyo0N5G6kkGtQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+THP2weIt30aPv9U3Jok6jgAA
+
+4
+
+dwConnID
+THP2weIt30aPv9U3Jok6jgAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+pBuffers
+WSABUF
+THP2weIt30aPv9U3Jok6jgAA
+1
+
+Cpp
+CppConst
+CppConst
+True
+aFHYLi1om0Cgl+gaUZ0JiwAA
+
+
+
+iCount
+int
+THP2weIt30aPv9U3Jok6jgAA
+
+
+return
+pdkReturn
+BOOL
+THP2weIt30aPv9U3Jok6jgAA
+
+
+
+SetMaxPackSize
+FgE9SfcsvUyo0N5G6kkGtQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+LHhWGAyun02BYRoIBoxZcgAA
+
+2
+
+dwMaxPackSize
+DWORD
+LHhWGAyun02BYRoIBoxZcgAA
+
+
+return
+pdkReturn
+void
+LHhWGAyun02BYRoIBoxZcgAA
+
+
+
+SetPackHeaderFlag
+FgE9SfcsvUyo0N5G6kkGtQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+wLM8IzsDxUWaQlip+h/wuwAA
+
+2
+
+usPackHeaderFlag
+USHORT
+wLM8IzsDxUWaQlip+h/wuwAA
+
+
+return
+pdkReturn
+void
+wLM8IzsDxUWaQlip+h/wuwAA
+
+
+
+GetMaxPackSize
+FgE9SfcsvUyo0N5G6kkGtQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+bM6BHrTB9E2GrwfB5m9FHgAA
+
+1
+
+return
+pdkReturn
+DWORD
+bM6BHrTB9E2GrwfB5m9FHgAA
+
+
+
+GetPackHeaderFlag
+FgE9SfcsvUyo0N5G6kkGtQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+aT4LcsH8/k6yJHNKqicDLQAA
+
+1
+
+return
+pdkReturn
+USHORT
+aT4LcsH8/k6yJHNKqicDLQAA
+
+
+
+FireSuperReceive
+FgE9SfcsvUyo0N5G6kkGtQAA
+4
+
+pSocketObj
+TSocketObj
+Qov0ulbuyEeMSW1/ruaL2QAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+SldyS21tPUq0YDrISYB4FwAA
+
+
+
+pData
+BYTE
+Qov0ulbuyEeMSW1/ruaL2QAA
+2
+
+Cpp
+CppConst
+CppConst
+True
+Hlbwpc4F2k23+YY2WHMszgAA
+
+
+Cpp
+CppPointer
+CppPointer
+*
+Hlbwpc4F2k23+YY2WHMszgAA
+
+
+
+iLength
+int
+Qov0ulbuyEeMSW1/ruaL2QAA
+
+
+return
+pdkReturn
+Qov0ulbuyEeMSW1/ruaL2QAA
+2khtjHI2AUSz1nm7UQu8uwAA
+
+
+
+CSSLPackAgent
+UMLStandard
+create
+vkPrivate
+FgE9SfcsvUyo0N5G6kkGtQAA
+1
+
+psoListener
+QUA3zCtF/EmHMgG6ublBfgAA
+skl0Nm/UIUCTsqkUAIXmzAAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+pwnu3stqzE+uWyU6NsAVkQAA
+
+
+
+
+CSSLPackAgent
+UMLStandard
+destroy
+vkPrivate
+FgE9SfcsvUyo0N5G6kkGtQAA
+
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+/a9O/IGkN0ucRkHiSn9HnAAA
+gWn1z7ujyEu9Gf7LdRrPIAAA
+4
+ndnwRBtxtUqrrv+GW/5V6AAA
+C6O4V3Pbs06vFXNjDZ9HUgAA
+2uGl0ieAFUeBOsQUom5aBQAA
+TL4Mbwtl2E6O5Vcg7SNMfwAA
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+BaqYQl/65Uy16GMJC7nLawAA
+/a9O/IGkN0ucRkHiSn9HnAAA
+
+
+CSSLAgent
+jvfBmo6uGkC61ckI99TMgAAA
+4
+VLERt8k74k+Gz466zBHy6AAA
+4vQH8XOWDUmif/zAUbuiPQAA
+ccjyu95goUizOhudqMjElwAA
+1cv9ZdODa0CGk7lRWlk1LwAA
+1
+TfYW/muhnkCoBvGlNPHSNgAA
+2
+DLPvhY5teEiO4nl/ImGDOwAA
+ikNlGmT/m06b5kjYjhgFRAAA
+3
+
+SendPackets
+IU9vkanSiEaFICg0rbzT8gAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+uGvHG6/lZE6hbYJkEuewrAAA
+
+4
+
+dwConnID
+uGvHG6/lZE6hbYJkEuewrAAA
+G8TfQngB3UemVJWZg5KbggAA
+
+
+pBuffers
+WSABUF
+uGvHG6/lZE6hbYJkEuewrAAA
+1
+
+Cpp
+CppConst
+CppConst
+True
+cjHNEGYNeE20I3hWQEIenQAA
+
+
+
+iCount
+int
+uGvHG6/lZE6hbYJkEuewrAAA
+
+
+return
+pdkReturn
+BOOL
+uGvHG6/lZE6hbYJkEuewrAAA
+
+
+
+CSSLAgent
+UMLStandard
+create
+vkPrivate
+IU9vkanSiEaFICg0rbzT8gAA
+1
+
+psoListener
+Bzgm+gir0k6Ls1r0457uewAA
+h8NmVuBtVUWgcCSKCdxePgAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+G0BbpT0DqkaGwCsl9psIpAAA
+
+
+
+
+CSSLAgent
+UMLStandard
+destroy
+vkPrivate
+IU9vkanSiEaFICg0rbzT8gAA
+
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+IU9vkanSiEaFICg0rbzT8gAA
++hvdtNLBPUeUmdoy9WnIywAA
+4
+/Gt5D4qBSU6BRwxVYjjPhQAA
+9bnbvZsBGUupHbA1FMMHbgAA
+7mEYU/zX70WbRURqxxtDBAAA
+R9eNVjvgy0Ofb/h1lcBNmwAA
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+P8xlD7KQ90q3n3d+bn8l1wAA
+BaqYQl/65Uy16GMJC7nLawAA
+4
+23+Dz60BiUK7NSh26Rh2tQAA
+iaQKwyGm8USy0uVfar+t1wAA
+Guw796fV40Gi66hV1bRe2wAA
+qZSrHpiAt0KGMHcTLWvLCQAA
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+P8xlD7KQ90q3n3d+bn8l1wAA
+/a9O/IGkN0ucRkHiSn9HnAAA
+4
+wOupJfOqRUK4ErVGuQ+UTgAA
+5YsWEXe2Dk+dwuhyXdj0+QAA
+t2hK/D2hi0aYynkqkRaiOQAA
+THn3aDybdUKHsaCoZbUpnQAA
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+2Ii9/CL9N06CUPFe9+aVlAAA
+/a9O/IGkN0ucRkHiSn9HnAAA
+4
+jAFxklZEdkq/z/WYpYygIQAA
+LiFoWUQd+kO8e1GzBV3dnQAA
+DJtSaXBaSkGI/hpv16RBLQAA
+PCKKxg72nUGZxlhto5ebvwAA
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+YWE1Hn3siEGR0iQqmll+qQAA
+BaqYQl/65Uy16GMJC7nLawAA
+4
+OlA7aFMa/0ioSJLhdcTxgQAA
+Ck/VcWHl2E6cNfEMjBKDqAAA
+F2SNGZ3nMUeK5+O8mcP1tAAA
+mk47pPotgkyJGG6sjkVsEAAA
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+YWE1Hn3siEGR0iQqmll+qQAA
+IU9vkanSiEaFICg0rbzT8gAA
+4
+8uCmNNzGekaKy5nR/T6dXgAA
+fZlPnxWJoEyALL7obWe/ngAA
+XyLZBsuhA0umhI0Jc/f+uwAA
+S8EY0XbpbEy2yKu3BGaaQwAA
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+2Ii9/CL9N06CUPFe9+aVlAAA
+Pv24uWWaqUu82r7VGD3ZNwAA
+4
+HufL+mulskOLgjfoRCIADQAA
+QR/l9xtzzkKsdgEF3ZOS8wAA
+LtIduPZVKUuBjWdz9i/VlQAA
+M/SFN+tL9EWGLhHzYSO9OAAA
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+FgE9SfcsvUyo0N5G6kkGtQAA
+IU9vkanSiEaFICg0rbzT8gAA
+4
+IOw6/Ly+6kmjGOl4N2aT0AAA
+QT+ovsXCCkGvgmJN58F8lwAA
+sWCrJ6WOnEeAi9nE+VEwmAAA
+43KtHFCiSUSrsoxheOBgEwAA
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+FgE9SfcsvUyo0N5G6kkGtQAA
+Pv24uWWaqUu82r7VGD3ZNwAA
+4
+NowVO22ZNU2KXhSlRqZD/gAA
+tYg1m9xlxEWLU+i2d79SiAAA
+G0zhAMuBSU6c1E+SnQiN9QAA
+8WWN7sbZF0ybu75EAX1tKAAA
+
+
+CSSLClient
+jvfBmo6uGkC61ckI99TMgAAA
+4
+txEKm8CR70Cuk11CUiY1aQAA
+NT03ICRdaUKYAyikWS2hdgAA
+OBkTDDh18k2vNWfTH4juRQAA
++8GQFG9kzk6KXOIP5z7ejwAA
+1
+Tl0fIre+Z0iT2dYHwMCvCgAA
+2
+DOJbpPAv9E+jWzPo+tTRBwAA
+Vw/BVMYru0mplhHb7LN7xAAA
+3
+
+SendPackets
+1KywXCH1V02rwVorFE1tuQAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+h4CDov9cHk+hrDmapgb4RgAA
+
+3
+
+pdkReturn
+BOOL
+h4CDov9cHk+hrDmapgb4RgAA
+
+
+pBuffers
+WSABUF
+h4CDov9cHk+hrDmapgb4RgAA
+
+
+iCount
+int
+h4CDov9cHk+hrDmapgb4RgAA
+
+
+
+CSSLClient
+UMLStandard
+create
+vkPrivate
+1KywXCH1V02rwVorFE1tuQAA
+1
+
+psoListener
+V1VaywKrkUu8+Ou49SvEaAAA
+h8NmVuBtVUWgcCSKCdxePgAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+D0RYqJbMOES1mk+RXQL+jQAA
+
+
+
+
+CSSLClient
+UMLStandard
+destroy
+vkPrivate
+1KywXCH1V02rwVorFE1tuQAA
+
+
+
+CSSLPullClient
+jvfBmo6uGkC61ckI99TMgAAA
+4
+Ia9E9+rZekuN0lCyr3bcuwAA
+hr5mKKsEQEOPJw/O9Cpn/AAA
+t6MLQdrDc0eoGAKsFUpl1AAA
+hzTqTpnLjUuEX+vEhVyICQAA
+2
+DOJbpPAv9E+jWzPo+tTRBwAA
+1tgP9ALDWkSXfAEOH31nEAAA
+4
+
+Fetch
+JGUmeFicd0eQCApyahMZ2AAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+26okY5TaMUe9pDPaGuvQ5AAA
+
+3
+
+pData
+BYTE
+26okY5TaMUe9pDPaGuvQ5AAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+D1XVesf3HU6tRrbH4h7XIAAA
+
+
+
+iLength
+int
+26okY5TaMUe9pDPaGuvQ5AAA
+
+
+return
+pdkReturn
+26okY5TaMUe9pDPaGuvQ5AAA
+VQDDk4BU6UmBmig6SmOuoQAA
+
+
+
+Peek
+JGUmeFicd0eQCApyahMZ2AAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+U1dsjMd31kui5fuedcuAIwAA
+
+3
+
+pData
+BYTE
+U1dsjMd31kui5fuedcuAIwAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+QDOM2f+WFkSa8YtYaYMGoQAA
+
+
+
+iLength
+int
+U1dsjMd31kui5fuedcuAIwAA
+
+
+return
+pdkReturn
+U1dsjMd31kui5fuedcuAIwAA
+VQDDk4BU6UmBmig6SmOuoQAA
+
+
+
+CSSLPullClient
+UMLStandard
+create
+vkPrivate
+JGUmeFicd0eQCApyahMZ2AAA
+1
+
+psoListener
+o/wGxv5lwEySF6/kVjDa9wAA
+HwLi+AyuiUa754Eutz2k5AAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+yeR+XQYW+kiIcHahchUBgwAA
+
+
+
+
+CSSLPullClient
+UMLStandard
+destroy
+vkPrivate
+JGUmeFicd0eQCApyahMZ2AAA
+
+
+
+CSSLPackClient
+jvfBmo6uGkC61ckI99TMgAAA
+4
+3zj+g3elVkKhJer42rrZeAAA
+v4NARQFS6Uy/PKV9tnUM7QAA
+k3CdI1zUqE+T/FDT3RnDbwAA
+ron7xoHc5UiMwriADHUk9gAA
+2
+Vw/BVMYru0mplhHb7LN7xAAA
+toD1Nhg/ik+9R8r966zdrgAA
+8
+
+SendPackets
+vwyVaeoS+k2li1olb1nP9wAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+qmnKwHlRNEGvEd5vRZ2l6AAA
+
+3
+
+pBuffers
+WSABUF
+qmnKwHlRNEGvEd5vRZ2l6AAA
+1
+
+Cpp
+CppConst
+CppConst
+True
+BmmbY5U7Ekq2nyVAHS6mJgAA
+
+
+
+iCount
+int
+qmnKwHlRNEGvEd5vRZ2l6AAA
+
+
+return
+pdkReturn
+BOOL
+qmnKwHlRNEGvEd5vRZ2l6AAA
+
+
+
+SetMaxPackSize
+vwyVaeoS+k2li1olb1nP9wAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+Hn/GLvmOHUG27tAO2ZNxTQAA
+
+2
+
+dwMaxPackSize
+DWORD
+Hn/GLvmOHUG27tAO2ZNxTQAA
+
+
+return
+pdkReturn
+void
+Hn/GLvmOHUG27tAO2ZNxTQAA
+
+
+
+SetPackHeaderFlag
+vwyVaeoS+k2li1olb1nP9wAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+AHC9rmxzw0maQVH/BOi92QAA
+
+2
+
+usPackHeaderFlag
+USHORT
+AHC9rmxzw0maQVH/BOi92QAA
+
+
+return
+pdkReturn
+void
+AHC9rmxzw0maQVH/BOi92QAA
+
+
+
+GetMaxPackSize
+vwyVaeoS+k2li1olb1nP9wAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+SHXhukkCFkiYgHr+QH7X3AAA
+
+1
+
+return
+pdkReturn
+DWORD
+SHXhukkCFkiYgHr+QH7X3AAA
+
+
+
+GetPackHeaderFlag
+vwyVaeoS+k2li1olb1nP9wAA
+1
+
+Cpp
+CppVirtual
+CppVirtual
+True
+nJv3kkDbD0OcmBDvFXXjeAAA
+
+1
+
+return
+pdkReturn
+USHORT
+nJv3kkDbD0OcmBDvFXXjeAAA
+
+
+
+FireSuperReceive
+vwyVaeoS+k2li1olb1nP9wAA
+4
+
+pClient
+q00PmqMyfE2SQzdX+8rTngAA
+R8hLgFt1fEaSSxBO7KbEBQAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+vE4mlkSm2UygIvS367Ff/AAA
+
+
+
+pData
+BYTE
+q00PmqMyfE2SQzdX+8rTngAA
+2
+
+Cpp
+CppConst
+CppConst
+True
+RrVDGgc+TUimRzs4gsE2IQAA
+
+
+Cpp
+CppPointer
+CppPointer
+*
+RrVDGgc+TUimRzs4gsE2IQAA
+
+
+
+iLength
+int
+q00PmqMyfE2SQzdX+8rTngAA
+
+
+return
+pdkReturn
+q00PmqMyfE2SQzdX+8rTngAA
+2khtjHI2AUSz1nm7UQu8uwAA
+
+
+
+CSSLPackClient
+UMLStandard
+create
+vkPrivate
+vwyVaeoS+k2li1olb1nP9wAA
+1
+
+psoListener
+R7EJa/oxIE+sOhXpoCAqlAAA
+HwLi+AyuiUa754Eutz2k5AAA
+1
+
+Cpp
+CppPointer
+CppPointer
+*
+iYj8ImK6OUySIkZnOzGDfQAA
+
+
+
+
+CSSLPackClient
+UMLStandard
+destroy
+vkPrivate
+vwyVaeoS+k2li1olb1nP9wAA
+
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+1KywXCH1V02rwVorFE1tuQAA
+rNsPUCIqcESb1NED1xr04AAA
+4
+yt3AuwufeEWaEn1o1NgciQAA
+B8IS+v0iZUOKEqZGWyh3ZAAA
+dasPOsELqU2fV0vK1AwJfQAA
+uiAfed0UeU+KIcR++yVfFgAA
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+JGUmeFicd0eQCApyahMZ2AAA
+1KywXCH1V02rwVorFE1tuQAA
+4
+mZEFQ+K7ykm0HUQPpkgEsgAA
+KcZq5F9k6karY73UkqThfAAA
+YwvTopwemUKaWfesKK6qZwAA
+ZUpoTZ/Qi0iN2J9ten5f8gAA
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+vwyVaeoS+k2li1olb1nP9wAA
+1KywXCH1V02rwVorFE1tuQAA
+4
+zU+FydKG8E2sgLThs6aOTQAA
+8uOFtYw01keBMZQotb2XCwAA
+jRJyaln7FEK2kwb+on4VTgAA
+c4OYlNAxFUiY9ykw62kM4wAA
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+JGUmeFicd0eQCApyahMZ2AAA
+LPfLjDLmzkKy/sn51dyX7gAA
+4
+eJ3JjNvbt0C0NGPVSVERFgAA
+0CcZtJ7Ww06t8LRhZkIDQwAA
+5DJZi8Swxk+Moo52ZQ42qgAA
+zdqyTdtSJk26JArwR6Q51gAA
+
+
+jvfBmo6uGkC61ckI99TMgAAA
+vwyVaeoS+k2li1olb1nP9wAA
+tvyRlzR70kaEb8akK1WldwAA
+4
+8ihmVzkudkuAB5HrLI3BbQAA
+QwiM3okWzUaFaABJLA2EewAA
+vVxwf4ouzEC3A1WT//JtsQAA
+W6+AwUR+mEq6OQ1tlMBCpAAA
+
+
+EnSSLSessionMode
+jvfBmo6uGkC61ckI99TMgAAA
+3
+ahhZnhJjCUCoI/paXB2zfQAA
+iyJ33zmoT0iTsXHxaSNejAAA
+BLf+MCIr8UmqFNwRYWb5igAA
+2
+
+SSL_SM_CLIENT
+uI7XjfC9p0++i29/9XhB2wAA
+1
+
+Cpp
+CppEnumLiteral
+CppEnumLiteralValue
+0
+FaZOsFd+gkG5K5GJYRaIYgAA
+
+
+
+SSL_SM_SERVER
+uI7XjfC9p0++i29/9XhB2wAA
+1
+
+Cpp
+CppEnumLiteral
+CppEnumLiteralValue
+1
+bzuvJ5wzGEqQqBHPGiESbgAA
+
+
+
+
+EnSSLVerifyMode
+jvfBmo6uGkC61ckI99TMgAAA
+3
+7lmnOzfc4UKWVoDJCY4TtQAA
+cJTylAty/kanTnQTXAmbgAAA
+w8wKW5SAmkuHLVB2B5hFcwAA
+4
+
+SSL_VM_NONE
+DIS1hiv90kC+ATLNES3MPgAA
+1
+
+Cpp
+CppEnumLiteral
+CppEnumLiteralValue
+0
+UmkFK9viykyGes4cwyWnKgAA
+
+
+
+SSL_VM_PEER
+DIS1hiv90kC+ATLNES3MPgAA
+1
+
+Cpp
+CppEnumLiteral
+CppEnumLiteralValue
+1
+u8+hDPSmIkKpgOgabnT21wAA
+
+
+
+SSL_VM_FAIL_IF_NO_PEER_CERT
+DIS1hiv90kC+ATLNES3MPgAA
+
+
+SSL_VM_CLIENT_ONCE
+DIS1hiv90kC+ATLNES3MPgAA
+
+
+
+
+Deployment Model
+UMLStandard
+deploymentModel
+eUBxTmzIc0q+cSu3hl5+hQAA
+
+
+Implementation Model
+UMLStandard
+implementationModel
+eUBxTmzIc0q+cSu3hl5+hQAA
+1
+
+HP-Socket Arch
+J0n/XHnyekSunJdeH0mEDQAA
+
+9Q2G2kv+vESYu+RNI+rNZAAA
+11
+
+clMaroon
+$00EBD6D6
+12
+764
+116
+425
+257
+ENUIjdhUOU6FAAlWIMCUjQAA
+
+
+HP-Socket
+
+
+False
+
+
+False
+
+
+
+
+clMaroon
+$00FF5555
+10
+792
+176
+184
+49
+sdkIcon
+OyfKjrwclU2EfzNdA7qZfQAA
+
+
+1
+Component Interface
+
+
+False
+
+
+False
+
+
+
+False
+OyfKjrwclU2EfzNdA7qZfQAA
+
+
+False
+OyfKjrwclU2EfzNdA7qZfQAA
+
+
+
+clMaroon
+$00FF5555
+10
+804
+312
+157
+49
+sdkIcon
+eEopxRL/jUCoAy+hw5p2AAAA
+
+
+1
+Listener Interface
+
+
+False
+
+
+False
+
+
+
+False
+eEopxRL/jUCoAy+hw5p2AAAA
+
+
+False
+eEopxRL/jUCoAy+hw5p2AAAA
+
+
+
+clMaroon
+$00D7D7FF
+10
+916
+240
+249
+49
+b7wciCk340WnIYs2OIA/WwAA
+
+
+1
+Component Implement Class
+
+
+False
+
+
+False
+
+
+
+b7wciCk340WnIYs2OIA/WwAA
+
+
+b7wciCk340WnIYs2OIA/WwAA
+
+
+False
+b7wciCk340WnIYs2OIA/WwAA
+
+
+
+clMaroon
+$00B9FFFF
+12
+456
+120
+272
+253
+Jet2RP8QIkiUIm6/lmhK5QAA
+
+
+1
+My Application
+
+
+False
+
+
+False
+
+
+
+Jet2RP8QIkiUIm6/lmhK5QAA
+
+
+
+clMaroon
+$00FFF5EC
+10
+480
+312
+218
+49
+s/yNtp8VSEqjD4QJ3RgRrAAA
+
+
+1
+Listener Implement Class
+
+
+False
+
+
+False
+
+
+
+s/yNtp8VSEqjD4QJ3RgRrAAA
+
+
+s/yNtp8VSEqjD4QJ3RgRrAAA
+
+
+False
+s/yNtp8VSEqjD4QJ3RgRrAAA
+
+
+
+clMaroon
+$00F1E4E4
+10
+480
+176
+189
+49
+NHJ486vDiUmN0lfkD/1ZzgAA
+
+
+1
+Logic Controller
+
+
+False
+
+
+False
+
+
+
+NHJ486vDiUmN0lfkD/1ZzgAA
+
+
+NHJ486vDiUmN0lfkD/1ZzgAA
+
+
+False
+NHJ486vDiUmN0lfkD/1ZzgAA
+
+
+
+clMaroon
+$00B9FFFF
+697,336;804,336
+PuM1D7vAgE2bZvp0/9TxTQAA
+ABuV0aDQ80endfZcsfx3mQAA
+r9gFUFTnmUqyJxGvqpK/1QAA
+
+False
+1.5707963267949
+15
+PuM1D7vAgE2bZvp0/9TxTQAA
+
+
+False
+1.5707963267949
+30
+PuM1D7vAgE2bZvp0/9TxTQAA
+
+
+False
+-1.5707963267949
+15
+PuM1D7vAgE2bZvp0/9TxTQAA
+
+
+
+clMaroon
+$00B9FFFF
+1040,240;1040,200;975,200
+farC1lWXPUmwcMc4mSeSEQAA
+Rx8jIENKB0ekQ4Vn7AAzZwAA
+47dfeK8NE0ylzmvxrRp4JwAA
+
+False
+1.5707963267949
+15
+farC1lWXPUmwcMc4mSeSEQAA
+
+
+False
+1.5707963267949
+30
+farC1lWXPUmwcMc4mSeSEQAA
+
+
+False
+-1.5707963267949
+15
+farC1lWXPUmwcMc4mSeSEQAA
+
+
+
+clMaroon
+$00B9FFFF
+1040,288;1040,336;960,336
+p+FnuqzelUKJ5KAPzXxKigAA
+ABuV0aDQ80endfZcsfx3mQAA
+47dfeK8NE0ylzmvxrRp4JwAA
+
+False
+1.5707963267949
+15
+p+FnuqzelUKJ5KAPzXxKigAA
+
+
+False
+1.5707963267949
+30
+p+FnuqzelUKJ5KAPzXxKigAA
+
+
+False
+-1.5707963267949
+15
+p+FnuqzelUKJ5KAPzXxKigAA
+
+
+False
+-0.523598775598299
+30
+epHead
+n9+mvVa+9kyJR31kH9f68wAA
+
+
+False
+0.523598775598299
+30
+epTail
+uTb1WESP606TyWzPeyqhtwAA
+
+
+0.523598775598299
+25
+epHead
+1
+n9+mvVa+9kyJR31kH9f68wAA
+
+
+False
+-0.523598775598299
+25
+epTail
+uTb1WESP606TyWzPeyqhtwAA
+
+
+False
+-0.785398163397448
+40
+epHead
+n9+mvVa+9kyJR31kH9f68wAA
+
+
+False
+0.785398163397448
+40
+epTail
+uTb1WESP606TyWzPeyqhtwAA
+
+
+False
+-1000
+-1000
+50
+8
+n9+mvVa+9kyJR31kH9f68wAA
+
+
+False
+-1000
+-1000
+50
+8
+uTb1WESP606TyWzPeyqhtwAA
+
+
+
+clMaroon
+$00B9FFFF
+668,200;792,200
+5WOr+9h2DUaYQbz6rZ7/9AAA
+Rx8jIENKB0ekQ4Vn7AAzZwAA
+KmlonzqrCEujowX10f1VSwAA
+
+False
+1.5707963267949
+15
+5WOr+9h2DUaYQbz6rZ7/9AAA
+
+
+False
+1.5707963267949
+30
+5WOr+9h2DUaYQbz6rZ7/9AAA
+
+
+False
+-1.5707963267949
+15
+5WOr+9h2DUaYQbz6rZ7/9AAA
+
+
+False
+-0.523598775598299
+30
+epHead
+G299coWTUUauZvajrg/XIwAA
+
+
+False
+0.523598775598299
+30
+epTail
+6qXCPsrjokCkLVzSph7FmAAA
+
+
+False
+0.523598775598299
+25
+epHead
+G299coWTUUauZvajrg/XIwAA
+
+
+False
+-0.523598775598299
+25
+epTail
+6qXCPsrjokCkLVzSph7FmAAA
+
+
+False
+-0.785398163397448
+40
+epHead
+G299coWTUUauZvajrg/XIwAA
+
+
+False
+0.785398163397448
+40
+epTail
+6qXCPsrjokCkLVzSph7FmAAA
+
+
+False
+-1000
+-1000
+50
+8
+G299coWTUUauZvajrg/XIwAA
+
+
+False
+-1000
+-1000
+50
+8
+6qXCPsrjokCkLVzSph7FmAAA
+
+
+
+
+11
+
+My Application
+J0n/XHnyekSunJdeH0mEDQAA
+2
+OfLpubLykkO4+q+m7tEC5QAA
+59UjRn+IeEepoL4Wj7wrhwAA
+
+
+HP-Socket
+J0n/XHnyekSunJdeH0mEDQAA
+1
+JGeqKNLa9kC8OkOSSRk2iwAA
+
+
+Component Implement Class
+J0n/XHnyekSunJdeH0mEDQAA
+4
+47dfeK8NE0ylzmvxrRp4JwAA
+vraa/lJNMUyOKIpUAmBykQAA
+T1EsI/Iaa0eBwU8SzzHNXQAA
+dchkPqJzn0a8Xd0TJtILeAAA
+1
+farC1lWXPUmwcMc4mSeSEQAA
+1
+uTb1WESP606TyWzPeyqhtwAA
+
+
+Listener Implement Class
+J0n/XHnyekSunJdeH0mEDQAA
+4
+r9gFUFTnmUqyJxGvqpK/1QAA
+mzBiy0qMuEidEa0JspHd9AAA
+xaEEWq+QnUuRoWAEcPFA3gAA
+2mm0K11ThEWW9zv35i4BDQAA
+1
+PuM1D7vAgE2bZvp0/9TxTQAA
+
+
+Logic Controller
+J0n/XHnyekSunJdeH0mEDQAA
+4
+KmlonzqrCEujowX10f1VSwAA
++zF+wAT8OUCcuE+4qBPUjQAA
+ohlt8kbY6U+abGvCJCPBIwAA
+rIIO6Zc6S0mzOBfY57FtrQAA
+1
+6qXCPsrjokCkLVzSph7FmAAA
+
+
+Component Interface
+J0n/XHnyekSunJdeH0mEDQAA
+3
+Rx8jIENKB0ekQ4Vn7AAzZwAA
+cFoH1oS09U2DhVhB+0wliAAA
+jkSg3sBr3UmroMzKPCU06AAA
+1
+farC1lWXPUmwcMc4mSeSEQAA
+1
+G299coWTUUauZvajrg/XIwAA
+
+
+Listener Interface
+J0n/XHnyekSunJdeH0mEDQAA
+3
+ABuV0aDQ80endfZcsfx3mQAA
+TEnuxIoA7EGppCVdsEhW/QAA
+QmT3h5K3GUKhyDRaCkQn4AAA
+1
+PuM1D7vAgE2bZvp0/9TxTQAA
+1
+n9+mvVa+9kyJR31kH9f68wAA
+
+
+J0n/XHnyekSunJdeH0mEDQAA
+s/yNtp8VSEqjD4QJ3RgRrAAA
+eEopxRL/jUCoAy+hw5p2AAAA
+4
+52tvZpwt7ke7SLh7Wu8+dAAA
+H4j8vTBOc0eXpDbcQy6XKgAA
+1T+A4D1Dlk6oc92ipaYHTAAA
+//d5rYX00kSadIjZATXLkQAA
+
+
+J0n/XHnyekSunJdeH0mEDQAA
+b7wciCk340WnIYs2OIA/WwAA
+OyfKjrwclU2EfzNdA7qZfQAA
+4
+0FPOcrOAAEyTHaBjqHuJWwAA
+6dMenPZ7Jk2dKLDRE+G+fwAA
+dJl8YShJE0eVerGFHladpQAA
+dTS7LeSZREK6sywABVTcKgAA
+
+
+J0n/XHnyekSunJdeH0mEDQAA
+4
+DtIC50CGKUW19UVlPVJ/rQAA
+P+a9iueZMkSHeED9uGwq3QAA
+dhDEx3OZ10qUrgOXluzaSAAA
+H5eUuW6oU02vmED1UIByHAAA
+2
+
+p+FnuqzelUKJ5KAPzXxKigAA
+b7wciCk340WnIYs2OIA/WwAA
+4
+IQP5Slkz20u7Y4z8G/twqgAA
+rK1AqbIIZU6ylHKld05Y1AAA
+NIsz9ES0HUKNoSqEdYPWvQAA
+HTsR7hBYFkyR5xKfnkaVSQAA
+
+
+akAggregate
+1
+p+FnuqzelUKJ5KAPzXxKigAA
+eEopxRL/jUCoAy+hw5p2AAAA
+4
+/Ggfu2JynUyhL8ly60GPaAAA
+ndwr+XRf1k+jaUNhCtSv+AAA
+QVd3RrZ6/UWFhEDn2tk36wAA
+lBKTBzvT3E+LTo1rmN3XWgAA
+
+
+
+J0n/XHnyekSunJdeH0mEDQAA
+4
+wdXPTguwBE2HA/jL7Jls9gAA
+b3bHmMWkl0WWSUMFtKLztAAA
+ONiO/3uMXUGe7qmsVpNwwwAA
+NoZe9o+qQ0indXOU+GJFBQAA
+2
+
+False
+5WOr+9h2DUaYQbz6rZ7/9AAA
+NHJ486vDiUmN0lfkD/1ZzgAA
+4
+xruw2YIaT0W+MNniDQdOmwAA
+u2WOJawdw0WdlXNXdZ92uQAA
+UYjd65Bl5kipsWrx+gZALwAA
+pU4+gOG4RUuAFodY9yWbZQAA
+
+
+5WOr+9h2DUaYQbz6rZ7/9AAA
+OyfKjrwclU2EfzNdA7qZfQAA
+4
+wt6n3n10JkGMur/0XAd2vwAA
+6wK5U7X1rE+OIBhWTP/2sAAA
+Xno1BIQ2Rk6nMMup+xJLeAAA
+xcepG51jT06ZPhVaW0nW7gAA
+
+
+1
+
+Work Flow
+J0n/XHnyekSunJdeH0mEDQAA
+2
+
+Sample-1
+5Xea+2Ha3kuZqH6rjIWf7AAA
+1
+
+Sample
+False
+mskNameAndType
+1QTFfJIkv0Oe+uLEcmTfCQAA
+
+Ss3Zh8ovG0K0+mzviNMvoQAA
+83
+
+clMaroon
+$00B9FFFF
+88
+120
+119
+1057
+wQGBjVheXk6JUG6UyHLOLQAA
+
+
+4
+My Logic Controller
+
+
+False
+
+
+False
+
+
+
+wQGBjVheXk6JUG6UyHLOLQAA
+
+
+
+clMaroon
+$00B9FFFF
+320
+120
+139
+1057
+Amawaz/I9kSR3ZRprOaA0QAA
+
+
+4
+My TCP Agent Listener
+
+
+False
+
+
+False
+
+
+
+Amawaz/I9kSR3ZRprOaA0QAA
+
+
+
+clMaroon
+$00E3C8C8
+592
+120
+70
+1061
+U2Za99rIrEi8z93FLSAjUAAA
+
+
+4
+TCP Agent
+
+
+False
+
+
+False
+
+
+
+U2Za99rIrEi8z93FLSAjUAAA
+
+
+
+$00F0E1FF
+900
+116
+114
+869
+j+NgCUOjNE2kmFd3hYSIegAA
+
+
+4
+Server Application
+
+
+False
+
+
+False
+
+
+
+j+NgCUOjNE2kmFd3hYSIegAA
+
+
+
+clMaroon
+$00E6CCCC
+1148
+116
+117
+869
+ychpc6mSzUOyFf7vQMlVXAAA
+
+
+4
+Server Component
+
+
+False
+
+
+False
+
+
+
+ychpc6mSzUOyFf7vQMlVXAAA
+
+
+
+clMaroon
+$00B9FFFF
+1404
+116
+108
+869
+Ta3rZIdU6E2pIcWjSM7HXgAA
+
+
+4
+Client Application
+
+
+False
+
+
+False
+
+
+
+Ta3rZIdU6E2pIcWjSM7HXgAA
+
+
+
+clMaroon
+$00FFD7FF
+1648
+120
+108
+917
+rscStAuJEkiUAz9WikX0hQAA
+
+
+4
+Client Application
+
+
+False
+
+
+False
+
+
+
+rscStAuJEkiUAz9WikX0hQAA
+
+
+
+clMaroon
+$00E6CCCC
+1884
+120
+112
+917
+lvD/j4YgmkG/Ov+o+mJZPQAA
+
+
+4
+Client Component
+
+
+False
+
+
+False
+
+
+
+lvD/j4YgmkG/Ov+o+mJZPQAA
+
+
+
+clMaroon
+$00B9FFFF
+2116
+120
+114
+913
+HdPN0QWbYUq0xPzVpVWOdwAA
+
+
+4
+Server Application
+
+
+False
+
+
+False
+
+
+
+HdPN0QWbYUq0xPzVpVWOdwAA
+
+
+
+clMaroon
+$00B9FFFF
+lsRectilinear
+957,209;1199,209
+GKqHK7uaTEeoZL1eXATu1QAA
+dpffqY3360GzYdj7w2urkQAA
+Of+EE4bQSk2dMrxBCuhmVwAA
+
+1.5707963267949
+10
+IServer := new(listener)
+GKqHK7uaTEeoZL1eXATu1QAA
+zj0gLe4XtU2J2bVhHsjKoQAA
+
+
+1.5707963267949
+25
+<<create>>
+GKqHK7uaTEeoZL1eXATu1QAA
+zj0gLe4XtU2J2bVhHsjKoQAA
+
+
+False
+-1.5707963267949
+10
+GKqHK7uaTEeoZL1eXATu1QAA
+zj0gLe4XtU2J2bVhHsjKoQAA
+
+
+1199
+209
+14
+29
+
+
+
+clMaroon
+$00B9FFFF
+lsRectilinear
+1702,216;1933,216
+twaVQAbQn0SQxSav8hKGygAA
++wCnW3yutEeNI63TdKQpkAAA
+TbZv4vmixEauqpXIdyVNdgAA
+
+1.5707963267949
+10
+IAgent := new(listener)
+twaVQAbQn0SQxSav8hKGygAA
+cCyZUo+qL02sb4GGEh3gwgAA
+
+
+1.5707963267949
+25
+<<create>>
+twaVQAbQn0SQxSav8hKGygAA
+cCyZUo+qL02sb4GGEh3gwgAA
+
+
+False
+-1.5707963267949
+10
+twaVQAbQn0SQxSav8hKGygAA
+cCyZUo+qL02sb4GGEh3gwgAA
+
+
+1933
+216
+14
+29
+
+
+
+clMaroon
+$00B9FFFF
+lsRectilinear
+147,224;382,224
+UVJZlx7WuUW8BWRWnTMKVwAA
+yexABU1UCEy5R/KkGohcEQAA
+bgjtXzPElEqJn9pi84tImgAA
+
+1.5707963267949
+10
+ITcpAgentListener := new()
+UVJZlx7WuUW8BWRWnTMKVwAA
+9LSfj24cFU+rp+nfIoeHUwAA
+
+
+1.5707963267949
+25
+<<create>>
+UVJZlx7WuUW8BWRWnTMKVwAA
+9LSfj24cFU+rp+nfIoeHUwAA
+
+
+False
+-1.5707963267949
+10
+UVJZlx7WuUW8BWRWnTMKVwAA
+9LSfj24cFU+rp+nfIoeHUwAA
+
+
+382
+224
+14
+29
+
+
+
+clMaroon
+$00B9FFFF
+lsRectilinear
+1199,236;957,236
+waLdiSPvU0aqFpb250AZIwAA
+Of+EE4bQSk2dMrxBCuhmVwAA
+dpffqY3360GzYdj7w2urkQAA
+
+1.5707963267949
+10
+server
+waLdiSPvU0aqFpb250AZIwAA
+aEtdljySnk+Jnw8H2MyfBAAA
+
+
+False
+1.5707963267949
+25
+waLdiSPvU0aqFpb250AZIwAA
+aEtdljySnk+Jnw8H2MyfBAAA
+
+
+False
+-1.5707963267949
+10
+waLdiSPvU0aqFpb250AZIwAA
+aEtdljySnk+Jnw8H2MyfBAAA
+
+
+False
+957
+236
+14
+29
+
+
+
+clMaroon
+$00B9FFFF
+lsRectilinear
+1933,242;1702,242
+RjOELc899E24BqUs1P8w2gAA
+TbZv4vmixEauqpXIdyVNdgAA
++wCnW3yutEeNI63TdKQpkAAA
+
+1.5707963267949
+10
+agent
+RjOELc899E24BqUs1P8w2gAA
+hM4zK3J2M0qTbiDJg6DftgAA
+
+
+False
+1.5707963267949
+25
+RjOELc899E24BqUs1P8w2gAA
+hM4zK3J2M0qTbiDJg6DftgAA
+
+
+False
+-1.5707963267949
+10
+RjOELc899E24BqUs1P8w2gAA
+hM4zK3J2M0qTbiDJg6DftgAA
+
+
+False
+1702
+242
+14
+29
+
+
+
+clMaroon
+$00B9FFFF
+lsRectilinear
+382,251;147,251
+mpQYN0pghkiv6UDJsnfuWwAA
+bgjtXzPElEqJn9pi84tImgAA
+yexABU1UCEy5R/KkGohcEQAA
+
+1.5707963267949
+10
+listener
+mpQYN0pghkiv6UDJsnfuWwAA
+YzPwOBpQpU2JgPIxj5MjdgAA
+
+
+False
+1.5707963267949
+25
+mpQYN0pghkiv6UDJsnfuWwAA
+YzPwOBpQpU2JgPIxj5MjdgAA
+
+
+False
+-1.5707963267949
+10
+mpQYN0pghkiv6UDJsnfuWwAA
+YzPwOBpQpU2JgPIxj5MjdgAA
+
+
+False
+147
+251
+14
+29
+
+
+
+clBlue
+$00B9FFFF
+lsRectilinear
+957,290;1199,290
+u/hYdn97j0e2w7qGm8lrPQAA
+dpffqY3360GzYdj7w2urkQAA
+Of+EE4bQSk2dMrxBCuhmVwAA
+
+clBlue
+1.5707963267949
+10
+Start()
+u/hYdn97j0e2w7qGm8lrPQAA
+81Znj6ipLE+uQJdj3I3BjAAA
+
+
+False
+1.5707963267949
+25
+u/hYdn97j0e2w7qGm8lrPQAA
+81Znj6ipLE+uQJdj3I3BjAAA
+
+
+False
+-1.5707963267949
+10
+u/hYdn97j0e2w7qGm8lrPQAA
+81Znj6ipLE+uQJdj3I3BjAAA
+
+
+1199
+290
+14
+29
+
+
+
+clMaroon
+$00E6FFE6
+440
+228
+157
+26
+Create Agent & Listener
+
+
+
+clMaroon
+$00B9FFFF
+395,238;440,239
+0Vfln1pKf0uQ0mhZitJAzgAA
+v2rXGeEJu0GEcQH90sDU+wAA
+
+
+clMaroon
+$00E6FFE6
+468
+384
+85
+26
+Start Agent
+
+
+
+clMaroon
+$00B9FFFF
+620,328;533,253
+0Vfln1pKf0uQ0mhZitJAzgAA
+/og21wPYTEaycNPMQZkZUQAA
+
+
+clMaroon
+$00B9FFFF
+620,441;542,409
+Qv2CPimlhkSTXPkCIxPjLgAA
+0a1wOUQz2UiUyr3e9Bb0SwAA
+
+
+clMaroon
+$00E6FFE6
+188
+524
+126
+26
+Connect Operation
+
+
+
+clMaroon
+$00B9FFFF
+620,509;313,531
+gkqUvj6zm0SHCoIe2SKckAAA
+kaymAvXvsEafxUejw5yotgAA
+
+
+clMaroon
+$00B9FFFF
+382,569;365,568
+7ttclFeTnUmkkMMP9dw/bAAA
+F7ir4qnZcEaW6UwtUzgylQAA
+
+
+clMaroon
+$00B9FFFF
+382,628;300,605
+WNyldfqfh0+nnq5wwL3X4AAA
+tvHHENZLZ0qJm4tOe/b3qQAA
+
+
+clMaroon
+$00E6FFE6
+188
+692
+109
+26
+Send Operation
+
+
+
+clMaroon
+$00B9FFFF
+620,690;296,702
+FVocQtL3gkaQluADo0iwUQAA
+9lS2iW92REyTOFXx6oFvYAAA
+
+
+clMaroon
+$00E6FFE6
+188
+552
+178
+26
+OnPrepareConnect Callback
+
+
+
+clMaroon
+$00E6FFE6
+188
+580
+133
+26
+OnConnect Callback
+
+
+
+clMaroon
+$00E6FFE6
+188
+720
+116
+26
+OnSend Callback
+
+
+
+clMaroon
+$00B9FFFF
+382,745;303,738
+L52zCnvp3UuZnci4sRI0lwAA
+knnNYW35b0Cy/WKm0z8H/QAA
+
+
+clMaroon
+$00E6FFE6
+188
+816
+131
+26
+OnReceive Callback
+
+
+
+clMaroon
+$00B9FFFF
+382,842;318,835
+Idabkcv/ikmqAFmb6MUaOgAA
++49T4AyPL0W3AJZ/WaYk+wAA
+
+
+clMaroon
+$00E6FFE6
+188
+912
+120
+26
+OnClose Callback
+
+
+
+clMaroon
+$00E6FFE6
+188
+1044
+117
+26
+Stop Operation
+
+
+
+clMaroon
+$00E6FFE6
+188
+1084
+177
+26
+OnShutdown Callback
+
+
+
+clMaroon
+$00B9FFFF
+382,941;307,932
+bNeTVtkO80is01lUjD9v/AAA
+3uAxv167jUuuqqe+9BSGmwAA
+
+
+clMaroon
+$00B9FFFF
+620,1042;304,1054
+b0nSfzl8Z0uD21Wmmjt/LAAA
+bJKMlTAo7U6yXpGRa1cWcgAA
+
+
+clMaroon
+$00B9FFFF
+382,1109;364,1107
+4KlPgeWRsUiAN23Tqg8/QgAA
+FFFK0l7+EkirZYOB3oJ25gAA
+
+
+clBlue
+$00B9FFFF
+lsRectilinear
+1702,312;1933,312
+ge2n5wRT306cnabk/HU2IgAA
++wCnW3yutEeNI63TdKQpkAAA
+TbZv4vmixEauqpXIdyVNdgAA
+
+clBlue
+1.5707963267949
+10
+Start()
+ge2n5wRT306cnabk/HU2IgAA
+ONHfDMi2cE6eUYVGDXwgGwAA
+
+
+False
+1.5707963267949
+25
+ge2n5wRT306cnabk/HU2IgAA
+ONHfDMi2cE6eUYVGDXwgGwAA
+
+
+False
+-1.5707963267949
+10
+ge2n5wRT306cnabk/HU2IgAA
+ONHfDMi2cE6eUYVGDXwgGwAA
+
+
+1933
+312
+14
+29
+
+
+
+clPurple
+$00B9FFFF
+lsRectilinear
+1199,314;957,314
+KjbQrlapxE2xRsUF2q8bDwAA
+Of+EE4bQSk2dMrxBCuhmVwAA
+dpffqY3360GzYdj7w2urkQAA
+
+clPurple
+1.5707963267949
+10
+OnPrepareListen
+KjbQrlapxE2xRsUF2q8bDwAA
+gHBXKkyxe0K1OBNbZXeV3wAA
+
+
+False
+1.5707963267949
+25
+KjbQrlapxE2xRsUF2q8bDwAA
+gHBXKkyxe0K1OBNbZXeV3wAA
+
+
+False
+-1.5707963267949
+10
+KjbQrlapxE2xRsUF2q8bDwAA
+gHBXKkyxe0K1OBNbZXeV3wAA
+
+
+False
+957
+314
+14
+29
+
+
+
+clMaroon
+$00B9FFFF
+lsRectilinear
+147,319;620,319
+eiRtiRQwQU+VjHaN3rVhqAAA
+mNvSnPlpGUa+X6DT/4CU0gAA
+bgjtXzPElEqJn9pi84tImgAA
+
+1.5707963267949
+10
+ITcpAgent := new(listener)
+eiRtiRQwQU+VjHaN3rVhqAAA
+TvRznbBpRE+w6+5JbXI1MQAA
+
+
+1.5707963267949
+25
+<<create>>
+eiRtiRQwQU+VjHaN3rVhqAAA
+TvRznbBpRE+w6+5JbXI1MQAA
+
+
+False
+-1.5707963267949
+10
+eiRtiRQwQU+VjHaN3rVhqAAA
+TvRznbBpRE+w6+5JbXI1MQAA
+
+
+620
+319
+14
+29
+
+
+
+clMaroon
+$00B9FFFF
+lsRectilinear
+620,346;147,346
+gc1T6rnMnUylWpF5/By8ZAAA
+bgjtXzPElEqJn9pi84tImgAA
+mNvSnPlpGUa+X6DT/4CU0gAA
+
+1.5707963267949
+10
+agent
+gc1T6rnMnUylWpF5/By8ZAAA
+Mwl65WlBAkWLprLAGAE5rwAA
+
+
+False
+1.5707963267949
+25
+gc1T6rnMnUylWpF5/By8ZAAA
+Mwl65WlBAkWLprLAGAE5rwAA
+
+
+False
+-1.5707963267949
+10
+gc1T6rnMnUylWpF5/By8ZAAA
+Mwl65WlBAkWLprLAGAE5rwAA
+
+
+False
+147
+346
+14
+29
+
+
+
+clPurple
+$00B9FFFF
+lsRectilinear
+1206,395;957,395
+q1qjKctdRE2v7HKXDklokQAA
+Of+EE4bQSk2dMrxBCuhmVwAA
+dpffqY3360GzYdj7w2urkQAA
+
+clPurple
+1.5707963267949
+10
+OnAccept
+q1qjKctdRE2v7HKXDklokQAA
+aeW3gGFMI0i5mnoP8rzsewAA
+
+
+False
+1.5707963267949
+25
+q1qjKctdRE2v7HKXDklokQAA
+aeW3gGFMI0i5mnoP8rzsewAA
+
+
+False
+-1.5707963267949
+10
+q1qjKctdRE2v7HKXDklokQAA
+aeW3gGFMI0i5mnoP8rzsewAA
+
+
+False
+957
+395
+14
+29
+
+
+
+$00B9FFFF
+lsRectilinear
+1458,395;1206,395
+hhg1h6MW70ylqCivIbWRXQAA
+dpffqY3360GzYdj7w2urkQAA
+DKt3hU+zzUSpte7zoVHRzQAA
+
+1.5707963267949
+10
+Connect
+hhg1h6MW70ylqCivIbWRXQAA
+CAh9vY3mukOvRlolvYiXeQAA
+
+
+False
+1.5707963267949
+25
+hhg1h6MW70ylqCivIbWRXQAA
+CAh9vY3mukOvRlolvYiXeQAA
+
+
+False
+-1.5707963267949
+10
+hhg1h6MW70ylqCivIbWRXQAA
+CAh9vY3mukOvRlolvYiXeQAA
+
+
+False
+1206
+395
+14
+29
+
+
+
+clBlue
+$00B9FFFF
+lsRectilinear
+1702,404;1933,404
+UiC+SdjuLkO6xrRIGFh2PAAA
++wCnW3yutEeNI63TdKQpkAAA
+TbZv4vmixEauqpXIdyVNdgAA
+
+clBlue
+1.5707963267949
+10
+Connect()
+UiC+SdjuLkO6xrRIGFh2PAAA
+x12y5MX61kSU8UEZBCKBzAAA
+
+
+False
+1.5707963267949
+25
+UiC+SdjuLkO6xrRIGFh2PAAA
+x12y5MX61kSU8UEZBCKBzAAA
+
+
+False
+-1.5707963267949
+10
+UiC+SdjuLkO6xrRIGFh2PAAA
+x12y5MX61kSU8UEZBCKBzAAA
+
+
+1933
+404
+14
+57
+
+
+
+clBlue
+$00B9FFFF
+lsRectilinear
+147,429;620,429
+3ll2HhKX0kq8L2WoIISIqQAA
+mNvSnPlpGUa+X6DT/4CU0gAA
+bgjtXzPElEqJn9pi84tImgAA
+
+clNavy
+1.5707963267949
+10
+Start()
+3ll2HhKX0kq8L2WoIISIqQAA
+HnK/vetZsE2Zoo9YLGV1KgAA
+
+
+False
+1.5707963267949
+25
+3ll2HhKX0kq8L2WoIISIqQAA
+HnK/vetZsE2Zoo9YLGV1KgAA
+
+
+False
+-1.5707963267949
+10
+3ll2HhKX0kq8L2WoIISIqQAA
+HnK/vetZsE2Zoo9YLGV1KgAA
+
+
+620
+429
+14
+29
+
+
+
+clPurple
+$00B9FFFF
+clPurple
+lsRectilinear
+1933,430;1702,430
+FYipeeoMCUm19jcfhm3biAAA
+TbZv4vmixEauqpXIdyVNdgAA
++wCnW3yutEeNI63TdKQpkAAA
+
+clPurple
+clPurple
+1.5707963267949
+10
+OnPrepareConnect
+FYipeeoMCUm19jcfhm3biAAA
+PMbi1EVd7kmNs8rUg0gpgwAA
+
+
+False
+1.5707963267949
+25
+FYipeeoMCUm19jcfhm3biAAA
+PMbi1EVd7kmNs8rUg0gpgwAA
+
+
+False
+-1.5707963267949
+10
+FYipeeoMCUm19jcfhm3biAAA
+PMbi1EVd7kmNs8rUg0gpgwAA
+
+
+False
+1702
+430
+14
+56
+
+
+
+clPurple
+$00B9FFFF
+clPurple
+lsRectilinear
+1933,457;1702,457
+/bHgYzIBqECI2mdaGkoJMwAA
+TbZv4vmixEauqpXIdyVNdgAA
++wCnW3yutEeNI63TdKQpkAAA
+
+clPurple
+clPurple
+1.5707963267949
+10
+OnConnect
+/bHgYzIBqECI2mdaGkoJMwAA
+K1jfKNg6hUSMEfA71rVwswAA
+
+
+False
+1.5707963267949
+25
+/bHgYzIBqECI2mdaGkoJMwAA
+K1jfKNg6hUSMEfA71rVwswAA
+
+
+False
+-1.5707963267949
+10
+/bHgYzIBqECI2mdaGkoJMwAA
+K1jfKNg6hUSMEfA71rVwswAA
+
+
+False
+1702
+457
+14
+29
+
+
+
+$00B9FFFF
+lsRectilinear
+1946,457;2173,457
+NUW8ZK/ERk2X3umbnhegzwAA
+W7BRFi1ZrESz7J7YQP9lKAAA
++wCnW3yutEeNI63TdKQpkAAA
+
+1.5707963267949
+10
+Connect
+NUW8ZK/ERk2X3umbnhegzwAA
+Uva/yeEJ00eMzNPCIyuWZAAA
+
+
+False
+1.5707963267949
+25
+NUW8ZK/ERk2X3umbnhegzwAA
+Uva/yeEJ00eMzNPCIyuWZAAA
+
+
+False
+-1.5707963267949
+10
+NUW8ZK/ERk2X3umbnhegzwAA
+Uva/yeEJ00eMzNPCIyuWZAAA
+
+
+False
+2173
+457
+14
+29
+
+
+
+clBlue
+$00B9FFFF
+lsRectilinear
+147,495;620,495
+qxo3boab2UKQT7Y0WGaO5wAA
+mNvSnPlpGUa+X6DT/4CU0gAA
+bgjtXzPElEqJn9pi84tImgAA
+
+clNavy
+1.5707963267949
+10
+Connect(address, port)
+qxo3boab2UKQT7Y0WGaO5wAA
+eYJrYhPCEUS7T6jsSTfTGAAA
+
+
+False
+1.5707963267949
+25
+qxo3boab2UKQT7Y0WGaO5wAA
+eYJrYhPCEUS7T6jsSTfTGAAA
+
+
+False
+-1.5707963267949
+10
+qxo3boab2UKQT7Y0WGaO5wAA
+eYJrYhPCEUS7T6jsSTfTGAAA
+
+
+620
+495
+14
+29
+
+
+
+clPurple
+$00B9FFFF
+lsRectilinear
+1206,503;957,503
+xbH85UKQlESFWJculb723gAA
+Of+EE4bQSk2dMrxBCuhmVwAA
+dpffqY3360GzYdj7w2urkQAA
+
+clPurple
+1.5707963267949
+10
+OnReceive
+xbH85UKQlESFWJculb723gAA
+OLadb8YV2kW2/OneXcT5fAAA
+
+
+False
+1.5707963267949
+25
+xbH85UKQlESFWJculb723gAA
+OLadb8YV2kW2/OneXcT5fAAA
+
+
+False
+-1.5707963267949
+10
+xbH85UKQlESFWJculb723gAA
+OLadb8YV2kW2/OneXcT5fAAA
+
+
+False
+957
+503
+14
+29
+
+
+
+$00B9FFFF
+lsRectilinear
+1458,503;1206,503
+/VRCJTy/oEur+ilCjeW2XgAA
+dpffqY3360GzYdj7w2urkQAA
+DKt3hU+zzUSpte7zoVHRzQAA
+
+1.5707963267949
+10
+Send
+/VRCJTy/oEur+ilCjeW2XgAA
+k+k1sVK/4kCTCrxJp3KZmAAA
+
+
+False
+1.5707963267949
+25
+/VRCJTy/oEur+ilCjeW2XgAA
+k+k1sVK/4kCTCrxJp3KZmAAA
+
+
+False
+-1.5707963267949
+10
+/VRCJTy/oEur+ilCjeW2XgAA
+k+k1sVK/4kCTCrxJp3KZmAAA
+
+
+False
+1206
+503
+14
+29
+
+
+
+clBlue
+$00B9FFFF
+lsRectilinear
+1702,548;1933,548
+3BL7NFdLw0yo7RLubFSFzQAA
++wCnW3yutEeNI63TdKQpkAAA
+TbZv4vmixEauqpXIdyVNdgAA
+
+clBlue
+1.5707963267949
+10
+Send()
+3BL7NFdLw0yo7RLubFSFzQAA
+fRP4qNvR302+2rcIff42YQAA
+
+
+False
+1.5707963267949
+25
+3BL7NFdLw0yo7RLubFSFzQAA
+fRP4qNvR302+2rcIff42YQAA
+
+
+False
+-1.5707963267949
+10
+3BL7NFdLw0yo7RLubFSFzQAA
+fRP4qNvR302+2rcIff42YQAA
+
+
+1933
+548
+14
+29
+
+
+
+$00A703B4
+$00B9FFFF
+lsRectilinear
+627,555;395,555
+Wjv7v/0JW0SsHdI2VbWR+AAA
+yexABU1UCEy5R/KkGohcEQAA
+mNvSnPlpGUa+X6DT/4CU0gAA
+
+clMaroon
+1.5707963267949
+10
+OnPrepareConnect(connid)
+Wjv7v/0JW0SsHdI2VbWR+AAA
+jEQTYK+V2062OgAJI9+KJgAA
+
+
+False
+1.5707963267949
+25
+Wjv7v/0JW0SsHdI2VbWR+AAA
+jEQTYK+V2062OgAJI9+KJgAA
+
+
+False
+-1.5707963267949
+10
+Wjv7v/0JW0SsHdI2VbWR+AAA
+jEQTYK+V2062OgAJI9+KJgAA
+
+
+382
+555
+14
+29
+
+
+
+clPurple
+$00B9FFFF
+clPurple
+lsRectilinear
+1933,572;1702,572
+oF/LEA7hx0qNduBcIVAMJQAA
+TbZv4vmixEauqpXIdyVNdgAA
++wCnW3yutEeNI63TdKQpkAAA
+
+clPurple
+clPurple
+1.5707963267949
+10
+OnSend
+oF/LEA7hx0qNduBcIVAMJQAA
++vTGrF2zx0OWj4eXWblGowAA
+
+
+False
+1.5707963267949
+25
+oF/LEA7hx0qNduBcIVAMJQAA
++vTGrF2zx0OWj4eXWblGowAA
+
+
+False
+-1.5707963267949
+10
+oF/LEA7hx0qNduBcIVAMJQAA
++vTGrF2zx0OWj4eXWblGowAA
+
+
+False
+1702
+572
+14
+29
+
+
+
+$00B9FFFF
+lsRectilinear
+1946,572;2173,572
+1vb2mQKxZ0+r/MA4zbJgbwAA
+W7BRFi1ZrESz7J7YQP9lKAAA
++wCnW3yutEeNI63TdKQpkAAA
+
+1.5707963267949
+10
+Send
+1vb2mQKxZ0+r/MA4zbJgbwAA
+QO8N1X6VLky4cZtNH/bVqQAA
+
+
+False
+1.5707963267949
+25
+1vb2mQKxZ0+r/MA4zbJgbwAA
+QO8N1X6VLky4cZtNH/bVqQAA
+
+
+False
+-1.5707963267949
+10
+1vb2mQKxZ0+r/MA4zbJgbwAA
+QO8N1X6VLky4cZtNH/bVqQAA
+
+
+False
+2173
+572
+14
+29
+
+
+
+$00A703B4
+$00B9FFFF
+lsRectilinear
+627,616;395,616
+8p8OEDcPcEqcPclkWC6twgAA
+yexABU1UCEy5R/KkGohcEQAA
+mNvSnPlpGUa+X6DT/4CU0gAA
+
+clMaroon
+1.5707963267949
+10
+OnConnect(connid)
+8p8OEDcPcEqcPclkWC6twgAA
+H7uvq6t59UCNEZljpwH1GAAA
+
+
+False
+1.5707963267949
+25
+8p8OEDcPcEqcPclkWC6twgAA
+H7uvq6t59UCNEZljpwH1GAAA
+
+
+False
+-1.5707963267949
+10
+8p8OEDcPcEqcPclkWC6twgAA
+H7uvq6t59UCNEZljpwH1GAAA
+
+
+382
+616
+14
+29
+
+
+
+clBlue
+$00B9FFFF
+lsRectilinear
+957,616;1199,616
+kAJ6OYlT5kSWgt6Y8JB6KQAA
+dpffqY3360GzYdj7w2urkQAA
+Of+EE4bQSk2dMrxBCuhmVwAA
+
+clBlue
+1.5707963267949
+10
+Send()
+kAJ6OYlT5kSWgt6Y8JB6KQAA
+/VoO4MkQoUqEWr+dUv9R5AAA
+
+
+False
+1.5707963267949
+25
+kAJ6OYlT5kSWgt6Y8JB6KQAA
+/VoO4MkQoUqEWr+dUv9R5AAA
+
+
+False
+-1.5707963267949
+10
+kAJ6OYlT5kSWgt6Y8JB6KQAA
+/VoO4MkQoUqEWr+dUv9R5AAA
+
+
+1199
+616
+14
+33
+
+
+
+clPurple
+$00B9FFFF
+lsRectilinear
+1199,644;957,644
+0exvc+RmxE++FLqQZ+YzawAA
+Of+EE4bQSk2dMrxBCuhmVwAA
+dpffqY3360GzYdj7w2urkQAA
+
+clPurple
+1.5707963267949
+10
+OnSend
+0exvc+RmxE++FLqQZ+YzawAA
+9lFefDL9EkGWx+GRTnrIZgAA
+
+
+False
+1.5707963267949
+25
+0exvc+RmxE++FLqQZ+YzawAA
+9lFefDL9EkGWx+GRTnrIZgAA
+
+
+False
+-1.5707963267949
+10
+0exvc+RmxE++FLqQZ+YzawAA
+9lFefDL9EkGWx+GRTnrIZgAA
+
+
+False
+957
+644
+14
+29
+
+
+
+$00B9FFFF
+lsRectilinear
+1212,644;1458,644
+9Ol7xVDHfk+aOrYlU/XxDAAA
+DKt3hU+zzUSpte7zoVHRzQAA
+dpffqY3360GzYdj7w2urkQAA
+
+1.5707963267949
+10
+Send
+9Ol7xVDHfk+aOrYlU/XxDAAA
+s2d3Z0E0+kKI8W+SNgARXAAA
+
+
+False
+1.5707963267949
+25
+9Ol7xVDHfk+aOrYlU/XxDAAA
+s2d3Z0E0+kKI8W+SNgARXAAA
+
+
+False
+-1.5707963267949
+10
+9Ol7xVDHfk+aOrYlU/XxDAAA
+s2d3Z0E0+kKI8W+SNgARXAAA
+
+
+False
+1458
+644
+14
+29
+
+
+
+clBlue
+$00B9FFFF
+lsRectilinear
+147,676;620,676
+0gQj+YWF1kWUYfNhSvBRRgAA
+mNvSnPlpGUa+X6DT/4CU0gAA
+bgjtXzPElEqJn9pi84tImgAA
+
+clNavy
+1.5707963267949
+10
+Send(connid, data, length)
+0gQj+YWF1kWUYfNhSvBRRgAA
+niqU3lxUj06wxkIb2xcgfwAA
+
+
+False
+1.5707963267949
+25
+0gQj+YWF1kWUYfNhSvBRRgAA
+niqU3lxUj06wxkIb2xcgfwAA
+
+
+False
+-1.5707963267949
+10
+0gQj+YWF1kWUYfNhSvBRRgAA
+niqU3lxUj06wxkIb2xcgfwAA
+
+
+620
+676
+14
+29
+
+
+
+clPurple
+$00B9FFFF
+clPurple
+lsRectilinear
+1940,676;1702,676
+mErn0SwL4kWgwh37KhxrOwAA
+TbZv4vmixEauqpXIdyVNdgAA
++wCnW3yutEeNI63TdKQpkAAA
+
+clPurple
+clPurple
+1.5707963267949
+10
+OnReceive
+mErn0SwL4kWgwh37KhxrOwAA
+YkEmXAqy9EevsUZJVhd0hwAA
+
+
+False
+1.5707963267949
+25
+mErn0SwL4kWgwh37KhxrOwAA
+YkEmXAqy9EevsUZJVhd0hwAA
+
+
+False
+-1.5707963267949
+10
+mErn0SwL4kWgwh37KhxrOwAA
+YkEmXAqy9EevsUZJVhd0hwAA
+
+
+False
+1702
+676
+14
+29
+
+
+
+$00B9FFFF
+lsRectilinear
+2173,676;1940,676
+PSWE8W0TEU+2XvyhDfkDzgAA
++wCnW3yutEeNI63TdKQpkAAA
+W7BRFi1ZrESz7J7YQP9lKAAA
+
+1.5707963267949
+10
+Send
+PSWE8W0TEU+2XvyhDfkDzgAA
+CWRCDraG50e3xZDvX5vLpQAA
+
+
+False
+1.5707963267949
+25
+PSWE8W0TEU+2XvyhDfkDzgAA
+CWRCDraG50e3xZDvX5vLpQAA
+
+
+False
+-1.5707963267949
+10
+PSWE8W0TEU+2XvyhDfkDzgAA
+CWRCDraG50e3xZDvX5vLpQAA
+
+
+False
+1940
+676
+14
+29
+
+
+
+clPurple
+$00B9FFFF
+lsRectilinear
+1206,724;957,724
+1hZ1Ivgi7UWnVEcQGQ9xdwAA
+Of+EE4bQSk2dMrxBCuhmVwAA
+dpffqY3360GzYdj7w2urkQAA
+
+clPurple
+1.5707963267949
+10
+OnClose
+1hZ1Ivgi7UWnVEcQGQ9xdwAA
+KbnvIzhjfEWFVgq1gekqXAAA
+
+
+False
+1.5707963267949
+25
+1hZ1Ivgi7UWnVEcQGQ9xdwAA
+KbnvIzhjfEWFVgq1gekqXAAA
+
+
+False
+-1.5707963267949
+10
+1hZ1Ivgi7UWnVEcQGQ9xdwAA
+KbnvIzhjfEWFVgq1gekqXAAA
+
+
+False
+957
+724
+14
+29
+
+
+
+$00B9FFFF
+lsRectilinear
+1458,724;1206,724
+aXyZYOKcl0mBOwUqTqobmgAA
+dpffqY3360GzYdj7w2urkQAA
+DKt3hU+zzUSpte7zoVHRzQAA
+
+1.5707963267949
+10
+Disconnect
+aXyZYOKcl0mBOwUqTqobmgAA
+zMOiSN3GsEiMtDJA5EV00wAA
+
+
+False
+1.5707963267949
+25
+aXyZYOKcl0mBOwUqTqobmgAA
+zMOiSN3GsEiMtDJA5EV00wAA
+
+
+False
+-1.5707963267949
+10
+aXyZYOKcl0mBOwUqTqobmgAA
+zMOiSN3GsEiMtDJA5EV00wAA
+
+
+False
+1206
+724
+14
+29
+
+
+
+$00A703B4
+$00B9FFFF
+lsRectilinear
+627,732;395,732
+5CQCgkQMiEa8EdVYKZGhowAA
+yexABU1UCEy5R/KkGohcEQAA
+mNvSnPlpGUa+X6DT/4CU0gAA
+
+clMaroon
+1.5707963267949
+10
+OnSend(connid, data, length)
+5CQCgkQMiEa8EdVYKZGhowAA
+YpPwITXi7ESS5zzS/nJtdgAA
+
+
+False
+1.5707963267949
+25
+5CQCgkQMiEa8EdVYKZGhowAA
+YpPwITXi7ESS5zzS/nJtdgAA
+
+
+False
+-1.5707963267949
+10
+5CQCgkQMiEa8EdVYKZGhowAA
+YpPwITXi7ESS5zzS/nJtdgAA
+
+
+382
+732
+14
+29
+
+
+
+clPurple
+$00B9FFFF
+clPurple
+lsRectilinear
+1940,764;1702,764
+9lUxZSoXvkOOzpV4doFFPwAA
+TbZv4vmixEauqpXIdyVNdgAA
++wCnW3yutEeNI63TdKQpkAAA
+
+clPurple
+clPurple
+1.5707963267949
+10
+OnClose
+9lUxZSoXvkOOzpV4doFFPwAA
+YfuBDr8+XEGC/f0KAwYlMwAA
+
+
+False
+1.5707963267949
+25
+9lUxZSoXvkOOzpV4doFFPwAA
+YfuBDr8+XEGC/f0KAwYlMwAA
+
+
+False
+-1.5707963267949
+10
+9lUxZSoXvkOOzpV4doFFPwAA
+YfuBDr8+XEGC/f0KAwYlMwAA
+
+
+False
+1702
+764
+14
+29
+
+
+
+$00B9FFFF
+lsRectilinear
+2173,764;1940,764
+79YTw4PBt0qttSuIpUL7HQAA
++wCnW3yutEeNI63TdKQpkAAA
+W7BRFi1ZrESz7J7YQP9lKAAA
+
+1.5707963267949
+10
+Disconnect
+79YTw4PBt0qttSuIpUL7HQAA
+y1T7PceGOk+3n0Ql8l12UgAA
+
+
+False
+1.5707963267949
+25
+79YTw4PBt0qttSuIpUL7HQAA
+y1T7PceGOk+3n0Ql8l12UgAA
+
+
+False
+-1.5707963267949
+10
+79YTw4PBt0qttSuIpUL7HQAA
+y1T7PceGOk+3n0Ql8l12UgAA
+
+
+False
+1940
+764
+14
+29
+
+
+
+clBlue
+$00B9FFFF
+lsRectilinear
+957,812;1199,812
+RakUMYixx0eokaMaO8399AAA
+dpffqY3360GzYdj7w2urkQAA
+Of+EE4bQSk2dMrxBCuhmVwAA
+
+clBlue
+1.5707963267949
+10
+Disconnect()
+RakUMYixx0eokaMaO8399AAA
+H0hhU481MUSlr+PpVelBqwAA
+
+
+False
+1.5707963267949
+25
+RakUMYixx0eokaMaO8399AAA
+H0hhU481MUSlr+PpVelBqwAA
+
+
+False
+-1.5707963267949
+10
+RakUMYixx0eokaMaO8399AAA
+H0hhU481MUSlr+PpVelBqwAA
+
+
+1199
+812
+14
+29
+
+
+
+$00A703B4
+$00B9FFFF
+lsRectilinear
+627,829;395,829
+OtUn1tUnHUiiI6GLtYamBwAA
+yexABU1UCEy5R/KkGohcEQAA
+mNvSnPlpGUa+X6DT/4CU0gAA
+
+clMaroon
+1.5707963267949
+10
+OnReceive(connid, data, length)
+OtUn1tUnHUiiI6GLtYamBwAA
+vPOw9w4yJE+eo3dYsSWrBAAA
+
+
+False
+1.5707963267949
+25
+OtUn1tUnHUiiI6GLtYamBwAA
+vPOw9w4yJE+eo3dYsSWrBAAA
+
+
+False
+-1.5707963267949
+10
+OtUn1tUnHUiiI6GLtYamBwAA
+vPOw9w4yJE+eo3dYsSWrBAAA
+
+
+382
+829
+14
+29
+
+
+
+clPurple
+$00B9FFFF
+lsRectilinear
+1199,836;957,836
+qB+snL4IlEeGy2CTYMy/zAAA
+Of+EE4bQSk2dMrxBCuhmVwAA
+dpffqY3360GzYdj7w2urkQAA
+
+clPurple
+1.5707963267949
+10
+OnClose
+qB+snL4IlEeGy2CTYMy/zAAA
+mYJo9K+KDEi+F3GgmHC8MAAA
+
+
+False
+1.5707963267949
+25
+qB+snL4IlEeGy2CTYMy/zAAA
+mYJo9K+KDEi+F3GgmHC8MAAA
+
+
+False
+-1.5707963267949
+10
+qB+snL4IlEeGy2CTYMy/zAAA
+mYJo9K+KDEi+F3GgmHC8MAAA
+
+
+False
+957
+836
+14
+29
+
+
+
+$00B9FFFF
+lsRectilinear
+1212,836;1458,836
+Mj5U0wte/Ui52pM+Nh0WIgAA
+DKt3hU+zzUSpte7zoVHRzQAA
+dpffqY3360GzYdj7w2urkQAA
+
+1.5707963267949
+10
+Disconnect
+Mj5U0wte/Ui52pM+Nh0WIgAA
+vmvOU5NFGkOJH7BYW+rfLQAA
+
+
+False
+1.5707963267949
+25
+Mj5U0wte/Ui52pM+Nh0WIgAA
+vmvOU5NFGkOJH7BYW+rfLQAA
+
+
+False
+-1.5707963267949
+10
+Mj5U0wte/Ui52pM+Nh0WIgAA
+vmvOU5NFGkOJH7BYW+rfLQAA
+
+
+False
+1458
+836
+14
+29
+
+
+
+clBlue
+$00B9FFFF
+lsRectilinear
+1702,864;1933,864
+pvIA8HpUU0eAf/CRON6ISQAA
++wCnW3yutEeNI63TdKQpkAAA
+TbZv4vmixEauqpXIdyVNdgAA
+
+clBlue
+1.5707963267949
+10
+Disconnect()
+pvIA8HpUU0eAf/CRON6ISQAA
+iS+1y0N6I0eiK+0IWQQe2gAA
+
+
+False
+1.5707963267949
+25
+pvIA8HpUU0eAf/CRON6ISQAA
+iS+1y0N6I0eiK+0IWQQe2gAA
+
+
+False
+-1.5707963267949
+10
+pvIA8HpUU0eAf/CRON6ISQAA
+iS+1y0N6I0eiK+0IWQQe2gAA
+
+
+1933
+864
+14
+29
+
+
+
+$00B9FFFF
+lsRectilinear
+1946,888;2173,888
+bylpP6WP+0+xDkDWbCho6AAA
+W7BRFi1ZrESz7J7YQP9lKAAA
++wCnW3yutEeNI63TdKQpkAAA
+
+1.5707963267949
+10
+Disconnect
+bylpP6WP+0+xDkDWbCho6AAA
+yP78nj+bZk+75vsYWcgXGwAA
+
+
+False
+1.5707963267949
+25
+bylpP6WP+0+xDkDWbCho6AAA
+yP78nj+bZk+75vsYWcgXGwAA
+
+
+False
+-1.5707963267949
+10
+bylpP6WP+0+xDkDWbCho6AAA
+yP78nj+bZk+75vsYWcgXGwAA
+
+
+False
+2173
+888
+14
+29
+
+
+
+clPurple
+$00B9FFFF
+clPurple
+lsRectilinear
+1933,889;1702,889
+yCsrGZ0ZX0eRnh7MrDJ8fwAA
+TbZv4vmixEauqpXIdyVNdgAA
++wCnW3yutEeNI63TdKQpkAAA
+
+clPurple
+clPurple
+1.5707963267949
+10
+OnClose
+yCsrGZ0ZX0eRnh7MrDJ8fwAA
+GW3/+fr0HEewn0AavM5PHQAA
+
+
+False
+1.5707963267949
+25
+yCsrGZ0ZX0eRnh7MrDJ8fwAA
+GW3/+fr0HEewn0AavM5PHQAA
+
+
+False
+-1.5707963267949
+10
+yCsrGZ0ZX0eRnh7MrDJ8fwAA
+GW3/+fr0HEewn0AavM5PHQAA
+
+
+False
+1702
+889
+14
+29
+
+
+
+clBlue
+$00B9FFFF
+lsRectilinear
+957,904;1199,904
+PT5rHARWmkS/g4IqVuPQbwAA
+dpffqY3360GzYdj7w2urkQAA
+Of+EE4bQSk2dMrxBCuhmVwAA
+
+clBlue
+1.5707963267949
+10
+Stop()
+PT5rHARWmkS/g4IqVuPQbwAA
+WfhIgUdxekSnY02eBkGaEgAA
+
+
+False
+1.5707963267949
+25
+PT5rHARWmkS/g4IqVuPQbwAA
+WfhIgUdxekSnY02eBkGaEgAA
+
+
+False
+-1.5707963267949
+10
+PT5rHARWmkS/g4IqVuPQbwAA
+WfhIgUdxekSnY02eBkGaEgAA
+
+
+1199
+904
+14
+29
+
+
+
+$00A703B4
+$00B9FFFF
+lsRectilinear
+627,928;395,928
+/HUsBl+/S0CY4MtM5ABl2AAA
+yexABU1UCEy5R/KkGohcEQAA
+mNvSnPlpGUa+X6DT/4CU0gAA
+
+clMaroon
+1.5707963267949
+10
+OnClose(connid, operation, code)
+/HUsBl+/S0CY4MtM5ABl2AAA
+WTcgBUL5lk60yTAJ6+Ym8QAA
+
+
+False
+1.5707963267949
+25
+/HUsBl+/S0CY4MtM5ABl2AAA
+WTcgBUL5lk60yTAJ6+Ym8QAA
+
+
+False
+-1.5707963267949
+10
+/HUsBl+/S0CY4MtM5ABl2AAA
+WTcgBUL5lk60yTAJ6+Ym8QAA
+
+
+382
+928
+14
+29
+
+
+
+clPurple
+$00B9FFFF
+lsRectilinear
+1199,928;957,928
+yyMM+2gkDEehAYP+raNxDQAA
+Of+EE4bQSk2dMrxBCuhmVwAA
+dpffqY3360GzYdj7w2urkQAA
+
+clPurple
+1.5707963267949
+10
+OnShutdown
+yyMM+2gkDEehAYP+raNxDQAA
+ElAEbekWtEO22kTeSu21VgAA
+
+
+False
+1.5707963267949
+25
+yyMM+2gkDEehAYP+raNxDQAA
+ElAEbekWtEO22kTeSu21VgAA
+
+
+False
+-1.5707963267949
+10
+yyMM+2gkDEehAYP+raNxDQAA
+ElAEbekWtEO22kTeSu21VgAA
+
+
+False
+957
+928
+14
+29
+
+
+
+clBlue
+$00B9FFFF
+lsRectilinear
+1702,968;1933,968
+czN9bfI5G0KZ0agADz5LWAAA
++wCnW3yutEeNI63TdKQpkAAA
+TbZv4vmixEauqpXIdyVNdgAA
+
+clBlue
+1.5707963267949
+10
+Stop()
+czN9bfI5G0KZ0agADz5LWAAA
+ho/lDUk1MEiX91DNXOY2JAAA
+
+
+False
+1.5707963267949
+25
+czN9bfI5G0KZ0agADz5LWAAA
+ho/lDUk1MEiX91DNXOY2JAAA
+
+
+False
+-1.5707963267949
+10
+czN9bfI5G0KZ0agADz5LWAAA
+ho/lDUk1MEiX91DNXOY2JAAA
+
+
+1933
+968
+14
+29
+
+
+
+clPurple
+$00B9FFFF
+clPurple
+lsRectilinear
+1933,991;1702,991
+5yig2AFjOEajXi3fbrN7VwAA
+TbZv4vmixEauqpXIdyVNdgAA
++wCnW3yutEeNI63TdKQpkAAA
+
+clPurple
+clPurple
+1.5707963267949
+10
+OnShutdown
+5yig2AFjOEajXi3fbrN7VwAA
+6rc5yZyIPke1iL7nJLrUwQAA
+
+
+False
+1.5707963267949
+25
+5yig2AFjOEajXi3fbrN7VwAA
+6rc5yZyIPke1iL7nJLrUwQAA
+
+
+False
+-1.5707963267949
+10
+5yig2AFjOEajXi3fbrN7VwAA
+6rc5yZyIPke1iL7nJLrUwQAA
+
+
+False
+1702
+991
+14
+29
+
+
+
+clBlue
+$00B9FFFF
+lsRectilinear
+147,1028;620,1028
+z1QNUA0z7UCZuLoDVY19rgAA
+mNvSnPlpGUa+X6DT/4CU0gAA
+bgjtXzPElEqJn9pi84tImgAA
+
+clNavy
+1.5707963267949
+10
+Stop()
+z1QNUA0z7UCZuLoDVY19rgAA
+22wrc8LEUkiANLhHOdNHUAAA
+
+
+False
+1.5707963267949
+25
+z1QNUA0z7UCZuLoDVY19rgAA
+22wrc8LEUkiANLhHOdNHUAAA
+
+
+False
+-1.5707963267949
+10
+z1QNUA0z7UCZuLoDVY19rgAA
+22wrc8LEUkiANLhHOdNHUAAA
+
+
+620
+1028
+14
+29
+
+
+
+$00A703B4
+$00B9FFFF
+lsRectilinear
+627,1096;395,1096
+Wd9H4IjL3USBGC0pH5hlUQAA
+yexABU1UCEy5R/KkGohcEQAA
+mNvSnPlpGUa+X6DT/4CU0gAA
+
+clMaroon
+1.5707963267949
+10
+OnShutdown()
+Wd9H4IjL3USBGC0pH5hlUQAA
+yZwXCIlw0UqzEEVqe995JgAA
+
+
+False
+1.5707963267949
+25
+Wd9H4IjL3USBGC0pH5hlUQAA
+yZwXCIlw0UqzEEVqe995JgAA
+
+
+False
+-1.5707963267949
+10
+Wd9H4IjL3USBGC0pH5hlUQAA
+yZwXCIlw0UqzEEVqe995JgAA
+
+
+382
+1096
+14
+29
+
+
+
+
+51
+
+new
+listener
+IServer
+j+NgCUOjNE2kmFd3hYSIegAA
+ychpc6mSzUOyFf7vQMlVXAAA
+
+GKqHK7uaTEeoZL1eXATu1QAA
+
+1QTFfJIkv0Oe+uLEcmTfCQAA
+4
+zj0gLe4XtU2J2bVhHsjKoQAA
+JPS6dsyJR0S0TETjcdDPzQAA
+ZqanKXSj20qoGWz9XhC9VQAA
+Je5Rr6ZcME+IRLz17kornAAA
+
+
+new
+listener
+IAgent
+rscStAuJEkiUAz9WikX0hQAA
+lvD/j4YgmkG/Ov+o+mJZPQAA
+
+twaVQAbQn0SQxSav8hKGygAA
+
+1QTFfJIkv0Oe+uLEcmTfCQAA
+4
+cCyZUo+qL02sb4GGEh3gwgAA
+5BDr2UxqLE2GGjbTc+azDgAA
+4WkxemYG00WYV5++zENhUgAA
+Dl6jjpeXM0SMqkUGPmPexQAA
+
+
+new
+ITcpAgentListener
+wQGBjVheXk6JUG6UyHLOLQAA
+Amawaz/I9kSR3ZRprOaA0QAA
+
+UVJZlx7WuUW8BWRWnTMKVwAA
+
+1QTFfJIkv0Oe+uLEcmTfCQAA
+4
+9LSfj24cFU+rp+nfIoeHUwAA
+adH2FYKfrkyalgzcHRESxwAA
+HYjly1YVRUSu/I5FiSQYagAA
+tfT8pva9kk6PQjxG1SFXLwAA
+
+
+server
+ychpc6mSzUOyFf7vQMlVXAAA
+j+NgCUOjNE2kmFd3hYSIegAA
+
+waLdiSPvU0aqFpb250AZIwAA
+
+1QTFfJIkv0Oe+uLEcmTfCQAA
+4
+aEtdljySnk+Jnw8H2MyfBAAA
+rs+xJB8kQU2FIQspU4MfWgAA
+16D6Hqt0VUyFa/bIyaOf/AAA
+zEZdkaqUbUeUTwGXgtT3lQAA
+
+
+agent
+lvD/j4YgmkG/Ov+o+mJZPQAA
+rscStAuJEkiUAz9WikX0hQAA
+
+RjOELc899E24BqUs1P8w2gAA
+
+1QTFfJIkv0Oe+uLEcmTfCQAA
+4
+hM4zK3J2M0qTbiDJg6DftgAA
+rVafn85Q0UuQ8CT3kM8omgAA
+fPZCy0QkUEuunewcn0EgMAAA
+7jaNfsa5aUeweVVoMZEPoQAA
+
+
+listener
+Amawaz/I9kSR3ZRprOaA0QAA
+wQGBjVheXk6JUG6UyHLOLQAA
+
+mpQYN0pghkiv6UDJsnfuWwAA
+
+1QTFfJIkv0Oe+uLEcmTfCQAA
+4
+YzPwOBpQpU2JgPIxj5MjdgAA
+YSsHkmv/TEKDGOd/Agr68gAA
+sSLq0Qpa8Uy9SdJwtifvYQAA
+wVZ1QsXVuUWge/szkcqrKwAA
+
+
+Start
+j+NgCUOjNE2kmFd3hYSIegAA
+ychpc6mSzUOyFf7vQMlVXAAA
+
+u/hYdn97j0e2w7qGm8lrPQAA
+
+1QTFfJIkv0Oe+uLEcmTfCQAA
+4
+81Znj6ipLE+uQJdj3I3BjAAA
+/myrcBq6xEmtPLopTIxvPQAA
+tiLG7fP0K0Sei2XNjqspmgAA
+lHRXGq0+iEyMcve/cNwqZQAA
+
+
+Start
+rscStAuJEkiUAz9WikX0hQAA
+lvD/j4YgmkG/Ov+o+mJZPQAA
+
+ge2n5wRT306cnabk/HU2IgAA
+
+1QTFfJIkv0Oe+uLEcmTfCQAA
+4
+ONHfDMi2cE6eUYVGDXwgGwAA
+7kaHO4BY+02bLmXX33d0MwAA
+bm8tEGiHRk+kIwUDKneKFgAA
+MyOXiblw7UuKuKCE1BW1bQAA
+
+
+OnPrepareListen
+ychpc6mSzUOyFf7vQMlVXAAA
+j+NgCUOjNE2kmFd3hYSIegAA
+
+KjbQrlapxE2xRsUF2q8bDwAA
+
+1QTFfJIkv0Oe+uLEcmTfCQAA
+4
+gHBXKkyxe0K1OBNbZXeV3wAA
+tmtNQw9rKEyZzwwsb6nUFgAA
++mhVJ1ufakO4Io6g0KALRQAA
+hsv35g4f2E+POf/gq4cfGQAA
+
+
+new
+True
+listener
+ITcpAgent
+wQGBjVheXk6JUG6UyHLOLQAA
+U2Za99rIrEi8z93FLSAjUAAA
+
+eiRtiRQwQU+VjHaN3rVhqAAA
+
+1QTFfJIkv0Oe+uLEcmTfCQAA
+4
+TvRznbBpRE+w6+5JbXI1MQAA
+XADN74LqR0yL0MGs32m/CwAA
+Yq3P8NDISkWbBpzIALuaNAAA
+Sw1pCgW9yUetluMmS7gJDQAA
+
+
+agent
+U2Za99rIrEi8z93FLSAjUAAA
+wQGBjVheXk6JUG6UyHLOLQAA
+
+gc1T6rnMnUylWpF5/By8ZAAA
+
+1QTFfJIkv0Oe+uLEcmTfCQAA
+4
+Mwl65WlBAkWLprLAGAE5rwAA
+nFx0rlGSaESIT2wsAYwrPQAA
+2whExSQQeUuKrz6NLE118wAA
+SzfCPTfD2E6h57QE/gJ7RwAA
+
+
+OnAccept
+ychpc6mSzUOyFf7vQMlVXAAA
+j+NgCUOjNE2kmFd3hYSIegAA
+
+q1qjKctdRE2v7HKXDklokQAA
+
+1QTFfJIkv0Oe+uLEcmTfCQAA
+4
+aeW3gGFMI0i5mnoP8rzsewAA
+IIBHLWCwIUiM6wuvyLWTmAAA
+m0jDDCoTiEq8NwAytW11RQAA
+QwmWvJMhaU6ewMykRWR9fAAA
+
+
+Connect
+Ta3rZIdU6E2pIcWjSM7HXgAA
+ychpc6mSzUOyFf7vQMlVXAAA
+
+hhg1h6MW70ylqCivIbWRXQAA
+
+1QTFfJIkv0Oe+uLEcmTfCQAA
+4
+CAh9vY3mukOvRlolvYiXeQAA
+JditL6P5Ik2/PtBBqUhmIQAA
+MjulBGij+U+E5JpzHIJMEQAA
+1a+zJ1XMukC/JACU+aBHpwAA
+
+
+Connect
+rscStAuJEkiUAz9WikX0hQAA
+lvD/j4YgmkG/Ov+o+mJZPQAA
+
+UiC+SdjuLkO6xrRIGFh2PAAA
+
+1QTFfJIkv0Oe+uLEcmTfCQAA
+4
+x12y5MX61kSU8UEZBCKBzAAA
+VAqAXQcyTEODbem67Ii8fQAA
+oSni4e7TvEifqVqMkG8SIQAA
+6lTcAQt1v0u6iPpCYWefkwAA
+
+
+Start
+wQGBjVheXk6JUG6UyHLOLQAA
+U2Za99rIrEi8z93FLSAjUAAA
+
+3ll2HhKX0kq8L2WoIISIqQAA
+
+1QTFfJIkv0Oe+uLEcmTfCQAA
+4
+HnK/vetZsE2Zoo9YLGV1KgAA
+Gnu7K7y05Ua+fA2/QxU5IgAA
+KIsC249fQkanOGfrxCf1oQAA
+sKtOLiHU8EyqnH3HBGyYoAAA
+
+
+OnPrepareConnect
+lvD/j4YgmkG/Ov+o+mJZPQAA
+rscStAuJEkiUAz9WikX0hQAA
+
+FYipeeoMCUm19jcfhm3biAAA
+
+1QTFfJIkv0Oe+uLEcmTfCQAA
+4
+PMbi1EVd7kmNs8rUg0gpgwAA
+HBvIQwHTJ0uhglpkMgdLZwAA
+QO897OzHzUmfzk9SzWRNsAAA
+xJSpv2Wxp029oO8YA4kxsgAA
+
+
+OnConnect
+lvD/j4YgmkG/Ov+o+mJZPQAA
+rscStAuJEkiUAz9WikX0hQAA
+
+/bHgYzIBqECI2mdaGkoJMwAA
+
+1QTFfJIkv0Oe+uLEcmTfCQAA
+4
+K1jfKNg6hUSMEfA71rVwswAA
+oCuVcNdbjE+NevEDYO0iuAAA
+aveAsSq3cEyTyKNgdNh0EQAA
+7hRALDgv0UuWoSd7q9lcMQAA
+
+
+Connect
+lvD/j4YgmkG/Ov+o+mJZPQAA
+HdPN0QWbYUq0xPzVpVWOdwAA
+
+NUW8ZK/ERk2X3umbnhegzwAA
+
+1QTFfJIkv0Oe+uLEcmTfCQAA
+4
+Uva/yeEJ00eMzNPCIyuWZAAA
+o2Jo085TaU+VCg83m1yWjQAA
+w/6FVGnluk6k+nxlAftAZQAA
+9PYcNtOxfE63ie6AXXjTXAAA
+
+
+Connect
+address, port
+wQGBjVheXk6JUG6UyHLOLQAA
+U2Za99rIrEi8z93FLSAjUAAA
+
+qxo3boab2UKQT7Y0WGaO5wAA
+
+1QTFfJIkv0Oe+uLEcmTfCQAA
+4
+eYJrYhPCEUS7T6jsSTfTGAAA
+J/7B/bplR0mvdF2z/39NKQAA
++BQImtFl5EatTspYweostgAA
+YaQ6jqrvlkGnm9TobP6zFgAA
+
+
+OnReceive
+ychpc6mSzUOyFf7vQMlVXAAA
+j+NgCUOjNE2kmFd3hYSIegAA
+
+xbH85UKQlESFWJculb723gAA
+
+1QTFfJIkv0Oe+uLEcmTfCQAA
+4
+OLadb8YV2kW2/OneXcT5fAAA
+pFjZq1ZbMESH4F1X0n00WgAA
+eaKTRn/wnki9Mww6L7VskwAA
+nyDC18c9sUGBz8ALFTYbkgAA
+
+
+Send
+Ta3rZIdU6E2pIcWjSM7HXgAA
+ychpc6mSzUOyFf7vQMlVXAAA
+
+/VRCJTy/oEur+ilCjeW2XgAA
+
+1QTFfJIkv0Oe+uLEcmTfCQAA
+4
+k+k1sVK/4kCTCrxJp3KZmAAA
+vvS+hIfiFUm6pV7syiA4rQAA
+XdA4bINjukiRzFUWcIGLowAA
+1Lt0eShNTUOlP3C/pdWUTgAA
+
+
+Send
+rscStAuJEkiUAz9WikX0hQAA
+lvD/j4YgmkG/Ov+o+mJZPQAA
+
+3BL7NFdLw0yo7RLubFSFzQAA
+
+1QTFfJIkv0Oe+uLEcmTfCQAA
+4
+fRP4qNvR302+2rcIff42YQAA
+TJCZs0i5lk2QArLRdXMFTAAA
+4L0bDC+B/0quYVP/OUBkKgAA
+bdgWKPJ1ZU2ukkIYbuZ6nQAA
+
+
+OnPrepareConnect
+connid
+U2Za99rIrEi8z93FLSAjUAAA
+Amawaz/I9kSR3ZRprOaA0QAA
+
+Wjv7v/0JW0SsHdI2VbWR+AAA
+
+1QTFfJIkv0Oe+uLEcmTfCQAA
+4
+jEQTYK+V2062OgAJI9+KJgAA
+2GVDb1w55kK7Kt9QHjl+GgAA
+ZBiAeBth30mcnxI4RyM3UwAA
+mtELRVGaxkinEIIebcCMXQAA
+
+
+OnSend
+lvD/j4YgmkG/Ov+o+mJZPQAA
+rscStAuJEkiUAz9WikX0hQAA
+
+oF/LEA7hx0qNduBcIVAMJQAA
+
+1QTFfJIkv0Oe+uLEcmTfCQAA
+4
++vTGrF2zx0OWj4eXWblGowAA
+UsLKaDn/rUGVeWg1C7PYGQAA
+1sjX7N6DF0WjS/QD9X7klAAA
++GEqcbO4pUKGYA3Uj/mD3QAA
+
+
+Send
+lvD/j4YgmkG/Ov+o+mJZPQAA
+HdPN0QWbYUq0xPzVpVWOdwAA
+
+1vb2mQKxZ0+r/MA4zbJgbwAA
+
+1QTFfJIkv0Oe+uLEcmTfCQAA
+4
+QO8N1X6VLky4cZtNH/bVqQAA
+zkJB78q7jkqBrdF/ry/wBAAA
+GNk3vPcGuUuUSwZa/fZFpgAA
+qgdZ0W1woUWyjYnM4VnhPQAA
+
+
+OnConnect
+connid
+U2Za99rIrEi8z93FLSAjUAAA
+Amawaz/I9kSR3ZRprOaA0QAA
+
+8p8OEDcPcEqcPclkWC6twgAA
+
+1QTFfJIkv0Oe+uLEcmTfCQAA
+4
+H7uvq6t59UCNEZljpwH1GAAA
+yyo4rDEn9UaB9eUEd8vL+gAA
+9yN+sJlAXUaiAVf+v1bolwAA
+VvhqIlxoyEGpkMlfcdG7gwAA
+
+
+Send
+j+NgCUOjNE2kmFd3hYSIegAA
+ychpc6mSzUOyFf7vQMlVXAAA
+
+kAJ6OYlT5kSWgt6Y8JB6KQAA
+
+1QTFfJIkv0Oe+uLEcmTfCQAA
+4
+/VoO4MkQoUqEWr+dUv9R5AAA
+LJJLuZaXzEeLvU3XHUrhRQAA
+B9hleoGfzECx9CLckvq+pQAA
+6NyJKCu7Kk6h1SB0oTjcZwAA
+
+
+OnSend
+ychpc6mSzUOyFf7vQMlVXAAA
+j+NgCUOjNE2kmFd3hYSIegAA
+
+0exvc+RmxE++FLqQZ+YzawAA
+
+1QTFfJIkv0Oe+uLEcmTfCQAA
+4
+9lFefDL9EkGWx+GRTnrIZgAA
+jHCDw9k5Xk+hiM0YqiH1rQAA
+AKsxD1v0bEmrSHsp1AbdeAAA
+tpbUDxCgIUu9Z6vKJx46gAAA
+
+
+Send
+ychpc6mSzUOyFf7vQMlVXAAA
+Ta3rZIdU6E2pIcWjSM7HXgAA
+
+9Ol7xVDHfk+aOrYlU/XxDAAA
+
+1QTFfJIkv0Oe+uLEcmTfCQAA
+4
+s2d3Z0E0+kKI8W+SNgARXAAA
+z6hiLqsAU0qBnwR7Kwix4gAA
+i8Gf/qjfe06+Y0Kpv0nKHwAA
+ld3ZSL54xUqFQKEv+ME5HwAA
+
+
+Send
+connid, data, length
+wQGBjVheXk6JUG6UyHLOLQAA
+U2Za99rIrEi8z93FLSAjUAAA
+
+0gQj+YWF1kWUYfNhSvBRRgAA
+
+1QTFfJIkv0Oe+uLEcmTfCQAA
+4
+niqU3lxUj06wxkIb2xcgfwAA
+dDj9hguQmkCxZuYWFRvM7AAA
+tzhYB0FLd0GBlk2f5puN3wAA
++2CLfHE+0UOCiArnLrpPuQAA
+
+
+OnReceive
+lvD/j4YgmkG/Ov+o+mJZPQAA
+rscStAuJEkiUAz9WikX0hQAA
+
+mErn0SwL4kWgwh37KhxrOwAA
+
+1QTFfJIkv0Oe+uLEcmTfCQAA
+4
+YkEmXAqy9EevsUZJVhd0hwAA
+SrnbMXO510mGYeFjYmesgAAA
+jR+Zo152ukOhmQUFHgu1bgAA
+nLknQDEGmEiWRkv3ssdsjAAA
+
+
+Send
+HdPN0QWbYUq0xPzVpVWOdwAA
+lvD/j4YgmkG/Ov+o+mJZPQAA
+
+PSWE8W0TEU+2XvyhDfkDzgAA
+
+1QTFfJIkv0Oe+uLEcmTfCQAA
+4
+CWRCDraG50e3xZDvX5vLpQAA
+O/BpHz9Gb0Odl8wHkJCIvwAA
+w9Put6+2Tkqjc28U1Q1U/gAA
+36FP6B4zL0acXLrWYxWStAAA
+
+
+OnClose
+ychpc6mSzUOyFf7vQMlVXAAA
+j+NgCUOjNE2kmFd3hYSIegAA
+
+1hZ1Ivgi7UWnVEcQGQ9xdwAA
+
+1QTFfJIkv0Oe+uLEcmTfCQAA
+4
+KbnvIzhjfEWFVgq1gekqXAAA
+lXWksQSw0kyHBODybSFoQQAA
+lpCc05pDQEqW+QI1AVMyQQAA
+qW/5pdGBq0yaWXDi91oiJwAA
+
+
+Disconnect
+Ta3rZIdU6E2pIcWjSM7HXgAA
+ychpc6mSzUOyFf7vQMlVXAAA
+
+aXyZYOKcl0mBOwUqTqobmgAA
+
+1QTFfJIkv0Oe+uLEcmTfCQAA
+4
+zMOiSN3GsEiMtDJA5EV00wAA
+MTlv1P/9w0+CRwN8hRfcQwAA
+qh85j/NI0EKdrEp/rr24KgAA
+WWihkitawUC7one9xWDNYwAA
+
+
+OnSend
+connid, data, length
+U2Za99rIrEi8z93FLSAjUAAA
+Amawaz/I9kSR3ZRprOaA0QAA
+
+5CQCgkQMiEa8EdVYKZGhowAA
+
+1QTFfJIkv0Oe+uLEcmTfCQAA
+4
+YpPwITXi7ESS5zzS/nJtdgAA
+kHAC5hzRrUWpsmuF50Yu6wAA
+bvOfd5kqi0ifMT1kybOjtgAA
+9NpUk7LdMEKMEPy2NsKO7wAA
+
+
+OnClose
+lvD/j4YgmkG/Ov+o+mJZPQAA
+rscStAuJEkiUAz9WikX0hQAA
+
+9lUxZSoXvkOOzpV4doFFPwAA
+
+1QTFfJIkv0Oe+uLEcmTfCQAA
+4
+YfuBDr8+XEGC/f0KAwYlMwAA
+xdjIVxNnmkyM2UQnq4FysQAA
+FU0yH1z+Dku67wjOJAcXbQAA
+sY5Mfi7IN0aIVe6G6gdJFgAA
+
+
+Disconnect
+HdPN0QWbYUq0xPzVpVWOdwAA
+lvD/j4YgmkG/Ov+o+mJZPQAA
+
+79YTw4PBt0qttSuIpUL7HQAA
+
+1QTFfJIkv0Oe+uLEcmTfCQAA
+4
+y1T7PceGOk+3n0Ql8l12UgAA
+lr7f5rkS4U28S5RNBnv7hwAA
+zVFuIqPvgUyYw6O2DF6MvAAA
+5gwHY3cWVU66igOu25UWSwAA
+
+
+Disconnect
+j+NgCUOjNE2kmFd3hYSIegAA
+ychpc6mSzUOyFf7vQMlVXAAA
+
+RakUMYixx0eokaMaO8399AAA
+
+1QTFfJIkv0Oe+uLEcmTfCQAA
+4
+H0hhU481MUSlr+PpVelBqwAA
+xGz+ImSquUKDQSaxXLQKVwAA
+7mm2IIo0TkWCevHiDB4JmgAA
+qAgFncPmQE2ZWPpG8HddIAAA
+
+
+OnReceive
+connid, data, length
+U2Za99rIrEi8z93FLSAjUAAA
+Amawaz/I9kSR3ZRprOaA0QAA
+
+OtUn1tUnHUiiI6GLtYamBwAA
+
+1QTFfJIkv0Oe+uLEcmTfCQAA
+4
+vPOw9w4yJE+eo3dYsSWrBAAA
+DbKDs8tc+kKuuhKhjZW/VgAA
+DEtQNtRXKk+nduo9seSpKgAA
+7i3FK2/b7kywkAScUyygZQAA
+
+
+OnClose
+ychpc6mSzUOyFf7vQMlVXAAA
+j+NgCUOjNE2kmFd3hYSIegAA
+
+qB+snL4IlEeGy2CTYMy/zAAA
+
+1QTFfJIkv0Oe+uLEcmTfCQAA
+4
+mYJo9K+KDEi+F3GgmHC8MAAA
+n9vn/+4SEkG6P0KUCdO7XAAA
+D+KSu7v3vUWfMW/oraC5DwAA
+JBJGrWtRyEqg1dvtwSi8VAAA
+
+
+Disconnect
+ychpc6mSzUOyFf7vQMlVXAAA
+Ta3rZIdU6E2pIcWjSM7HXgAA
+
+Mj5U0wte/Ui52pM+Nh0WIgAA
+
+1QTFfJIkv0Oe+uLEcmTfCQAA
+4
+vmvOU5NFGkOJH7BYW+rfLQAA
+rb7nJ3k3N0SXzGhWpmEMFAAA
+Zsn/hmLJZEaoH26Ro+LfWAAA
+HdXCZ5ftBU6J6HpOmUbdpgAA
+
+
+Disconnect
+rscStAuJEkiUAz9WikX0hQAA
+lvD/j4YgmkG/Ov+o+mJZPQAA
+
+pvIA8HpUU0eAf/CRON6ISQAA
+
+1QTFfJIkv0Oe+uLEcmTfCQAA
+4
+iS+1y0N6I0eiK+0IWQQe2gAA
+svQBVOXNmEuD5KRG0KfnuQAA
+2noN6gwumkSSmO6oQe/r7AAA
+4xM4qcc3lEaq5sMZ0CDFRAAA
+
+
+Disconnect
+lvD/j4YgmkG/Ov+o+mJZPQAA
+HdPN0QWbYUq0xPzVpVWOdwAA
+
+bylpP6WP+0+xDkDWbCho6AAA
+
+1QTFfJIkv0Oe+uLEcmTfCQAA
+4
+yP78nj+bZk+75vsYWcgXGwAA
+oqjFX/ItXUCjjNXrUKrPiwAA
+ZwD+4FwZ2E6Jy/y3iJ3sEAAA
+Eup3YayPyk6JbQ01HJtm9QAA
+
+
+OnClose
+lvD/j4YgmkG/Ov+o+mJZPQAA
+rscStAuJEkiUAz9WikX0hQAA
+
+yCsrGZ0ZX0eRnh7MrDJ8fwAA
+
+1QTFfJIkv0Oe+uLEcmTfCQAA
+4
+GW3/+fr0HEewn0AavM5PHQAA
+FdUsqHDQ8kqufHHLTEbmcQAA
+++Lj7iGzyUadL57vltYqvQAA
+nKKtrvfqY0WlxSB5hyveDAAA
+
+
+Stop
+j+NgCUOjNE2kmFd3hYSIegAA
+ychpc6mSzUOyFf7vQMlVXAAA
+
+PT5rHARWmkS/g4IqVuPQbwAA
+
+1QTFfJIkv0Oe+uLEcmTfCQAA
+4
+WfhIgUdxekSnY02eBkGaEgAA
+RYmf2kDuTEK2Xn1L9ajTAQAA
+qeYAD1I22Eyim9QV76lhNQAA
+UMWLm9bYhUG5dUTM3d5qjgAA
+
+
+OnClose
+connid, operation, code
+U2Za99rIrEi8z93FLSAjUAAA
+Amawaz/I9kSR3ZRprOaA0QAA
+
+/HUsBl+/S0CY4MtM5ABl2AAA
+
+1QTFfJIkv0Oe+uLEcmTfCQAA
+4
+WTcgBUL5lk60yTAJ6+Ym8QAA
+J6I+dWrx7Ua2SbtCjs3YFgAA
+j+iLrvCC5k2UrJ6sQ7n8ZQAA
+o0ElvhM91UWXyVUooJcBQwAA
+
+
+OnShutdown
+ychpc6mSzUOyFf7vQMlVXAAA
+j+NgCUOjNE2kmFd3hYSIegAA
+
+yyMM+2gkDEehAYP+raNxDQAA
+
+1QTFfJIkv0Oe+uLEcmTfCQAA
+4
+ElAEbekWtEO22kTeSu21VgAA
+WR7n+diPW0i8OU/W1dOqZAAA
+GKseBx4vKUaINOg0C13ktQAA
+h8YqzT7w2keY+iSJ3Jr8pwAA
+
+
+Stop
+rscStAuJEkiUAz9WikX0hQAA
+lvD/j4YgmkG/Ov+o+mJZPQAA
+
+czN9bfI5G0KZ0agADz5LWAAA
+
+1QTFfJIkv0Oe+uLEcmTfCQAA
+4
+ho/lDUk1MEiX91DNXOY2JAAA
+kj3VrllJ+kWD5hBi6m4/wwAA
+0AOGfRQZSUaa//8NgIkn9gAA
+a3BDEmT6Yk6WsyJh6e0cyAAA
+
+
+OnShutdown
+lvD/j4YgmkG/Ov+o+mJZPQAA
+rscStAuJEkiUAz9WikX0hQAA
+
+5yig2AFjOEajXi3fbrN7VwAA
+
+1QTFfJIkv0Oe+uLEcmTfCQAA
+4
+6rc5yZyIPke1iL7nJLrUwQAA
++KLaCxqQNk+yGrn6BMdRNwAA
+qwOZUUArg06rrUzTZQqcpQAA
+hw2mGCmZy02gVtzw4rXkSQAA
+
+
+Stop
+wQGBjVheXk6JUG6UyHLOLQAA
+U2Za99rIrEi8z93FLSAjUAAA
+
+z1QNUA0z7UCZuLoDVY19rgAA
+
+1QTFfJIkv0Oe+uLEcmTfCQAA
+4
+22wrc8LEUkiANLhHOdNHUAAA
+1+kFroMKOkWnsfw9YjaasAAA
+eG1Nd5Qda0aIwLI+KVJd5AAA
+riOjVPDKCUCNJ5sCvbehqAAA
+
+
+OnShutdown
+U2Za99rIrEi8z93FLSAjUAAA
+Amawaz/I9kSR3ZRprOaA0QAA
+
+Wd9H4IjL3USBGC0pH5hlUQAA
+
+1QTFfJIkv0Oe+uLEcmTfCQAA
+4
+yZwXCIlw0UqzEEVqe995JgAA
+Up9ZIRzyykG/r3XiA56qxAAA
+VVrFXPo2DES5ogdhhTDaxwAA
+lkgWgMB0oEaX1HYmp2yiiQAA
+
+3
+
+Listener & Agent
+Create
+1QTFfJIkv0Oe+uLEcmTfCQAA
+
+
+Frame1
+sd
+1QTFfJIkv0Oe+uLEcmTfCQAA
+
+
+Frame2
+sd
+1QTFfJIkv0Oe+uLEcmTfCQAA
+
+
+
+Sample-2
+5Xea+2Ha3kuZqH6rjIWf7AAA
+1
+
+Sample
+False
+mskNameAndType
+0VTzN8sts0yg55EvvKzPQAAA
+
+1eO85Ua7aE+CmBmmIDDxDAAA
+80
+
+clMaroon
+$00B9FFFF
+88
+120
+119
+1069
+wQGBjVheXk6JUG6UyHLOLQAA
+
+
+4
+My Logic Controller
+
+
+False
+
+
+False
+
+
+
+wQGBjVheXk6JUG6UyHLOLQAA
+
+
+
+clMaroon
+$00B9FFFF
+320
+120
+139
+1073
+Amawaz/I9kSR3ZRprOaA0QAA
+
+
+4
+My TCP Agent Listener
+
+
+False
+
+
+False
+
+
+
+Amawaz/I9kSR3ZRprOaA0QAA
+
+
+
+clMaroon
+$00E3C8C8
+592
+120
+70
+1073
+U2Za99rIrEi8z93FLSAjUAAA
+
+
+4
+TCP Agent
+
+
+False
+
+
+False
+
+
+
+U2Za99rIrEi8z93FLSAjUAAA
+
+
+
+$00F0E1FF
+900
+120
+114
+869
+j+NgCUOjNE2kmFd3hYSIegAA
+
+
+4
+Server Application
+
+
+False
+
+
+False
+
+
+
+j+NgCUOjNE2kmFd3hYSIegAA
+
+
+
+clMaroon
+$00E6CCCC
+1148
+120
+117
+869
+ychpc6mSzUOyFf7vQMlVXAAA
+
+
+4
+Server Component
+
+
+False
+
+
+False
+
+
+
+ychpc6mSzUOyFf7vQMlVXAAA
+
+
+
+clMaroon
+$00B9FFFF
+1404
+120
+108
+869
+Ta3rZIdU6E2pIcWjSM7HXgAA
+
+
+4
+Client Application
+
+
+False
+
+
+False
+
+
+
+Ta3rZIdU6E2pIcWjSM7HXgAA
+
+
+
+clMaroon
+$00FFD7FF
+1648
+116
+108
+721
+rscStAuJEkiUAz9WikX0hQAA
+
+
+4
+Client Application
+
+
+False
+
+
+False
+
+
+
+rscStAuJEkiUAz9WikX0hQAA
+
+
+
+clMaroon
+$00E6CCCC
+1884
+116
+112
+721
+lvD/j4YgmkG/Ov+o+mJZPQAA
+
+
+4
+Client Component
+
+
+False
+
+
+False
+
+
+
+lvD/j4YgmkG/Ov+o+mJZPQAA
+
+
+
+clMaroon
+$00B9FFFF
+2116
+116
+114
+721
+HdPN0QWbYUq0xPzVpVWOdwAA
+
+
+4
+Server Application
+
+
+False
+
+
+False
+
+
+
+HdPN0QWbYUq0xPzVpVWOdwAA
+
+
+
+clMaroon
+$00B9FFFF
+lsRectilinear
+1702,212;1933,212
+tmMPWz926keOYRK7CfB+ogAA
+LtIPm701qEiKOEIQzsRsigAA
+yRcxWVCafEypCOzoqyZd9wAA
+
+1.5707963267949
+10
+IClient := new(listener)
+tmMPWz926keOYRK7CfB+ogAA
+zn6D2ECw+Eu8AUGWOyBeGwAA
+
+
+1.5707963267949
+25
+<<create>>
+tmMPWz926keOYRK7CfB+ogAA
+zn6D2ECw+Eu8AUGWOyBeGwAA
+
+
+False
+-1.5707963267949
+10
+tmMPWz926keOYRK7CfB+ogAA
+zn6D2ECw+Eu8AUGWOyBeGwAA
+
+
+1933
+212
+14
+29
+
+
+
+clMaroon
+$00B9FFFF
+lsRectilinear
+957,213;1199,213
+gAVKOFcG5Uy+DJqh3e+rmQAA
+SGclKA1c/EeIKpRjr6adVAAA
+fB7Q+DVBWE6rQM2gSNHKZAAA
+
+1.5707963267949
+10
+IServer := new(listener)
+gAVKOFcG5Uy+DJqh3e+rmQAA
+Ao9U+ysX4kSHNAEgs/GP6QAA
+
+
+1.5707963267949
+25
+<<create>>
+gAVKOFcG5Uy+DJqh3e+rmQAA
+Ao9U+ysX4kSHNAEgs/GP6QAA
+
+
+False
+-1.5707963267949
+10
+gAVKOFcG5Uy+DJqh3e+rmQAA
+Ao9U+ysX4kSHNAEgs/GP6QAA
+
+
+1199
+213
+14
+29
+
+
+
+clMaroon
+$00B9FFFF
+lsRectilinear
+147,224;382,224
+u0t7NrBh2EmsnM1kDsHdBwAA
+enASZyLbhUip3579An5eRwAA
+gtOTyYM9IUenocj7Nq/rCQAA
+
+1.5707963267949
+10
+ITcpAgentListener := new()
+u0t7NrBh2EmsnM1kDsHdBwAA
+1lwIUuEn1UievyHx8P6L4wAA
+
+
+1.5707963267949
+25
+<<create>>
+u0t7NrBh2EmsnM1kDsHdBwAA
+1lwIUuEn1UievyHx8P6L4wAA
+
+
+False
+-1.5707963267949
+10
+u0t7NrBh2EmsnM1kDsHdBwAA
+1lwIUuEn1UievyHx8P6L4wAA
+
+
+382
+224
+14
+29
+
+
+
+clMaroon
+$00B9FFFF
+lsRectilinear
+1933,238;1702,238
+qdFUCd8ppUytkbv1kQ22KAAA
+yRcxWVCafEypCOzoqyZd9wAA
+LtIPm701qEiKOEIQzsRsigAA
+
+1.5707963267949
+10
+client
+qdFUCd8ppUytkbv1kQ22KAAA
+BRZi89k2FkSJZxAOYzWP1wAA
+
+
+False
+1.5707963267949
+25
+qdFUCd8ppUytkbv1kQ22KAAA
+BRZi89k2FkSJZxAOYzWP1wAA
+
+
+False
+-1.5707963267949
+10
+qdFUCd8ppUytkbv1kQ22KAAA
+BRZi89k2FkSJZxAOYzWP1wAA
+
+
+False
+1702
+238
+14
+29
+
+
+
+clMaroon
+$00B9FFFF
+lsRectilinear
+1199,240;957,240
+pPAAy86kd0iPjz3jRkE7GQAA
+fB7Q+DVBWE6rQM2gSNHKZAAA
+SGclKA1c/EeIKpRjr6adVAAA
+
+1.5707963267949
+10
+server
+pPAAy86kd0iPjz3jRkE7GQAA
+WM1BZGw83E6VMbBt8/T9sQAA
+
+
+False
+1.5707963267949
+25
+pPAAy86kd0iPjz3jRkE7GQAA
+WM1BZGw83E6VMbBt8/T9sQAA
+
+
+False
+-1.5707963267949
+10
+pPAAy86kd0iPjz3jRkE7GQAA
+WM1BZGw83E6VMbBt8/T9sQAA
+
+
+False
+957
+240
+14
+29
+
+
+
+clMaroon
+$00B9FFFF
+lsRectilinear
+382,251;147,251
+zvjkh/olMkKz8fshUqs1/gAA
+gtOTyYM9IUenocj7Nq/rCQAA
+enASZyLbhUip3579An5eRwAA
+
+1.5707963267949
+10
+listener
+zvjkh/olMkKz8fshUqs1/gAA
+DYmXwHQZ1EmVy87fdA6qaAAA
+
+
+False
+1.5707963267949
+25
+zvjkh/olMkKz8fshUqs1/gAA
+DYmXwHQZ1EmVy87fdA6qaAAA
+
+
+False
+-1.5707963267949
+10
+zvjkh/olMkKz8fshUqs1/gAA
+DYmXwHQZ1EmVy87fdA6qaAAA
+
+
+False
+147
+251
+14
+29
+
+
+
+clBlue
+$00B9FFFF
+lsRectilinear
+957,294;1199,294
+X5T4GSZ++0CHKCiad7lJUQAA
+SGclKA1c/EeIKpRjr6adVAAA
+fB7Q+DVBWE6rQM2gSNHKZAAA
+
+clBlue
+1.5707963267949
+10
+Start()
+X5T4GSZ++0CHKCiad7lJUQAA
++k4sIdNc60iYAznNneRuzAAA
+
+
+False
+1.5707963267949
+25
+X5T4GSZ++0CHKCiad7lJUQAA
++k4sIdNc60iYAznNneRuzAAA
+
+
+False
+-1.5707963267949
+10
+X5T4GSZ++0CHKCiad7lJUQAA
++k4sIdNc60iYAznNneRuzAAA
+
+
+1199
+294
+14
+29
+
+
+
+clMaroon
+$00E6FFE6
+456
+220
+157
+26
+Create Agent & Listener
+
+
+
+clMaroon
+$00B9FFFF
+395,238;456,235
+bCJ1ECd090uoeesdImvAtwAA
+n8Oamnaks0SQAmULrnFbtwAA
+
+
+clMaroon
+$00E6FFE6
+468
+384
+85
+26
+Start Agent
+
+
+
+clMaroon
+$00B9FFFF
+620,326;546,245
+bCJ1ECd090uoeesdImvAtwAA
+1J2E71dFJU6aD0fXxGzREQAA
+
+
+clMaroon
+$00B9FFFF
+620,441;542,409
+r1SWHJiuP0itPzuWN37uqgAA
+9m6ILnZ8Z0S9Ff0U96FlaQAA
+
+
+clMaroon
+$00E6FFE6
+188
+524
+126
+26
+Connect Operation
+
+
+
+clMaroon
+$00B9FFFF
+620,509;313,531
+A916pNDvKEGTFZHx/Ck4dgAA
+7D9JKOoLAESLpIhVa53E3wAA
+
+
+clMaroon
+$00B9FFFF
+382,569;365,568
+Kr0N0BpfW0Cg11vT+gcZsgAA
+i2f7IUfB0UWsx3DkfV+l8QAA
+
+
+clMaroon
+$00B9FFFF
+382,628;300,605
+9gXroG5q0k2cucuDVv5AXwAA
+hAerel7D8U+RjQwj6HfIYgAA
+
+
+clMaroon
+$00E6FFE6
+188
+692
+109
+26
+Send Operation
+
+
+
+clMaroon
+$00B9FFFF
+620,690;296,702
+yGbmL5jJH0+N9AUwam7DAgAA
+fcOyNWhlxkmyd/5Q+wTqzQAA
+
+
+clMaroon
+$00E6FFE6
+188
+552
+178
+26
+OnPrepareConnect Callback
+
+
+
+clMaroon
+$00E6FFE6
+188
+580
+133
+26
+OnConnect Callback
+
+
+
+clMaroon
+$00E6FFE6
+188
+720
+116
+26
+OnSend Callback
+
+
+
+clMaroon
+$00B9FFFF
+382,745;303,738
+5Clgm8hWj06fWrFNpgvqiwAA
+Q2jStGS9pkWxKk+UAfZlQwAA
+
+
+clMaroon
+$00E6FFE6
+188
+816
+131
+26
+OnReceive Callback
+
+
+
+clMaroon
+$00B9FFFF
+382,842;318,835
+wRqkAPk8PUmO+Wi8C5ajEgAA
+TRn4IjU5Gka2jzbvlUZITwAA
+
+
+clMaroon
+$00E6FFE6
+188
+912
+120
+26
+OnClose Callback
+
+
+
+clMaroon
+$00E6FFE6
+188
+1044
+117
+26
+Stop Operation
+
+
+
+clMaroon
+$00E6FFE6
+188
+1084
+177
+26
+OnShutdown Callback
+
+
+
+clMaroon
+$00B9FFFF
+382,941;307,932
+Dh/cbggyFUyNBo/dwEzONQAA
+JvJxpBl0rE2BbyPdNUO/7AAA
+
+
+clMaroon
+$00B9FFFF
+620,1042;304,1054
+a5JimTSJfke4sOm54DQZiAAA
+RejPp2NOp0WsoSvmo1IUVAAA
+
+
+clMaroon
+$00B9FFFF
+382,1109;364,1107
+xKg65AOpQUaq+6kouozyZQAA
+s4gyVY5Z1kayHLiVL7C2OwAA
+
+
+clBlue
+$00B9FFFF
+lsRectilinear
+1702,296;1933,296
+i0okbOG+V0Wy21SEhlS3YQAA
+LtIPm701qEiKOEIQzsRsigAA
+yRcxWVCafEypCOzoqyZd9wAA
+
+clBlue
+1.5707963267949
+10
+Start()
+i0okbOG+V0Wy21SEhlS3YQAA
+XwaiI/v6qkC56jzj/IhW6gAA
+
+
+False
+1.5707963267949
+25
+i0okbOG+V0Wy21SEhlS3YQAA
+XwaiI/v6qkC56jzj/IhW6gAA
+
+
+False
+-1.5707963267949
+10
+i0okbOG+V0Wy21SEhlS3YQAA
+XwaiI/v6qkC56jzj/IhW6gAA
+
+
+1933
+296
+14
+57
+
+
+
+clPurple
+$00B9FFFF
+lsRectilinear
+1199,318;957,318
+zinYWd6ATEavjMBO+/H28wAA
+fB7Q+DVBWE6rQM2gSNHKZAAA
+SGclKA1c/EeIKpRjr6adVAAA
+
+clPurple
+1.5707963267949
+10
+OnPrepareListen
+zinYWd6ATEavjMBO+/H28wAA
+rJ5GoZYRJEyEcqM/vzPmHQAA
+
+
+False
+1.5707963267949
+25
+zinYWd6ATEavjMBO+/H28wAA
+rJ5GoZYRJEyEcqM/vzPmHQAA
+
+
+False
+-1.5707963267949
+10
+zinYWd6ATEavjMBO+/H28wAA
+rJ5GoZYRJEyEcqM/vzPmHQAA
+
+
+False
+957
+318
+14
+29
+
+
+
+clMaroon
+$00B9FFFF
+lsRectilinear
+147,319;620,319
+IGSCEi76fECYOq9TAgfycAAA
+BexDoaFUEkCBpmk29zrEggAA
+gtOTyYM9IUenocj7Nq/rCQAA
+
+1.5707963267949
+10
+ITcpAgent := new(listener)
+IGSCEi76fECYOq9TAgfycAAA
+gswhi/yQlEyni0BQeCu9YAAA
+
+
+1.5707963267949
+25
+<<create>>
+IGSCEi76fECYOq9TAgfycAAA
+gswhi/yQlEyni0BQeCu9YAAA
+
+
+False
+-1.5707963267949
+10
+IGSCEi76fECYOq9TAgfycAAA
+gswhi/yQlEyni0BQeCu9YAAA
+
+
+620
+319
+14
+29
+
+
+
+clPurple
+$00B9FFFF
+clPurple
+lsRectilinear
+1933,322;1702,322
+cMDdajmI+EqZX7e2IJLW2AAA
+yRcxWVCafEypCOzoqyZd9wAA
+LtIPm701qEiKOEIQzsRsigAA
+
+clPurple
+clPurple
+1.5707963267949
+10
+OnPrepareConnect
+cMDdajmI+EqZX7e2IJLW2AAA
+HhmcyDgFYkeEUyKoPJYJawAA
+
+
+False
+1.5707963267949
+25
+cMDdajmI+EqZX7e2IJLW2AAA
+HhmcyDgFYkeEUyKoPJYJawAA
+
+
+False
+-1.5707963267949
+10
+cMDdajmI+EqZX7e2IJLW2AAA
+HhmcyDgFYkeEUyKoPJYJawAA
+
+
+False
+1702
+322
+14
+56
+
+
+
+clMaroon
+$00B9FFFF
+lsRectilinear
+620,346;147,346
+YB6eaJtPCk2AGSgtffbdcAAA
+gtOTyYM9IUenocj7Nq/rCQAA
+BexDoaFUEkCBpmk29zrEggAA
+
+1.5707963267949
+10
+agent
+YB6eaJtPCk2AGSgtffbdcAAA
+pJ8aa9482EKLz1EwjSpJ2wAA
+
+
+False
+1.5707963267949
+25
+YB6eaJtPCk2AGSgtffbdcAAA
+pJ8aa9482EKLz1EwjSpJ2wAA
+
+
+False
+-1.5707963267949
+10
+YB6eaJtPCk2AGSgtffbdcAAA
+pJ8aa9482EKLz1EwjSpJ2wAA
+
+
+False
+147
+346
+14
+29
+
+
+
+clPurple
+$00B9FFFF
+clPurple
+lsRectilinear
+1933,349;1702,349
+oz9VGOLnCUChZ5znyjLuEAAA
+yRcxWVCafEypCOzoqyZd9wAA
+LtIPm701qEiKOEIQzsRsigAA
+
+clPurple
+clPurple
+1.5707963267949
+10
+OnConnect
+oz9VGOLnCUChZ5znyjLuEAAA
+KBRuOTWQb0Kxs3sxGmlxTQAA
+
+
+False
+1.5707963267949
+25
+oz9VGOLnCUChZ5znyjLuEAAA
+KBRuOTWQb0Kxs3sxGmlxTQAA
+
+
+False
+-1.5707963267949
+10
+oz9VGOLnCUChZ5znyjLuEAAA
+KBRuOTWQb0Kxs3sxGmlxTQAA
+
+
+False
+1702
+349
+14
+29
+
+
+
+$00B9FFFF
+lsRectilinear
+1946,349;2173,349
+qOZhBu7iv0295TZDqlzApwAA
+mw7/rLkCOEGcLiEDsPSp6QAA
+LtIPm701qEiKOEIQzsRsigAA
+
+1.5707963267949
+10
+Connect
+qOZhBu7iv0295TZDqlzApwAA
++UbCYBTI3kar1x77pEFNtgAA
+
+
+False
+1.5707963267949
+25
+qOZhBu7iv0295TZDqlzApwAA
++UbCYBTI3kar1x77pEFNtgAA
+
+
+False
+-1.5707963267949
+10
+qOZhBu7iv0295TZDqlzApwAA
++UbCYBTI3kar1x77pEFNtgAA
+
+
+False
+2173
+349
+14
+29
+
+
+
+clPurple
+$00B9FFFF
+lsRectilinear
+1206,399;957,399
+R2zIGFrlCEKaKzyvT7GYSQAA
+fB7Q+DVBWE6rQM2gSNHKZAAA
+SGclKA1c/EeIKpRjr6adVAAA
+
+clPurple
+1.5707963267949
+10
+OnAccept
+R2zIGFrlCEKaKzyvT7GYSQAA
+7Khq9w8CGEqNyK9jPATR7wAA
+
+
+False
+1.5707963267949
+25
+R2zIGFrlCEKaKzyvT7GYSQAA
+7Khq9w8CGEqNyK9jPATR7wAA
+
+
+False
+-1.5707963267949
+10
+R2zIGFrlCEKaKzyvT7GYSQAA
+7Khq9w8CGEqNyK9jPATR7wAA
+
+
+False
+957
+399
+14
+29
+
+
+
+$00B9FFFF
+lsRectilinear
+1458,399;1206,399
+1zvjlDg+4kCIQVSgL1zDcQAA
+SGclKA1c/EeIKpRjr6adVAAA
+04EYjXxjXESV7JyM0501yQAA
+
+1.5707963267949
+10
+Connect
+1zvjlDg+4kCIQVSgL1zDcQAA
+F51H4/s89UGOD6UgisZ6rQAA
+
+
+False
+1.5707963267949
+25
+1zvjlDg+4kCIQVSgL1zDcQAA
+F51H4/s89UGOD6UgisZ6rQAA
+
+
+False
+-1.5707963267949
+10
+1zvjlDg+4kCIQVSgL1zDcQAA
+F51H4/s89UGOD6UgisZ6rQAA
+
+
+False
+1206
+399
+14
+29
+
+
+
+clBlue
+$00B9FFFF
+lsRectilinear
+147,429;620,429
+4hoSWcXUfke9LteCU5kIwwAA
+BexDoaFUEkCBpmk29zrEggAA
+gtOTyYM9IUenocj7Nq/rCQAA
+
+clNavy
+1.5707963267949
+10
+Start()
+4hoSWcXUfke9LteCU5kIwwAA
+6Uog5bXZhUiHM0gZRpNlmgAA
+
+
+False
+1.5707963267949
+25
+4hoSWcXUfke9LteCU5kIwwAA
+6Uog5bXZhUiHM0gZRpNlmgAA
+
+
+False
+-1.5707963267949
+10
+4hoSWcXUfke9LteCU5kIwwAA
+6Uog5bXZhUiHM0gZRpNlmgAA
+
+
+620
+429
+14
+29
+
+
+
+clBlue
+$00B9FFFF
+lsRectilinear
+1702,440;1933,440
+wjXK0j1It0OH0yUKkwb+BQAA
+LtIPm701qEiKOEIQzsRsigAA
+yRcxWVCafEypCOzoqyZd9wAA
+
+clBlue
+1.5707963267949
+10
+Send()
+wjXK0j1It0OH0yUKkwb+BQAA
+ZTNKB8pelUiJllAFqF5yvgAA
+
+
+False
+1.5707963267949
+25
+wjXK0j1It0OH0yUKkwb+BQAA
+ZTNKB8pelUiJllAFqF5yvgAA
+
+
+False
+-1.5707963267949
+10
+wjXK0j1It0OH0yUKkwb+BQAA
+ZTNKB8pelUiJllAFqF5yvgAA
+
+
+1933
+440
+14
+29
+
+
+
+clPurple
+$00B9FFFF
+clPurple
+lsRectilinear
+1933,464;1702,464
+hJJRrn7qSU+4yKjjptTojAAA
+yRcxWVCafEypCOzoqyZd9wAA
+LtIPm701qEiKOEIQzsRsigAA
+
+clPurple
+clPurple
+1.5707963267949
+10
+OnSend
+hJJRrn7qSU+4yKjjptTojAAA
+7j6N8nOtAEmB8NfiHrmbIQAA
+
+
+False
+1.5707963267949
+25
+hJJRrn7qSU+4yKjjptTojAAA
+7j6N8nOtAEmB8NfiHrmbIQAA
+
+
+False
+-1.5707963267949
+10
+hJJRrn7qSU+4yKjjptTojAAA
+7j6N8nOtAEmB8NfiHrmbIQAA
+
+
+False
+1702
+464
+14
+29
+
+
+
+$00B9FFFF
+lsRectilinear
+1946,464;2173,464
+Eg1/ELcHik2Up68uZHh8yQAA
+mw7/rLkCOEGcLiEDsPSp6QAA
+LtIPm701qEiKOEIQzsRsigAA
+
+1.5707963267949
+10
+Send
+Eg1/ELcHik2Up68uZHh8yQAA
+ATDOv2t9gEOu+eLMb9R4UAAA
+
+
+False
+1.5707963267949
+25
+Eg1/ELcHik2Up68uZHh8yQAA
+ATDOv2t9gEOu+eLMb9R4UAAA
+
+
+False
+-1.5707963267949
+10
+Eg1/ELcHik2Up68uZHh8yQAA
+ATDOv2t9gEOu+eLMb9R4UAAA
+
+
+False
+2173
+464
+14
+29
+
+
+
+clBlue
+$00B9FFFF
+lsRectilinear
+147,495;620,495
+Dd01nPPtvUmZGMmaii+l8AAA
+BexDoaFUEkCBpmk29zrEggAA
+gtOTyYM9IUenocj7Nq/rCQAA
+
+clNavy
+1.5707963267949
+10
+Connect(address, port)
+Dd01nPPtvUmZGMmaii+l8AAA
+6z8juZwgW0+ApkebzIIVqwAA
+
+
+False
+1.5707963267949
+25
+Dd01nPPtvUmZGMmaii+l8AAA
+6z8juZwgW0+ApkebzIIVqwAA
+
+
+False
+-1.5707963267949
+10
+Dd01nPPtvUmZGMmaii+l8AAA
+6z8juZwgW0+ApkebzIIVqwAA
+
+
+620
+495
+14
+29
+
+
+
+clPurple
+$00B9FFFF
+lsRectilinear
+1206,507;957,507
+yEyx+76l70agEtERTC8A3gAA
+fB7Q+DVBWE6rQM2gSNHKZAAA
+SGclKA1c/EeIKpRjr6adVAAA
+
+clPurple
+1.5707963267949
+10
+OnReceive
+yEyx+76l70agEtERTC8A3gAA
+dHhE0pvmZ02JicuvK5SN+gAA
+
+
+False
+1.5707963267949
+25
+yEyx+76l70agEtERTC8A3gAA
+dHhE0pvmZ02JicuvK5SN+gAA
+
+
+False
+-1.5707963267949
+10
+yEyx+76l70agEtERTC8A3gAA
+dHhE0pvmZ02JicuvK5SN+gAA
+
+
+False
+957
+507
+14
+29
+
+
+
+$00B9FFFF
+lsRectilinear
+1458,507;1206,507
+wb7PgcS43U24SfLIi+31YQAA
+SGclKA1c/EeIKpRjr6adVAAA
+04EYjXxjXESV7JyM0501yQAA
+
+1.5707963267949
+10
+Send
+wb7PgcS43U24SfLIi+31YQAA
+smpZhVwRukGySgvtPqsUxAAA
+
+
+False
+1.5707963267949
+25
+wb7PgcS43U24SfLIi+31YQAA
+smpZhVwRukGySgvtPqsUxAAA
+
+
+False
+-1.5707963267949
+10
+wb7PgcS43U24SfLIi+31YQAA
+smpZhVwRukGySgvtPqsUxAAA
+
+
+False
+1206
+507
+14
+29
+
+
+
+$00A703B4
+$00B9FFFF
+lsRectilinear
+627,555;395,555
+jQfI7z+Tv0umyvJ5ac6g1wAA
+enASZyLbhUip3579An5eRwAA
+BexDoaFUEkCBpmk29zrEggAA
+
+clMaroon
+1.5707963267949
+10
+OnPrepareConnect(connid)
+jQfI7z+Tv0umyvJ5ac6g1wAA
+tfIWfLElhUuRVt22cXDBeAAA
+
+
+False
+1.5707963267949
+25
+jQfI7z+Tv0umyvJ5ac6g1wAA
+tfIWfLElhUuRVt22cXDBeAAA
+
+
+False
+-1.5707963267949
+10
+jQfI7z+Tv0umyvJ5ac6g1wAA
+tfIWfLElhUuRVt22cXDBeAAA
+
+
+382
+555
+14
+29
+
+
+
+clPurple
+$00B9FFFF
+clPurple
+lsRectilinear
+1940,568;1702,568
+N9pXJsZRlUmaybf6IJQ4mgAA
+yRcxWVCafEypCOzoqyZd9wAA
+LtIPm701qEiKOEIQzsRsigAA
+
+clPurple
+clPurple
+1.5707963267949
+10
+OnReceive
+N9pXJsZRlUmaybf6IJQ4mgAA
+dDCiuxW8s0y6Luz8hDGRlAAA
+
+
+False
+1.5707963267949
+25
+N9pXJsZRlUmaybf6IJQ4mgAA
+dDCiuxW8s0y6Luz8hDGRlAAA
+
+
+False
+-1.5707963267949
+10
+N9pXJsZRlUmaybf6IJQ4mgAA
+dDCiuxW8s0y6Luz8hDGRlAAA
+
+
+False
+1702
+568
+14
+29
+
+
+
+$00B9FFFF
+lsRectilinear
+2173,568;1940,568
+Z5SRL0VyAk2BAVlOyee2QwAA
+LtIPm701qEiKOEIQzsRsigAA
+mw7/rLkCOEGcLiEDsPSp6QAA
+
+1.5707963267949
+10
+Send
+Z5SRL0VyAk2BAVlOyee2QwAA
+/JeU3JlGDEeacIe+5aDr1AAA
+
+
+False
+1.5707963267949
+25
+Z5SRL0VyAk2BAVlOyee2QwAA
+/JeU3JlGDEeacIe+5aDr1AAA
+
+
+False
+-1.5707963267949
+10
+Z5SRL0VyAk2BAVlOyee2QwAA
+/JeU3JlGDEeacIe+5aDr1AAA
+
+
+False
+1940
+568
+14
+29
+
+
+
+$00A703B4
+$00B9FFFF
+lsRectilinear
+627,616;395,616
+JunGTRMAMEuAy1IqCOHccQAA
+enASZyLbhUip3579An5eRwAA
+BexDoaFUEkCBpmk29zrEggAA
+
+clMaroon
+1.5707963267949
+10
+OnConnect(connid)
+JunGTRMAMEuAy1IqCOHccQAA
+PPhh4IC3sku4vCK4K8qUbQAA
+
+
+False
+1.5707963267949
+25
+JunGTRMAMEuAy1IqCOHccQAA
+PPhh4IC3sku4vCK4K8qUbQAA
+
+
+False
+-1.5707963267949
+10
+JunGTRMAMEuAy1IqCOHccQAA
+PPhh4IC3sku4vCK4K8qUbQAA
+
+
+382
+616
+14
+29
+
+
+
+clBlue
+$00B9FFFF
+lsRectilinear
+957,620;1199,620
+02A3b3ioX0qlnvJtx6cIagAA
+SGclKA1c/EeIKpRjr6adVAAA
+fB7Q+DVBWE6rQM2gSNHKZAAA
+
+clBlue
+1.5707963267949
+10
+Send()
+02A3b3ioX0qlnvJtx6cIagAA
+S1Kxo90uOEePeIXzh9h+ZwAA
+
+
+False
+1.5707963267949
+25
+02A3b3ioX0qlnvJtx6cIagAA
+S1Kxo90uOEePeIXzh9h+ZwAA
+
+
+False
+-1.5707963267949
+10
+02A3b3ioX0qlnvJtx6cIagAA
+S1Kxo90uOEePeIXzh9h+ZwAA
+
+
+1199
+620
+14
+33
+
+
+
+clPurple
+$00B9FFFF
+lsRectilinear
+1199,648;957,648
+gEtk/cB3KEOiz2OMHIXtXQAA
+fB7Q+DVBWE6rQM2gSNHKZAAA
+SGclKA1c/EeIKpRjr6adVAAA
+
+clPurple
+1.5707963267949
+10
+OnSend
+gEtk/cB3KEOiz2OMHIXtXQAA
+q6ROVMPvT06hHZhtrvcFGQAA
+
+
+False
+1.5707963267949
+25
+gEtk/cB3KEOiz2OMHIXtXQAA
+q6ROVMPvT06hHZhtrvcFGQAA
+
+
+False
+-1.5707963267949
+10
+gEtk/cB3KEOiz2OMHIXtXQAA
+q6ROVMPvT06hHZhtrvcFGQAA
+
+
+False
+957
+648
+14
+29
+
+
+
+$00B9FFFF
+lsRectilinear
+1212,648;1458,648
+jfHJN6N3Q0mtnffCkx/XNAAA
+04EYjXxjXESV7JyM0501yQAA
+SGclKA1c/EeIKpRjr6adVAAA
+
+1.5707963267949
+10
+Send
+jfHJN6N3Q0mtnffCkx/XNAAA
+coQmEVUSeEa7og7ZhhbDBwAA
+
+
+False
+1.5707963267949
+25
+jfHJN6N3Q0mtnffCkx/XNAAA
+coQmEVUSeEa7og7ZhhbDBwAA
+
+
+False
+-1.5707963267949
+10
+jfHJN6N3Q0mtnffCkx/XNAAA
+coQmEVUSeEa7og7ZhhbDBwAA
+
+
+False
+1458
+648
+14
+29
+
+
+
+clPurple
+$00B9FFFF
+clPurple
+lsRectilinear
+1940,656;1702,656
+XhOJgHKLNE+7Q4KPQbSulAAA
+yRcxWVCafEypCOzoqyZd9wAA
+LtIPm701qEiKOEIQzsRsigAA
+
+clPurple
+clPurple
+1.5707963267949
+10
+OnClose
+XhOJgHKLNE+7Q4KPQbSulAAA
+MY04krdOgUy47GAbt0NDFAAA
+
+
+False
+1.5707963267949
+25
+XhOJgHKLNE+7Q4KPQbSulAAA
+MY04krdOgUy47GAbt0NDFAAA
+
+
+False
+-1.5707963267949
+10
+XhOJgHKLNE+7Q4KPQbSulAAA
+MY04krdOgUy47GAbt0NDFAAA
+
+
+False
+1702
+656
+14
+29
+
+
+
+$00B9FFFF
+lsRectilinear
+2173,656;1940,656
+M2ziWA1eJUGke3Uslc7kMwAA
+LtIPm701qEiKOEIQzsRsigAA
+mw7/rLkCOEGcLiEDsPSp6QAA
+
+1.5707963267949
+10
+Disconnect
+M2ziWA1eJUGke3Uslc7kMwAA
+SjVH++WOwEynnRt6joGZJQAA
+
+
+False
+1.5707963267949
+25
+M2ziWA1eJUGke3Uslc7kMwAA
+SjVH++WOwEynnRt6joGZJQAA
+
+
+False
+-1.5707963267949
+10
+M2ziWA1eJUGke3Uslc7kMwAA
+SjVH++WOwEynnRt6joGZJQAA
+
+
+False
+1940
+656
+14
+29
+
+
+
+clBlue
+$00B9FFFF
+lsRectilinear
+147,676;620,676
+JjTzmv8xZkyzSk5L/26mAAAA
+BexDoaFUEkCBpmk29zrEggAA
+gtOTyYM9IUenocj7Nq/rCQAA
+
+clNavy
+1.5707963267949
+10
+Send(connid, data, length)
+JjTzmv8xZkyzSk5L/26mAAAA
+m/wbvETGy0yBNNBC3y+LcgAA
+
+
+False
+1.5707963267949
+25
+JjTzmv8xZkyzSk5L/26mAAAA
+m/wbvETGy0yBNNBC3y+LcgAA
+
+
+False
+-1.5707963267949
+10
+JjTzmv8xZkyzSk5L/26mAAAA
+m/wbvETGy0yBNNBC3y+LcgAA
+
+
+620
+676
+14
+29
+
+
+
+clPurple
+$00B9FFFF
+lsRectilinear
+1206,728;957,728
+0hr2j6uSRkiDwGZUmx4uigAA
+fB7Q+DVBWE6rQM2gSNHKZAAA
+SGclKA1c/EeIKpRjr6adVAAA
+
+clPurple
+1.5707963267949
+10
+OnClose
+0hr2j6uSRkiDwGZUmx4uigAA
+SbIpBJS4mUWStRZ1eWLzJwAA
+
+
+False
+1.5707963267949
+25
+0hr2j6uSRkiDwGZUmx4uigAA
+SbIpBJS4mUWStRZ1eWLzJwAA
+
+
+False
+-1.5707963267949
+10
+0hr2j6uSRkiDwGZUmx4uigAA
+SbIpBJS4mUWStRZ1eWLzJwAA
+
+
+False
+957
+728
+14
+29
+
+
+
+$00B9FFFF
+lsRectilinear
+1458,728;1206,728
+fEaX7prSFk6ZtUpnQCErOgAA
+SGclKA1c/EeIKpRjr6adVAAA
+04EYjXxjXESV7JyM0501yQAA
+
+1.5707963267949
+10
+Disconnect
+fEaX7prSFk6ZtUpnQCErOgAA
+rE0KjgQ/y0aUQ421QvI9MQAA
+
+
+False
+1.5707963267949
+25
+fEaX7prSFk6ZtUpnQCErOgAA
+rE0KjgQ/y0aUQ421QvI9MQAA
+
+
+False
+-1.5707963267949
+10
+fEaX7prSFk6ZtUpnQCErOgAA
+rE0KjgQ/y0aUQ421QvI9MQAA
+
+
+False
+1206
+728
+14
+29
+
+
+
+$00A703B4
+$00B9FFFF
+lsRectilinear
+627,732;395,732
+K5Yx1sRrakeMEdhgvbU6BwAA
+enASZyLbhUip3579An5eRwAA
+BexDoaFUEkCBpmk29zrEggAA
+
+clMaroon
+1.5707963267949
+10
+OnSend(connid, data, length)
+K5Yx1sRrakeMEdhgvbU6BwAA
+nNaRZXTwN0205YVILz8JdgAA
+
+
+False
+1.5707963267949
+25
+K5Yx1sRrakeMEdhgvbU6BwAA
+nNaRZXTwN0205YVILz8JdgAA
+
+
+False
+-1.5707963267949
+10
+K5Yx1sRrakeMEdhgvbU6BwAA
+nNaRZXTwN0205YVILz8JdgAA
+
+
+382
+732
+14
+29
+
+
+
+clBlue
+$00B9FFFF
+lsRectilinear
+1702,756;1933,756
+OVurhNbPjE23+XwihCOnFQAA
+LtIPm701qEiKOEIQzsRsigAA
+yRcxWVCafEypCOzoqyZd9wAA
+
+clBlue
+1.5707963267949
+10
+Stop()
+OVurhNbPjE23+XwihCOnFQAA
+lXG+rFjJOk64gnsWL44HegAA
+
+
+False
+1.5707963267949
+25
+OVurhNbPjE23+XwihCOnFQAA
+lXG+rFjJOk64gnsWL44HegAA
+
+
+False
+-1.5707963267949
+10
+OVurhNbPjE23+XwihCOnFQAA
+lXG+rFjJOk64gnsWL44HegAA
+
+
+1933
+756
+14
+29
+
+
+
+$00B9FFFF
+lsRectilinear
+1946,780;2173,780
+4nCUuj5zWkyD5QM1T7mWoAAA
+mw7/rLkCOEGcLiEDsPSp6QAA
+LtIPm701qEiKOEIQzsRsigAA
+
+1.5707963267949
+10
+Disconnect
+4nCUuj5zWkyD5QM1T7mWoAAA
+6UPro7leY0O1DYOm4gvoCQAA
+
+
+False
+1.5707963267949
+25
+4nCUuj5zWkyD5QM1T7mWoAAA
+6UPro7leY0O1DYOm4gvoCQAA
+
+
+False
+-1.5707963267949
+10
+4nCUuj5zWkyD5QM1T7mWoAAA
+6UPro7leY0O1DYOm4gvoCQAA
+
+
+False
+2173
+780
+14
+29
+
+
+
+clPurple
+$00B9FFFF
+clPurple
+lsRectilinear
+1933,781;1702,781
+Fz8nASWwCE6JmU5bZSWDjAAA
+yRcxWVCafEypCOzoqyZd9wAA
+LtIPm701qEiKOEIQzsRsigAA
+
+clPurple
+clPurple
+1.5707963267949
+10
+OnClose
+Fz8nASWwCE6JmU5bZSWDjAAA
+PmJ8Hi7oT0mfzr2wIKif6wAA
+
+
+False
+1.5707963267949
+25
+Fz8nASWwCE6JmU5bZSWDjAAA
+PmJ8Hi7oT0mfzr2wIKif6wAA
+
+
+False
+-1.5707963267949
+10
+Fz8nASWwCE6JmU5bZSWDjAAA
+PmJ8Hi7oT0mfzr2wIKif6wAA
+
+
+False
+1702
+781
+14
+29
+
+
+
+clBlue
+$00B9FFFF
+lsRectilinear
+957,816;1199,816
+MwEkpjxhMEmwSm9iWOGPMAAA
+SGclKA1c/EeIKpRjr6adVAAA
+fB7Q+DVBWE6rQM2gSNHKZAAA
+
+clBlue
+1.5707963267949
+10
+Disconnect()
+MwEkpjxhMEmwSm9iWOGPMAAA
+Up/UudcwsEyJGWHcu8B1oQAA
+
+
+False
+1.5707963267949
+25
+MwEkpjxhMEmwSm9iWOGPMAAA
+Up/UudcwsEyJGWHcu8B1oQAA
+
+
+False
+-1.5707963267949
+10
+MwEkpjxhMEmwSm9iWOGPMAAA
+Up/UudcwsEyJGWHcu8B1oQAA
+
+
+1199
+816
+14
+29
+
+
+
+$00A703B4
+$00B9FFFF
+lsRectilinear
+627,829;395,829
+QcAX8dFF2kyeKSVNYAQyGAAA
+enASZyLbhUip3579An5eRwAA
+BexDoaFUEkCBpmk29zrEggAA
+
+clMaroon
+1.5707963267949
+10
+OnReceive(connid, data, length)
+QcAX8dFF2kyeKSVNYAQyGAAA
++cchD3UcdkSIFdn3Geou7wAA
+
+
+False
+1.5707963267949
+25
+QcAX8dFF2kyeKSVNYAQyGAAA
++cchD3UcdkSIFdn3Geou7wAA
+
+
+False
+-1.5707963267949
+10
+QcAX8dFF2kyeKSVNYAQyGAAA
++cchD3UcdkSIFdn3Geou7wAA
+
+
+382
+829
+14
+29
+
+
+
+clPurple
+$00B9FFFF
+lsRectilinear
+1199,840;957,840
+QHwYoSSQtESypYaOH9iHjwAA
+fB7Q+DVBWE6rQM2gSNHKZAAA
+SGclKA1c/EeIKpRjr6adVAAA
+
+clPurple
+1.5707963267949
+10
+OnClose
+QHwYoSSQtESypYaOH9iHjwAA
+xx+bHdVdikeFEEdZRpUAewAA
+
+
+False
+1.5707963267949
+25
+QHwYoSSQtESypYaOH9iHjwAA
+xx+bHdVdikeFEEdZRpUAewAA
+
+
+False
+-1.5707963267949
+10
+QHwYoSSQtESypYaOH9iHjwAA
+xx+bHdVdikeFEEdZRpUAewAA
+
+
+False
+957
+840
+14
+29
+
+
+
+$00B9FFFF
+lsRectilinear
+1212,840;1458,840
+0tMhx9FGokewzBdSGlA2ygAA
+04EYjXxjXESV7JyM0501yQAA
+SGclKA1c/EeIKpRjr6adVAAA
+
+1.5707963267949
+10
+Disconnect
+0tMhx9FGokewzBdSGlA2ygAA
+b2G/gJEzcEW5tix0y/s0xQAA
+
+
+False
+1.5707963267949
+25
+0tMhx9FGokewzBdSGlA2ygAA
+b2G/gJEzcEW5tix0y/s0xQAA
+
+
+False
+-1.5707963267949
+10
+0tMhx9FGokewzBdSGlA2ygAA
+b2G/gJEzcEW5tix0y/s0xQAA
+
+
+False
+1458
+840
+14
+29
+
+
+
+clBlue
+$00B9FFFF
+lsRectilinear
+957,908;1199,908
+F0p8CwFIxE6A+uFqsVdypwAA
+SGclKA1c/EeIKpRjr6adVAAA
+fB7Q+DVBWE6rQM2gSNHKZAAA
+
+clBlue
+1.5707963267949
+10
+Stop()
+F0p8CwFIxE6A+uFqsVdypwAA
+UNWvYjoToE6l/0jU2PyghwAA
+
+
+False
+1.5707963267949
+25
+F0p8CwFIxE6A+uFqsVdypwAA
+UNWvYjoToE6l/0jU2PyghwAA
+
+
+False
+-1.5707963267949
+10
+F0p8CwFIxE6A+uFqsVdypwAA
+UNWvYjoToE6l/0jU2PyghwAA
+
+
+1199
+908
+14
+29
+
+
+
+$00A703B4
+$00B9FFFF
+lsRectilinear
+627,928;395,928
+QJhSCFnA0Ei2roB4lPLNhgAA
+enASZyLbhUip3579An5eRwAA
+BexDoaFUEkCBpmk29zrEggAA
+
+clMaroon
+1.5707963267949
+10
+OnClose(connid, operation, code)
+QJhSCFnA0Ei2roB4lPLNhgAA
+955086JJSEGzOBHG63RjTwAA
+
+
+False
+1.5707963267949
+25
+QJhSCFnA0Ei2roB4lPLNhgAA
+955086JJSEGzOBHG63RjTwAA
+
+
+False
+-1.5707963267949
+10
+QJhSCFnA0Ei2roB4lPLNhgAA
+955086JJSEGzOBHG63RjTwAA
+
+
+382
+928
+14
+29
+
+
+
+clPurple
+$00B9FFFF
+lsRectilinear
+1199,932;957,932
+FjbPFNpo106+r3RZ67ZnFwAA
+fB7Q+DVBWE6rQM2gSNHKZAAA
+SGclKA1c/EeIKpRjr6adVAAA
+
+clPurple
+1.5707963267949
+10
+OnShutdown
+FjbPFNpo106+r3RZ67ZnFwAA
+095qm2doBU2w6jghi0CZlgAA
+
+
+False
+1.5707963267949
+25
+FjbPFNpo106+r3RZ67ZnFwAA
+095qm2doBU2w6jghi0CZlgAA
+
+
+False
+-1.5707963267949
+10
+FjbPFNpo106+r3RZ67ZnFwAA
+095qm2doBU2w6jghi0CZlgAA
+
+
+False
+957
+932
+14
+29
+
+
+
+clBlue
+$00B9FFFF
+lsRectilinear
+147,1028;620,1028
+yXKHIjR8gkG5PTWkHsolYwAA
+BexDoaFUEkCBpmk29zrEggAA
+gtOTyYM9IUenocj7Nq/rCQAA
+
+clNavy
+1.5707963267949
+10
+Stop()
+yXKHIjR8gkG5PTWkHsolYwAA
+tKJbUizZ0Eez+ToWvvvHTAAA
+
+
+False
+1.5707963267949
+25
+yXKHIjR8gkG5PTWkHsolYwAA
+tKJbUizZ0Eez+ToWvvvHTAAA
+
+
+False
+-1.5707963267949
+10
+yXKHIjR8gkG5PTWkHsolYwAA
+tKJbUizZ0Eez+ToWvvvHTAAA
+
+
+620
+1028
+14
+29
+
+
+
+$00A703B4
+$00B9FFFF
+lsRectilinear
+627,1096;395,1096
+0c9hLinu20uJNJm9U5CPyAAA
+enASZyLbhUip3579An5eRwAA
+BexDoaFUEkCBpmk29zrEggAA
+
+clMaroon
+1.5707963267949
+10
+OnShutdown()
+0c9hLinu20uJNJm9U5CPyAAA
+bDYJaJ+Kb06dtPzUvKpOOQAA
+
+
+False
+1.5707963267949
+25
+0c9hLinu20uJNJm9U5CPyAAA
+bDYJaJ+Kb06dtPzUvKpOOQAA
+
+
+False
+-1.5707963267949
+10
+0c9hLinu20uJNJm9U5CPyAAA
+bDYJaJ+Kb06dtPzUvKpOOQAA
+
+
+382
+1096
+14
+29
+
+
+
+
+48
+
+new
+listener
+IClient
+rscStAuJEkiUAz9WikX0hQAA
+lvD/j4YgmkG/Ov+o+mJZPQAA
+
+tmMPWz926keOYRK7CfB+ogAA
+
+0VTzN8sts0yg55EvvKzPQAAA
+4
+zn6D2ECw+Eu8AUGWOyBeGwAA
+xfv0zr6rnkm5TK3b06vEwwAA
+f+a6lSTIlUmKsnDRas5bqgAA
+LugiIgdH9UKlbkDROnnA2gAA
+
+
+new
+listener
+IServer
+j+NgCUOjNE2kmFd3hYSIegAA
+ychpc6mSzUOyFf7vQMlVXAAA
+
+gAVKOFcG5Uy+DJqh3e+rmQAA
+
+0VTzN8sts0yg55EvvKzPQAAA
+4
+Ao9U+ysX4kSHNAEgs/GP6QAA
+w4rc2loRAUa80WaA7rYUDAAA
++cj0GJzkFU2rgru6n11tRwAA
+FQ/zJ+WvCEiRzaR37ea2LQAA
+
+
+new
+ITcpAgentListener
+wQGBjVheXk6JUG6UyHLOLQAA
+Amawaz/I9kSR3ZRprOaA0QAA
+
+u0t7NrBh2EmsnM1kDsHdBwAA
+
+0VTzN8sts0yg55EvvKzPQAAA
+4
+1lwIUuEn1UievyHx8P6L4wAA
+p0y8z97QckqGuNv6LxlH0AAA
+tRifWe6/TUaqX+BanyQGzwAA
+AIUVT++MVEu0ECFwH+9GIQAA
+
+
+client
+lvD/j4YgmkG/Ov+o+mJZPQAA
+rscStAuJEkiUAz9WikX0hQAA
+
+qdFUCd8ppUytkbv1kQ22KAAA
+
+0VTzN8sts0yg55EvvKzPQAAA
+4
+BRZi89k2FkSJZxAOYzWP1wAA
+pvPxh5bfl0WRhBYQoUhrTAAA
+oSbPqpsoRU2uoJc3ASyKPAAA
+/g3lckro6kmKWUJk5TBEuAAA
+
+
+server
+ychpc6mSzUOyFf7vQMlVXAAA
+j+NgCUOjNE2kmFd3hYSIegAA
+
+pPAAy86kd0iPjz3jRkE7GQAA
+
+0VTzN8sts0yg55EvvKzPQAAA
+4
+WM1BZGw83E6VMbBt8/T9sQAA
++xnMfusA90OhNi+UUPeLVQAA
+MSx0gLWyiky9hhkepyM9FQAA
+RW5we4NKmEq7s+qefls0zgAA
+
+
+listener
+Amawaz/I9kSR3ZRprOaA0QAA
+wQGBjVheXk6JUG6UyHLOLQAA
+
+zvjkh/olMkKz8fshUqs1/gAA
+
+0VTzN8sts0yg55EvvKzPQAAA
+4
+DYmXwHQZ1EmVy87fdA6qaAAA
+X81cwuPsgk+KAWMq1YOCMQAA
+rGAi9je/QEWjQ7asjxBsLgAA
+UACZU1moXEqx6xEgO5z9fgAA
+
+
+Start
+j+NgCUOjNE2kmFd3hYSIegAA
+ychpc6mSzUOyFf7vQMlVXAAA
+
+X5T4GSZ++0CHKCiad7lJUQAA
+
+0VTzN8sts0yg55EvvKzPQAAA
+4
++k4sIdNc60iYAznNneRuzAAA
+Bg2EWkCZF06lcSowbntWugAA
+uKIBGZNQbk6SDM1HFYtyFwAA
+El2opIvE5k6n5ifKYimoKwAA
+
+
+Start
+rscStAuJEkiUAz9WikX0hQAA
+lvD/j4YgmkG/Ov+o+mJZPQAA
+
+i0okbOG+V0Wy21SEhlS3YQAA
+
+0VTzN8sts0yg55EvvKzPQAAA
+4
+XwaiI/v6qkC56jzj/IhW6gAA
+ecOU55F1MECtQMjpOvHU9AAA
+F6zA2RmeBEeghYGTwqfaRAAA
+6LAQlXh9wkyfa0rVIrVkdgAA
+
+
+OnPrepareListen
+ychpc6mSzUOyFf7vQMlVXAAA
+j+NgCUOjNE2kmFd3hYSIegAA
+
+zinYWd6ATEavjMBO+/H28wAA
+
+0VTzN8sts0yg55EvvKzPQAAA
+4
+rJ5GoZYRJEyEcqM/vzPmHQAA
+Kaez2YSIiE+TTARh+vQZcAAA
+WPqh4nY5ykaepmCFfzImyAAA
+2IfyPo+bW0qRd6ScP32DNwAA
+
+
+new
+True
+listener
+ITcpAgent
+wQGBjVheXk6JUG6UyHLOLQAA
+U2Za99rIrEi8z93FLSAjUAAA
+
+IGSCEi76fECYOq9TAgfycAAA
+
+0VTzN8sts0yg55EvvKzPQAAA
+4
+gswhi/yQlEyni0BQeCu9YAAA
+BQYOtXZnHUCs5ggsV96l7wAA
+9PNqWxktFEy/o/ppt3n5gAAA
+YCa1mPCRO0G5LOjp9s6g4AAA
+
+
+OnPrepareConnect
+lvD/j4YgmkG/Ov+o+mJZPQAA
+rscStAuJEkiUAz9WikX0hQAA
+
+cMDdajmI+EqZX7e2IJLW2AAA
+
+0VTzN8sts0yg55EvvKzPQAAA
+4
+HhmcyDgFYkeEUyKoPJYJawAA
+bFiEmUyfhUm3jrQW2TQduwAA
+ZEPj09i3QUOxDaJ6v1vNTQAA
+jvFw0qcHJkqdZD+H87HlZgAA
+
+
+agent
+U2Za99rIrEi8z93FLSAjUAAA
+wQGBjVheXk6JUG6UyHLOLQAA
+
+YB6eaJtPCk2AGSgtffbdcAAA
+
+0VTzN8sts0yg55EvvKzPQAAA
+4
+pJ8aa9482EKLz1EwjSpJ2wAA
+XFSqaGi1F0anw7TZXNFZ3gAA
+MZ06AEJL+EqPw5Qo7q0nLAAA
+mvPRwpfcYU2UjxYdKYfsWgAA
+
+
+OnConnect
+lvD/j4YgmkG/Ov+o+mJZPQAA
+rscStAuJEkiUAz9WikX0hQAA
+
+oz9VGOLnCUChZ5znyjLuEAAA
+
+0VTzN8sts0yg55EvvKzPQAAA
+4
+KBRuOTWQb0Kxs3sxGmlxTQAA
+WkAcnSHO/EukHfG2S7ZP6AAA
+0b0yc5BrqUewNMyOjR+1fgAA
+fastR8O0IkmZ8Ed1ehqGEQAA
+
+
+Connect
+lvD/j4YgmkG/Ov+o+mJZPQAA
+HdPN0QWbYUq0xPzVpVWOdwAA
+
+qOZhBu7iv0295TZDqlzApwAA
+
+0VTzN8sts0yg55EvvKzPQAAA
+4
++UbCYBTI3kar1x77pEFNtgAA
+66cxWvnpmkKS01S8lsn03wAA
+vPx1leRrCUeaH5DaRz5VmgAA
+fueosi4t/0ifaR9hi4p+DgAA
+
+
+OnAccept
+ychpc6mSzUOyFf7vQMlVXAAA
+j+NgCUOjNE2kmFd3hYSIegAA
+
+R2zIGFrlCEKaKzyvT7GYSQAA
+
+0VTzN8sts0yg55EvvKzPQAAA
+4
+7Khq9w8CGEqNyK9jPATR7wAA
+JyrWiLZqEkSBuLIjbv9FOwAA
+z42TRVagJkmA3Fqm1Q40bgAA
+BWxn2N+paEWuVxxq+eyxXgAA
+
+
+Connect
+Ta3rZIdU6E2pIcWjSM7HXgAA
+ychpc6mSzUOyFf7vQMlVXAAA
+
+1zvjlDg+4kCIQVSgL1zDcQAA
+
+0VTzN8sts0yg55EvvKzPQAAA
+4
+F51H4/s89UGOD6UgisZ6rQAA
+px9WMnVSQE+z24Jd/HCZbAAA
+TzZCTaBxj0u43IOOEv7TUQAA
+wDijN4iHlUaktQrU/bYzwAAA
+
+
+Start
+wQGBjVheXk6JUG6UyHLOLQAA
+U2Za99rIrEi8z93FLSAjUAAA
+
+4hoSWcXUfke9LteCU5kIwwAA
+
+0VTzN8sts0yg55EvvKzPQAAA
+4
+6Uog5bXZhUiHM0gZRpNlmgAA
+nMYEtcPmRE6bNqYuqHVILgAA
+F3xZoXvxtUGwxQ5gJWH+zAAA
+CnBztEHcMUaSalEaqB7c/QAA
+
+
+Send
+rscStAuJEkiUAz9WikX0hQAA
+lvD/j4YgmkG/Ov+o+mJZPQAA
+
+wjXK0j1It0OH0yUKkwb+BQAA
+
+0VTzN8sts0yg55EvvKzPQAAA
+4
+ZTNKB8pelUiJllAFqF5yvgAA
+PO6oqwwjZkiVNCxeHDomZQAA
+XCfX/ApgskucByRDF7PufAAA
+N5JbtkOyBUKfpU2cS/OJ0gAA
+
+
+OnSend
+lvD/j4YgmkG/Ov+o+mJZPQAA
+rscStAuJEkiUAz9WikX0hQAA
+
+hJJRrn7qSU+4yKjjptTojAAA
+
+0VTzN8sts0yg55EvvKzPQAAA
+4
+7j6N8nOtAEmB8NfiHrmbIQAA
+Qxno9bKL6U2/YPbZKsdSIAAA
+VpPXxmUkbUm/UA2qIZcKagAA
+QuUgR8WQOUeTETBJgCyhHwAA
+
+
+Send
+lvD/j4YgmkG/Ov+o+mJZPQAA
+HdPN0QWbYUq0xPzVpVWOdwAA
+
+Eg1/ELcHik2Up68uZHh8yQAA
+
+0VTzN8sts0yg55EvvKzPQAAA
+4
+ATDOv2t9gEOu+eLMb9R4UAAA
+SEjOXbCTDkOtIhUhwOc1HgAA
+i+6xvqQHT0WGLLmZUikFZAAA
+53mBG/8a2k264ymFrSqRoQAA
+
+
+Connect
+address, port
+wQGBjVheXk6JUG6UyHLOLQAA
+U2Za99rIrEi8z93FLSAjUAAA
+
+Dd01nPPtvUmZGMmaii+l8AAA
+
+0VTzN8sts0yg55EvvKzPQAAA
+4
+6z8juZwgW0+ApkebzIIVqwAA
+61gYtskbEUK3DYRW65mM8QAA
+E4nKaE/4nEigh57FbzlOlwAA
+b01pMFnaQ0KUEtM/uItBdAAA
+
+
+OnReceive
+ychpc6mSzUOyFf7vQMlVXAAA
+j+NgCUOjNE2kmFd3hYSIegAA
+
+yEyx+76l70agEtERTC8A3gAA
+
+0VTzN8sts0yg55EvvKzPQAAA
+4
+dHhE0pvmZ02JicuvK5SN+gAA
+/xy87rY/ckqGog20YR8jDgAA
+GqQg6oc8NE2B/kgYnMHN0gAA
+yE5dyPxqA0a72ksNLmdJ8AAA
+
+
+Send
+Ta3rZIdU6E2pIcWjSM7HXgAA
+ychpc6mSzUOyFf7vQMlVXAAA
+
+wb7PgcS43U24SfLIi+31YQAA
+
+0VTzN8sts0yg55EvvKzPQAAA
+4
+smpZhVwRukGySgvtPqsUxAAA
+uMrgrUe6PEWutqKsCFe7AQAA
+LLWy3t49sUK4jrVCmHzvFAAA
+kth0aKdptk2gLZUnlQseigAA
+
+
+OnPrepareConnect
+connid
+U2Za99rIrEi8z93FLSAjUAAA
+Amawaz/I9kSR3ZRprOaA0QAA
+
+jQfI7z+Tv0umyvJ5ac6g1wAA
+
+0VTzN8sts0yg55EvvKzPQAAA
+4
+tfIWfLElhUuRVt22cXDBeAAA
+NCCvYNtv50akw5jcwNR0YAAA
+QK53Dobw8EysjBMdHeMq8QAA
+qzGWy+bk8ECIFi8nd0MzwAAA
+
+
+OnReceive
+lvD/j4YgmkG/Ov+o+mJZPQAA
+rscStAuJEkiUAz9WikX0hQAA
+
+N9pXJsZRlUmaybf6IJQ4mgAA
+
+0VTzN8sts0yg55EvvKzPQAAA
+4
+dDCiuxW8s0y6Luz8hDGRlAAA
+JsigzOXmIUitHGsr8AF5SAAA
+HoTOD5y18EmI6uCYXDAolwAA
+mj6/dJFOvkqy1DfH4DhwqQAA
+
+
+Send
+HdPN0QWbYUq0xPzVpVWOdwAA
+lvD/j4YgmkG/Ov+o+mJZPQAA
+
+Z5SRL0VyAk2BAVlOyee2QwAA
+
+0VTzN8sts0yg55EvvKzPQAAA
+4
+/JeU3JlGDEeacIe+5aDr1AAA
+XZbDJCJjiEeFxdlu+sI0cQAA
+3lWLLDFh+0yBN9CG/fUSjgAA
+JwwtGZ4Pk06V2Tj1A6qcuwAA
+
+
+OnConnect
+connid
+U2Za99rIrEi8z93FLSAjUAAA
+Amawaz/I9kSR3ZRprOaA0QAA
+
+JunGTRMAMEuAy1IqCOHccQAA
+
+0VTzN8sts0yg55EvvKzPQAAA
+4
+PPhh4IC3sku4vCK4K8qUbQAA
+NAc38wISukaNnf/8www6FQAA
+PYxwFq5jl0mzROqr2CyyGQAA
+objh1EFCmES1H/VwJesupQAA
+
+
+Send
+j+NgCUOjNE2kmFd3hYSIegAA
+ychpc6mSzUOyFf7vQMlVXAAA
+
+02A3b3ioX0qlnvJtx6cIagAA
+
+0VTzN8sts0yg55EvvKzPQAAA
+4
+S1Kxo90uOEePeIXzh9h+ZwAA
+tWhZddtdzEWywiuAoC8c8gAA
+Fga3/CQ2BkKu7njM8XQn4QAA
+5stbLcs140Kun1PGx4Ak/QAA
+
+
+OnSend
+ychpc6mSzUOyFf7vQMlVXAAA
+j+NgCUOjNE2kmFd3hYSIegAA
+
+gEtk/cB3KEOiz2OMHIXtXQAA
+
+0VTzN8sts0yg55EvvKzPQAAA
+4
+q6ROVMPvT06hHZhtrvcFGQAA
+bGERDMyxMEa6CW9qKBX+1wAA
+TMskV16980eQsEyZNynlWwAA
+IVZWn1v//kuUTHzAR8Y4JAAA
+
+
+Send
+ychpc6mSzUOyFf7vQMlVXAAA
+Ta3rZIdU6E2pIcWjSM7HXgAA
+
+jfHJN6N3Q0mtnffCkx/XNAAA
+
+0VTzN8sts0yg55EvvKzPQAAA
+4
+coQmEVUSeEa7og7ZhhbDBwAA
+L0UJtA7FfkmQkbmXX/jEiAAA
+2iZtuyG2AEyNn7rBU0SUNgAA
+6zKFlCujT0WpFevsOSC85gAA
+
+
+OnClose
+lvD/j4YgmkG/Ov+o+mJZPQAA
+rscStAuJEkiUAz9WikX0hQAA
+
+XhOJgHKLNE+7Q4KPQbSulAAA
+
+0VTzN8sts0yg55EvvKzPQAAA
+4
+MY04krdOgUy47GAbt0NDFAAA
+MQqABXJYrk+k9d7zfFlN8AAA
+l5UXhnDmB0WogcVpc2M4rgAA
+rsh82z+sNUi6cSYk5yYC7wAA
+
+
+Disconnect
+HdPN0QWbYUq0xPzVpVWOdwAA
+lvD/j4YgmkG/Ov+o+mJZPQAA
+
+M2ziWA1eJUGke3Uslc7kMwAA
+
+0VTzN8sts0yg55EvvKzPQAAA
+4
+SjVH++WOwEynnRt6joGZJQAA
+b/oqJ+rxEU2fnvZVXgH+nAAA
+/m1pUbUroE2iitUeU8JX7wAA
+CSztBO+hBkec4+FndMKfvQAA
+
+
+Send
+connid, data, length
+wQGBjVheXk6JUG6UyHLOLQAA
+U2Za99rIrEi8z93FLSAjUAAA
+
+JjTzmv8xZkyzSk5L/26mAAAA
+
+0VTzN8sts0yg55EvvKzPQAAA
+4
+m/wbvETGy0yBNNBC3y+LcgAA
+xj7vLwvzCUGhy9isZA0aLgAA
+ZsPa88BVZkW5bJMcVDmQmQAA
+imunYXyTJEaYxo2oE3rO8QAA
+
+
+OnClose
+ychpc6mSzUOyFf7vQMlVXAAA
+j+NgCUOjNE2kmFd3hYSIegAA
+
+0hr2j6uSRkiDwGZUmx4uigAA
+
+0VTzN8sts0yg55EvvKzPQAAA
+4
+SbIpBJS4mUWStRZ1eWLzJwAA
+DYKrOjKO90uJWIXbDTcuxAAA
+NkaArdl1tEe5WDfEILo9vwAA
+2vMTGccSG0qulaKXfmxJOQAA
+
+
+Disconnect
+Ta3rZIdU6E2pIcWjSM7HXgAA
+ychpc6mSzUOyFf7vQMlVXAAA
+
+fEaX7prSFk6ZtUpnQCErOgAA
+
+0VTzN8sts0yg55EvvKzPQAAA
+4
+rE0KjgQ/y0aUQ421QvI9MQAA
+aCSWUC1P4kWuqsFsZzEWXwAA
+JYoqYPBPmUagKDUMjijnDAAA
+uPcqBpCTJUuTBrGnpIPl8wAA
+
+
+OnSend
+connid, data, length
+U2Za99rIrEi8z93FLSAjUAAA
+Amawaz/I9kSR3ZRprOaA0QAA
+
+K5Yx1sRrakeMEdhgvbU6BwAA
+
+0VTzN8sts0yg55EvvKzPQAAA
+4
+nNaRZXTwN0205YVILz8JdgAA
+dVHaT6Oj5k6+vZMeEoG7CAAA
+A2L6ylQ4rk6NNju+jcWmwQAA
+Yu9QG3liv0eCvJ81Te0GhgAA
+
+
+Stop
+rscStAuJEkiUAz9WikX0hQAA
+lvD/j4YgmkG/Ov+o+mJZPQAA
+
+OVurhNbPjE23+XwihCOnFQAA
+
+0VTzN8sts0yg55EvvKzPQAAA
+4
+lXG+rFjJOk64gnsWL44HegAA
+rmlye/89SEmq7jZxEta5EgAA
+nargtOdxOkms2XIcdCbGpQAA
+oVTOcCKb4Ea7ZY+QCGJ6kgAA
+
+
+Disconnect
+lvD/j4YgmkG/Ov+o+mJZPQAA
+HdPN0QWbYUq0xPzVpVWOdwAA
+
+4nCUuj5zWkyD5QM1T7mWoAAA
+
+0VTzN8sts0yg55EvvKzPQAAA
+4
+6UPro7leY0O1DYOm4gvoCQAA
+WSK9nqCtX0Ocg+BqcJW2egAA
+Q21MrcGRXE69jo3PPiIs3gAA
+IETSI6TbCUiBDkuAAHLnMwAA
+
+
+OnClose
+lvD/j4YgmkG/Ov+o+mJZPQAA
+rscStAuJEkiUAz9WikX0hQAA
+
+Fz8nASWwCE6JmU5bZSWDjAAA
+
+0VTzN8sts0yg55EvvKzPQAAA
+4
+PmJ8Hi7oT0mfzr2wIKif6wAA
+VM+rb+kH+Ue3S/J2ZCjRrwAA
+7vEjz7SLlEy6ZrDvf+dUwAAA
+5LWhxnHUIkCSK1bwqZrXGgAA
+
+
+Disconnect
+j+NgCUOjNE2kmFd3hYSIegAA
+ychpc6mSzUOyFf7vQMlVXAAA
+
+MwEkpjxhMEmwSm9iWOGPMAAA
+
+0VTzN8sts0yg55EvvKzPQAAA
+4
+Up/UudcwsEyJGWHcu8B1oQAA
+1l/tFba2wUC4n9f098qCdwAA
+roKbMUiApEGs6m4YdM5MKgAA
+cq5rOtn5QUO9sNP33BFtjAAA
+
+
+OnReceive
+connid, data, length
+U2Za99rIrEi8z93FLSAjUAAA
+Amawaz/I9kSR3ZRprOaA0QAA
+
+QcAX8dFF2kyeKSVNYAQyGAAA
+
+0VTzN8sts0yg55EvvKzPQAAA
+4
++cchD3UcdkSIFdn3Geou7wAA
+j1aaoqxTZUSIsf1F6UeWUQAA
+y2KvAReGuUWYtTo2fXfyQwAA
+yFUxll7wz0y1kQ9REt/BgAAA
+
+
+OnClose
+ychpc6mSzUOyFf7vQMlVXAAA
+j+NgCUOjNE2kmFd3hYSIegAA
+
+QHwYoSSQtESypYaOH9iHjwAA
+
+0VTzN8sts0yg55EvvKzPQAAA
+4
+xx+bHdVdikeFEEdZRpUAewAA
+dfVqd0sfBE2hH5rmjdwGWAAA
+pye+9M/B/Ui+KdBZI2OngAAA
+k1vxzQkMrkaMKktmGzhg6AAA
+
+
+Disconnect
+ychpc6mSzUOyFf7vQMlVXAAA
+Ta3rZIdU6E2pIcWjSM7HXgAA
+
+0tMhx9FGokewzBdSGlA2ygAA
+
+0VTzN8sts0yg55EvvKzPQAAA
+4
+b2G/gJEzcEW5tix0y/s0xQAA
+kn00Pmo480e5RQNFO3SaVQAA
+b7yhyUUMe0K+1ctblbL45wAA
+mp/wApNCTE6ypYEsa9v4igAA
+
+
+Stop
+j+NgCUOjNE2kmFd3hYSIegAA
+ychpc6mSzUOyFf7vQMlVXAAA
+
+F0p8CwFIxE6A+uFqsVdypwAA
+
+0VTzN8sts0yg55EvvKzPQAAA
+4
+UNWvYjoToE6l/0jU2PyghwAA
+zWxSevr/IUOajqRARJ1l1AAA
+Yp0xifbDI0WQPg2vD/G0fAAA
++2vfYZ56s0CyiXoJ8R7iJgAA
+
+
+OnClose
+connid, operation, code
+U2Za99rIrEi8z93FLSAjUAAA
+Amawaz/I9kSR3ZRprOaA0QAA
+
+QJhSCFnA0Ei2roB4lPLNhgAA
+
+0VTzN8sts0yg55EvvKzPQAAA
+4
+955086JJSEGzOBHG63RjTwAA
+BFyw4OXcT06YrEqacLGKXwAA
+cDWgkn6r2UOMKQhK6hQcxAAA
+tHnz7M3NPE+/2OEzfK1dWQAA
+
+
+OnShutdown
+ychpc6mSzUOyFf7vQMlVXAAA
+j+NgCUOjNE2kmFd3hYSIegAA
+
+FjbPFNpo106+r3RZ67ZnFwAA
+
+0VTzN8sts0yg55EvvKzPQAAA
+4
+095qm2doBU2w6jghi0CZlgAA
+Zp1voyU25E61seke08J0QwAA
+Rj5w5zVwUUGx7E5cQcB1AgAA
+RGk3C3ZpuUiup+bk6reIvQAA
+
+
+Stop
+wQGBjVheXk6JUG6UyHLOLQAA
+U2Za99rIrEi8z93FLSAjUAAA
+
+yXKHIjR8gkG5PTWkHsolYwAA
+
+0VTzN8sts0yg55EvvKzPQAAA
+4
+tKJbUizZ0Eez+ToWvvvHTAAA
+ZS6aJbCFSEiHJ5du+sv0WgAA
+UAtND7maHEmdHp22WWu9PAAA
+JrCfG8BVq0mpTb1pF1DOhgAA
+
+
+OnShutdown
+U2Za99rIrEi8z93FLSAjUAAA
+Amawaz/I9kSR3ZRprOaA0QAA
+
+0c9hLinu20uJNJm9U5CPyAAA
+
+0VTzN8sts0yg55EvvKzPQAAA
+4
+bDYJaJ+Kb06dtPzUvKpOOQAA
+VZMSVA1tZUuzkUJALomXGgAA
+ufQZhorP/UyYWr+g8Wx6WgAA
+34tdzCVMxUmHXv6nThGzEwAA
+
+3
+
+Listener & Agent
+Create
+0VTzN8sts0yg55EvvKzPQAAA
+
+
+Frame1
+sd
+0VTzN8sts0yg55EvvKzPQAAA
+
+
+Frame2
+sd
+0VTzN8sts0yg55EvvKzPQAAA
+
+
+9
+
+My Logic Controller
+5Xea+2Ha3kuZqH6rjIWf7AAA
+4
+EZHLxNt+aUejK04sc+0EUQAA
+bgjtXzPElEqJn9pi84tImgAA
+wfcNrZq7tka+YsApMmB1GQAA
+gtOTyYM9IUenocj7Nq/rCQAA
+12
+UVJZlx7WuUW8BWRWnTMKVwAA
+eiRtiRQwQU+VjHaN3rVhqAAA
+3ll2HhKX0kq8L2WoIISIqQAA
+qxo3boab2UKQT7Y0WGaO5wAA
+0gQj+YWF1kWUYfNhSvBRRgAA
+z1QNUA0z7UCZuLoDVY19rgAA
+u0t7NrBh2EmsnM1kDsHdBwAA
+IGSCEi76fECYOq9TAgfycAAA
+4hoSWcXUfke9LteCU5kIwwAA
+Dd01nPPtvUmZGMmaii+l8AAA
+JjTzmv8xZkyzSk5L/26mAAAA
+yXKHIjR8gkG5PTWkHsolYwAA
+4
+mpQYN0pghkiv6UDJsnfuWwAA
+gc1T6rnMnUylWpF5/By8ZAAA
+zvjkh/olMkKz8fshUqs1/gAA
+YB6eaJtPCk2AGSgtffbdcAAA
+
+
+My TCP Agent Listener
+5Xea+2Ha3kuZqH6rjIWf7AAA
+4
+swyQ21smL0awb2XAlPy5mgAA
+yexABU1UCEy5R/KkGohcEQAA
+iRb1QxsXIEirQ0i5vx5lMAAA
+enASZyLbhUip3579An5eRwAA
+2
+mpQYN0pghkiv6UDJsnfuWwAA
+zvjkh/olMkKz8fshUqs1/gAA
+14
+UVJZlx7WuUW8BWRWnTMKVwAA
+Wjv7v/0JW0SsHdI2VbWR+AAA
+8p8OEDcPcEqcPclkWC6twgAA
+5CQCgkQMiEa8EdVYKZGhowAA
+OtUn1tUnHUiiI6GLtYamBwAA
+/HUsBl+/S0CY4MtM5ABl2AAA
+Wd9H4IjL3USBGC0pH5hlUQAA
+u0t7NrBh2EmsnM1kDsHdBwAA
+jQfI7z+Tv0umyvJ5ac6g1wAA
+JunGTRMAMEuAy1IqCOHccQAA
+K5Yx1sRrakeMEdhgvbU6BwAA
+QcAX8dFF2kyeKSVNYAQyGAAA
+QJhSCFnA0Ei2roB4lPLNhgAA
+0c9hLinu20uJNJm9U5CPyAAA
+
+
+TCP Agent
+5Xea+2Ha3kuZqH6rjIWf7AAA
+4
+zlV9NJZWG02GGPAxyuQehAAA
+mNvSnPlpGUa+X6DT/4CU0gAA
+K/WqY2T7hECp3eSoc+cc9QAA
+BexDoaFUEkCBpmk29zrEggAA
+14
+gc1T6rnMnUylWpF5/By8ZAAA
+Wjv7v/0JW0SsHdI2VbWR+AAA
+8p8OEDcPcEqcPclkWC6twgAA
+5CQCgkQMiEa8EdVYKZGhowAA
+OtUn1tUnHUiiI6GLtYamBwAA
+/HUsBl+/S0CY4MtM5ABl2AAA
+Wd9H4IjL3USBGC0pH5hlUQAA
+YB6eaJtPCk2AGSgtffbdcAAA
+jQfI7z+Tv0umyvJ5ac6g1wAA
+JunGTRMAMEuAy1IqCOHccQAA
+K5Yx1sRrakeMEdhgvbU6BwAA
+QcAX8dFF2kyeKSVNYAQyGAAA
+QJhSCFnA0Ei2roB4lPLNhgAA
+0c9hLinu20uJNJm9U5CPyAAA
+10
+eiRtiRQwQU+VjHaN3rVhqAAA
+3ll2HhKX0kq8L2WoIISIqQAA
+qxo3boab2UKQT7Y0WGaO5wAA
+0gQj+YWF1kWUYfNhSvBRRgAA
+z1QNUA0z7UCZuLoDVY19rgAA
+IGSCEi76fECYOq9TAgfycAAA
+4hoSWcXUfke9LteCU5kIwwAA
+Dd01nPPtvUmZGMmaii+l8AAA
+JjTzmv8xZkyzSk5L/26mAAAA
+yXKHIjR8gkG5PTWkHsolYwAA
+
+
+Server Application
+5Xea+2Ha3kuZqH6rjIWf7AAA
+4
+YLHSMhGZSUK678eHArh3vAAA
+Of+EE4bQSk2dMrxBCuhmVwAA
+Vp06qjJ4m0i7DMRtTHJxNAAA
+fB7Q+DVBWE6rQM2gSNHKZAAA
+10
+GKqHK7uaTEeoZL1eXATu1QAA
+u/hYdn97j0e2w7qGm8lrPQAA
+kAJ6OYlT5kSWgt6Y8JB6KQAA
+RakUMYixx0eokaMaO8399AAA
+PT5rHARWmkS/g4IqVuPQbwAA
+gAVKOFcG5Uy+DJqh3e+rmQAA
+X5T4GSZ++0CHKCiad7lJUQAA
+02A3b3ioX0qlnvJtx6cIagAA
+MwEkpjxhMEmwSm9iWOGPMAAA
+F0p8CwFIxE6A+uFqsVdypwAA
+16
+waLdiSPvU0aqFpb250AZIwAA
+KjbQrlapxE2xRsUF2q8bDwAA
+q1qjKctdRE2v7HKXDklokQAA
+xbH85UKQlESFWJculb723gAA
+0exvc+RmxE++FLqQZ+YzawAA
+1hZ1Ivgi7UWnVEcQGQ9xdwAA
+qB+snL4IlEeGy2CTYMy/zAAA
+yyMM+2gkDEehAYP+raNxDQAA
+pPAAy86kd0iPjz3jRkE7GQAA
+zinYWd6ATEavjMBO+/H28wAA
+R2zIGFrlCEKaKzyvT7GYSQAA
+yEyx+76l70agEtERTC8A3gAA
+gEtk/cB3KEOiz2OMHIXtXQAA
+0hr2j6uSRkiDwGZUmx4uigAA
+QHwYoSSQtESypYaOH9iHjwAA
+FjbPFNpo106+r3RZ67ZnFwAA
+
+
+Server Component
+5Xea+2Ha3kuZqH6rjIWf7AAA
+4
+UgB5yC40g0yVEXFrzc9dqwAA
+dpffqY3360GzYdj7w2urkQAA
+Yog9jWlodUOwZiyEZFHuOQAA
+SGclKA1c/EeIKpRjr6adVAAA
+20
+waLdiSPvU0aqFpb250AZIwAA
+KjbQrlapxE2xRsUF2q8bDwAA
+q1qjKctdRE2v7HKXDklokQAA
+xbH85UKQlESFWJculb723gAA
+0exvc+RmxE++FLqQZ+YzawAA
+9Ol7xVDHfk+aOrYlU/XxDAAA
+1hZ1Ivgi7UWnVEcQGQ9xdwAA
+qB+snL4IlEeGy2CTYMy/zAAA
+Mj5U0wte/Ui52pM+Nh0WIgAA
+yyMM+2gkDEehAYP+raNxDQAA
+pPAAy86kd0iPjz3jRkE7GQAA
+zinYWd6ATEavjMBO+/H28wAA
+R2zIGFrlCEKaKzyvT7GYSQAA
+yEyx+76l70agEtERTC8A3gAA
+gEtk/cB3KEOiz2OMHIXtXQAA
+jfHJN6N3Q0mtnffCkx/XNAAA
+0hr2j6uSRkiDwGZUmx4uigAA
+QHwYoSSQtESypYaOH9iHjwAA
+0tMhx9FGokewzBdSGlA2ygAA
+FjbPFNpo106+r3RZ67ZnFwAA
+16
+GKqHK7uaTEeoZL1eXATu1QAA
+u/hYdn97j0e2w7qGm8lrPQAA
+hhg1h6MW70ylqCivIbWRXQAA
+/VRCJTy/oEur+ilCjeW2XgAA
+kAJ6OYlT5kSWgt6Y8JB6KQAA
+aXyZYOKcl0mBOwUqTqobmgAA
+RakUMYixx0eokaMaO8399AAA
+PT5rHARWmkS/g4IqVuPQbwAA
+gAVKOFcG5Uy+DJqh3e+rmQAA
+X5T4GSZ++0CHKCiad7lJUQAA
+1zvjlDg+4kCIQVSgL1zDcQAA
+wb7PgcS43U24SfLIi+31YQAA
+02A3b3ioX0qlnvJtx6cIagAA
+fEaX7prSFk6ZtUpnQCErOgAA
+MwEkpjxhMEmwSm9iWOGPMAAA
+F0p8CwFIxE6A+uFqsVdypwAA
+
+
+Client Application
+5Xea+2Ha3kuZqH6rjIWf7AAA
+4
+vCbJ1MWtek+az88C5aAL/gAA
+DKt3hU+zzUSpte7zoVHRzQAA
+zX8HV7Zftk28YPxHFmPixwAA
+04EYjXxjXESV7JyM0501yQAA
+6
+hhg1h6MW70ylqCivIbWRXQAA
+/VRCJTy/oEur+ilCjeW2XgAA
+aXyZYOKcl0mBOwUqTqobmgAA
+1zvjlDg+4kCIQVSgL1zDcQAA
+wb7PgcS43U24SfLIi+31YQAA
+fEaX7prSFk6ZtUpnQCErOgAA
+4
+9Ol7xVDHfk+aOrYlU/XxDAAA
+Mj5U0wte/Ui52pM+Nh0WIgAA
+jfHJN6N3Q0mtnffCkx/XNAAA
+0tMhx9FGokewzBdSGlA2ygAA
+
+
+Client Application
+5Xea+2Ha3kuZqH6rjIWf7AAA
+4
+UR8Vq2YtJk+4TYHcsBQoVQAA
+TbZv4vmixEauqpXIdyVNdgAA
+7zOz+Vns2kiiJ6vTPfJz/gAA
+yRcxWVCafEypCOzoqyZd9wAA
+10
+twaVQAbQn0SQxSav8hKGygAA
+ge2n5wRT306cnabk/HU2IgAA
+UiC+SdjuLkO6xrRIGFh2PAAA
+3BL7NFdLw0yo7RLubFSFzQAA
+pvIA8HpUU0eAf/CRON6ISQAA
+czN9bfI5G0KZ0agADz5LWAAA
+tmMPWz926keOYRK7CfB+ogAA
+i0okbOG+V0Wy21SEhlS3YQAA
+wjXK0j1It0OH0yUKkwb+BQAA
+OVurhNbPjE23+XwihCOnFQAA
+15
+RjOELc899E24BqUs1P8w2gAA
+FYipeeoMCUm19jcfhm3biAAA
+/bHgYzIBqECI2mdaGkoJMwAA
+oF/LEA7hx0qNduBcIVAMJQAA
+mErn0SwL4kWgwh37KhxrOwAA
+9lUxZSoXvkOOzpV4doFFPwAA
+yCsrGZ0ZX0eRnh7MrDJ8fwAA
+5yig2AFjOEajXi3fbrN7VwAA
+qdFUCd8ppUytkbv1kQ22KAAA
+cMDdajmI+EqZX7e2IJLW2AAA
+oz9VGOLnCUChZ5znyjLuEAAA
+hJJRrn7qSU+4yKjjptTojAAA
+N9pXJsZRlUmaybf6IJQ4mgAA
+XhOJgHKLNE+7Q4KPQbSulAAA
+Fz8nASWwCE6JmU5bZSWDjAAA
+
+
+Client Component
+5Xea+2Ha3kuZqH6rjIWf7AAA
+4
+fXhPXMHvXEemH7KkbHH2pgAA
++wCnW3yutEeNI63TdKQpkAAA
+Aw2Cil4vrUSblzvM5Ifx+gAA
+LtIPm701qEiKOEIQzsRsigAA
+21
+RjOELc899E24BqUs1P8w2gAA
+FYipeeoMCUm19jcfhm3biAAA
+/bHgYzIBqECI2mdaGkoJMwAA
+NUW8ZK/ERk2X3umbnhegzwAA
+oF/LEA7hx0qNduBcIVAMJQAA
+1vb2mQKxZ0+r/MA4zbJgbwAA
+mErn0SwL4kWgwh37KhxrOwAA
+9lUxZSoXvkOOzpV4doFFPwAA
+bylpP6WP+0+xDkDWbCho6AAA
+yCsrGZ0ZX0eRnh7MrDJ8fwAA
+5yig2AFjOEajXi3fbrN7VwAA
+qdFUCd8ppUytkbv1kQ22KAAA
+cMDdajmI+EqZX7e2IJLW2AAA
+oz9VGOLnCUChZ5znyjLuEAAA
+qOZhBu7iv0295TZDqlzApwAA
+hJJRrn7qSU+4yKjjptTojAAA
+Eg1/ELcHik2Up68uZHh8yQAA
+N9pXJsZRlUmaybf6IJQ4mgAA
+XhOJgHKLNE+7Q4KPQbSulAAA
+4nCUuj5zWkyD5QM1T7mWoAAA
+Fz8nASWwCE6JmU5bZSWDjAAA
+14
+twaVQAbQn0SQxSav8hKGygAA
+ge2n5wRT306cnabk/HU2IgAA
+UiC+SdjuLkO6xrRIGFh2PAAA
+3BL7NFdLw0yo7RLubFSFzQAA
+PSWE8W0TEU+2XvyhDfkDzgAA
+79YTw4PBt0qttSuIpUL7HQAA
+pvIA8HpUU0eAf/CRON6ISQAA
+czN9bfI5G0KZ0agADz5LWAAA
+tmMPWz926keOYRK7CfB+ogAA
+i0okbOG+V0Wy21SEhlS3YQAA
+wjXK0j1It0OH0yUKkwb+BQAA
+Z5SRL0VyAk2BAVlOyee2QwAA
+M2ziWA1eJUGke3Uslc7kMwAA
+OVurhNbPjE23+XwihCOnFQAA
+
+
+Server Application
+5Xea+2Ha3kuZqH6rjIWf7AAA
+4
+N3zJh2w4fk2XjEXUNCt9gwAA
+W7BRFi1ZrESz7J7YQP9lKAAA
++NvHRq1YeEGH+78N+bmeBgAA
+mw7/rLkCOEGcLiEDsPSp6QAA
+4
+PSWE8W0TEU+2XvyhDfkDzgAA
+79YTw4PBt0qttSuIpUL7HQAA
+Z5SRL0VyAk2BAVlOyee2QwAA
+M2ziWA1eJUGke3Uslc7kMwAA
+6
+NUW8ZK/ERk2X3umbnhegzwAA
+1vb2mQKxZ0+r/MA4zbJgbwAA
+bylpP6WP+0+xDkDWbCho6AAA
+qOZhBu7iv0295TZDqlzApwAA
+Eg1/ELcHik2Up68uZHh8yQAA
+4nCUuj5zWkyD5QM1T7mWoAAA
+
+
+
+
+
+
diff --git a/Doc/HP-Socket SSL Class Diagram - v3.5.jpg b/Doc/HP-Socket SSL Class Diagram - v3.5.jpg
new file mode 100644
index 000000000..8c82aae93
Binary files /dev/null and b/Doc/HP-Socket SSL Class Diagram - v3.5.jpg differ
diff --git "a/Doc/HP-Socket TCP & UDP \351\200\232\344\277\241\346\241\206\346\236\266\345\274\200\345\217\221\346\214\207\345\215\227 (v3.5-20160601).pdf" "b/Doc/HP-Socket TCP & UDP \351\200\232\344\277\241\346\241\206\346\236\266\345\274\200\345\217\221\346\214\207\345\215\227 (v3.5-20160601).pdf"
deleted file mode 100644
index 349bda711..000000000
Binary files "a/Doc/HP-Socket TCP & UDP \351\200\232\344\277\241\346\241\206\346\236\266\345\274\200\345\217\221\346\214\207\345\215\227 (v3.5-20160601).pdf" and /dev/null differ
diff --git a/HP-Socket/Bin/HPSocket/x64/HPSocket-SSL.dll b/HP-Socket/Bin/HPSocket/x64/HPSocket-SSL.dll
index bb4b2c054..7e710099d 100644
Binary files a/HP-Socket/Bin/HPSocket/x64/HPSocket-SSL.dll and b/HP-Socket/Bin/HPSocket/x64/HPSocket-SSL.dll differ
diff --git a/HP-Socket/Bin/HPSocket/x64/HPSocket-SSL.lib b/HP-Socket/Bin/HPSocket/x64/HPSocket-SSL.lib
index 33e03d316..983e4acf4 100644
Binary files a/HP-Socket/Bin/HPSocket/x64/HPSocket-SSL.lib and b/HP-Socket/Bin/HPSocket/x64/HPSocket-SSL.lib differ
diff --git a/HP-Socket/Bin/HPSocket/x64/HPSocket-SSL_D.dll b/HP-Socket/Bin/HPSocket/x64/HPSocket-SSL_D.dll
index 26f8705c3..ff86d834d 100644
Binary files a/HP-Socket/Bin/HPSocket/x64/HPSocket-SSL_D.dll and b/HP-Socket/Bin/HPSocket/x64/HPSocket-SSL_D.dll differ
diff --git a/HP-Socket/Bin/HPSocket/x64/HPSocket-SSL_D.lib b/HP-Socket/Bin/HPSocket/x64/HPSocket-SSL_D.lib
index b3e78be9e..575a68248 100644
Binary files a/HP-Socket/Bin/HPSocket/x64/HPSocket-SSL_D.lib and b/HP-Socket/Bin/HPSocket/x64/HPSocket-SSL_D.lib differ
diff --git a/HP-Socket/Bin/HPSocket/x64/HPSocket-SSL_U.dll b/HP-Socket/Bin/HPSocket/x64/HPSocket-SSL_U.dll
index a6327f45c..4bd4a7d1c 100644
Binary files a/HP-Socket/Bin/HPSocket/x64/HPSocket-SSL_U.dll and b/HP-Socket/Bin/HPSocket/x64/HPSocket-SSL_U.dll differ
diff --git a/HP-Socket/Bin/HPSocket/x64/HPSocket-SSL_U.lib b/HP-Socket/Bin/HPSocket/x64/HPSocket-SSL_U.lib
index 2e22bf63f..f2ebe55a1 100644
Binary files a/HP-Socket/Bin/HPSocket/x64/HPSocket-SSL_U.lib and b/HP-Socket/Bin/HPSocket/x64/HPSocket-SSL_U.lib differ
diff --git a/HP-Socket/Bin/HPSocket/x64/HPSocket-SSL_UD.dll b/HP-Socket/Bin/HPSocket/x64/HPSocket-SSL_UD.dll
index c7e535e60..47f7dffc6 100644
Binary files a/HP-Socket/Bin/HPSocket/x64/HPSocket-SSL_UD.dll and b/HP-Socket/Bin/HPSocket/x64/HPSocket-SSL_UD.dll differ
diff --git a/HP-Socket/Bin/HPSocket/x64/HPSocket-SSL_UD.lib b/HP-Socket/Bin/HPSocket/x64/HPSocket-SSL_UD.lib
index 892c07d95..366b1b403 100644
Binary files a/HP-Socket/Bin/HPSocket/x64/HPSocket-SSL_UD.lib and b/HP-Socket/Bin/HPSocket/x64/HPSocket-SSL_UD.lib differ
diff --git a/HP-Socket/Bin/HPSocket/x64/HPSocket.dll b/HP-Socket/Bin/HPSocket/x64/HPSocket.dll
index b474f109a..ab621ab41 100644
Binary files a/HP-Socket/Bin/HPSocket/x64/HPSocket.dll and b/HP-Socket/Bin/HPSocket/x64/HPSocket.dll differ
diff --git a/HP-Socket/Bin/HPSocket/x64/HPSocket.lib b/HP-Socket/Bin/HPSocket/x64/HPSocket.lib
index 82ed9c206..525977e12 100644
Binary files a/HP-Socket/Bin/HPSocket/x64/HPSocket.lib and b/HP-Socket/Bin/HPSocket/x64/HPSocket.lib differ
diff --git a/HP-Socket/Bin/HPSocket/x64/HPSocket_D.dll b/HP-Socket/Bin/HPSocket/x64/HPSocket_D.dll
index 0508869d6..715f0a63e 100644
Binary files a/HP-Socket/Bin/HPSocket/x64/HPSocket_D.dll and b/HP-Socket/Bin/HPSocket/x64/HPSocket_D.dll differ
diff --git a/HP-Socket/Bin/HPSocket/x64/HPSocket_D.lib b/HP-Socket/Bin/HPSocket/x64/HPSocket_D.lib
index 46ae5b7d6..599c8f398 100644
Binary files a/HP-Socket/Bin/HPSocket/x64/HPSocket_D.lib and b/HP-Socket/Bin/HPSocket/x64/HPSocket_D.lib differ
diff --git a/HP-Socket/Bin/HPSocket/x64/HPSocket_U.dll b/HP-Socket/Bin/HPSocket/x64/HPSocket_U.dll
index 9bad2f555..13793a1ff 100644
Binary files a/HP-Socket/Bin/HPSocket/x64/HPSocket_U.dll and b/HP-Socket/Bin/HPSocket/x64/HPSocket_U.dll differ
diff --git a/HP-Socket/Bin/HPSocket/x64/HPSocket_U.lib b/HP-Socket/Bin/HPSocket/x64/HPSocket_U.lib
index 1db12634b..d5a6bf4c0 100644
Binary files a/HP-Socket/Bin/HPSocket/x64/HPSocket_U.lib and b/HP-Socket/Bin/HPSocket/x64/HPSocket_U.lib differ
diff --git a/HP-Socket/Bin/HPSocket/x64/HPSocket_UD.dll b/HP-Socket/Bin/HPSocket/x64/HPSocket_UD.dll
index 0e37976db..bfe100382 100644
Binary files a/HP-Socket/Bin/HPSocket/x64/HPSocket_UD.dll and b/HP-Socket/Bin/HPSocket/x64/HPSocket_UD.dll differ
diff --git a/HP-Socket/Bin/HPSocket/x64/HPSocket_UD.lib b/HP-Socket/Bin/HPSocket/x64/HPSocket_UD.lib
index cb4c0cac6..f170c702f 100644
Binary files a/HP-Socket/Bin/HPSocket/x64/HPSocket_UD.lib and b/HP-Socket/Bin/HPSocket/x64/HPSocket_UD.lib differ
diff --git a/HP-Socket/Bin/HPSocket/x86/HPSocket-SSL.dll b/HP-Socket/Bin/HPSocket/x86/HPSocket-SSL.dll
index ca937c578..a7f33f293 100644
Binary files a/HP-Socket/Bin/HPSocket/x86/HPSocket-SSL.dll and b/HP-Socket/Bin/HPSocket/x86/HPSocket-SSL.dll differ
diff --git a/HP-Socket/Bin/HPSocket/x86/HPSocket-SSL.lib b/HP-Socket/Bin/HPSocket/x86/HPSocket-SSL.lib
index 21497b11c..2bcbace5a 100644
Binary files a/HP-Socket/Bin/HPSocket/x86/HPSocket-SSL.lib and b/HP-Socket/Bin/HPSocket/x86/HPSocket-SSL.lib differ
diff --git a/HP-Socket/Bin/HPSocket/x86/HPSocket-SSL_D.dll b/HP-Socket/Bin/HPSocket/x86/HPSocket-SSL_D.dll
index e95ef4cc3..69b6f03a0 100644
Binary files a/HP-Socket/Bin/HPSocket/x86/HPSocket-SSL_D.dll and b/HP-Socket/Bin/HPSocket/x86/HPSocket-SSL_D.dll differ
diff --git a/HP-Socket/Bin/HPSocket/x86/HPSocket-SSL_D.lib b/HP-Socket/Bin/HPSocket/x86/HPSocket-SSL_D.lib
index fe5ecdc65..63ca5ab59 100644
Binary files a/HP-Socket/Bin/HPSocket/x86/HPSocket-SSL_D.lib and b/HP-Socket/Bin/HPSocket/x86/HPSocket-SSL_D.lib differ
diff --git a/HP-Socket/Bin/HPSocket/x86/HPSocket-SSL_U.dll b/HP-Socket/Bin/HPSocket/x86/HPSocket-SSL_U.dll
index afd8c388c..8c4a0f04f 100644
Binary files a/HP-Socket/Bin/HPSocket/x86/HPSocket-SSL_U.dll and b/HP-Socket/Bin/HPSocket/x86/HPSocket-SSL_U.dll differ
diff --git a/HP-Socket/Bin/HPSocket/x86/HPSocket-SSL_U.lib b/HP-Socket/Bin/HPSocket/x86/HPSocket-SSL_U.lib
index 8006f9ae9..3076e7588 100644
Binary files a/HP-Socket/Bin/HPSocket/x86/HPSocket-SSL_U.lib and b/HP-Socket/Bin/HPSocket/x86/HPSocket-SSL_U.lib differ
diff --git a/HP-Socket/Bin/HPSocket/x86/HPSocket-SSL_UD.dll b/HP-Socket/Bin/HPSocket/x86/HPSocket-SSL_UD.dll
index f4646a349..b6883c19d 100644
Binary files a/HP-Socket/Bin/HPSocket/x86/HPSocket-SSL_UD.dll and b/HP-Socket/Bin/HPSocket/x86/HPSocket-SSL_UD.dll differ
diff --git a/HP-Socket/Bin/HPSocket/x86/HPSocket-SSL_UD.lib b/HP-Socket/Bin/HPSocket/x86/HPSocket-SSL_UD.lib
index 69c5f9599..d35ddcc8f 100644
Binary files a/HP-Socket/Bin/HPSocket/x86/HPSocket-SSL_UD.lib and b/HP-Socket/Bin/HPSocket/x86/HPSocket-SSL_UD.lib differ
diff --git a/HP-Socket/Bin/HPSocket/x86/HPSocket.dll b/HP-Socket/Bin/HPSocket/x86/HPSocket.dll
index 241d6787e..abf645a5a 100644
Binary files a/HP-Socket/Bin/HPSocket/x86/HPSocket.dll and b/HP-Socket/Bin/HPSocket/x86/HPSocket.dll differ
diff --git a/HP-Socket/Bin/HPSocket/x86/HPSocket.lib b/HP-Socket/Bin/HPSocket/x86/HPSocket.lib
index 371e7b905..355a3aed1 100644
Binary files a/HP-Socket/Bin/HPSocket/x86/HPSocket.lib and b/HP-Socket/Bin/HPSocket/x86/HPSocket.lib differ
diff --git a/HP-Socket/Bin/HPSocket/x86/HPSocket_D.dll b/HP-Socket/Bin/HPSocket/x86/HPSocket_D.dll
index 9a7f4b3ed..b9b552823 100644
Binary files a/HP-Socket/Bin/HPSocket/x86/HPSocket_D.dll and b/HP-Socket/Bin/HPSocket/x86/HPSocket_D.dll differ
diff --git a/HP-Socket/Bin/HPSocket/x86/HPSocket_D.lib b/HP-Socket/Bin/HPSocket/x86/HPSocket_D.lib
index d81ca6af3..4c4c2b288 100644
Binary files a/HP-Socket/Bin/HPSocket/x86/HPSocket_D.lib and b/HP-Socket/Bin/HPSocket/x86/HPSocket_D.lib differ
diff --git a/HP-Socket/Bin/HPSocket/x86/HPSocket_U.dll b/HP-Socket/Bin/HPSocket/x86/HPSocket_U.dll
index cd641fbea..bc26850df 100644
Binary files a/HP-Socket/Bin/HPSocket/x86/HPSocket_U.dll and b/HP-Socket/Bin/HPSocket/x86/HPSocket_U.dll differ
diff --git a/HP-Socket/Bin/HPSocket/x86/HPSocket_U.lib b/HP-Socket/Bin/HPSocket/x86/HPSocket_U.lib
index bb7443dad..d2e234958 100644
Binary files a/HP-Socket/Bin/HPSocket/x86/HPSocket_U.lib and b/HP-Socket/Bin/HPSocket/x86/HPSocket_U.lib differ
diff --git a/HP-Socket/Bin/HPSocket/x86/HPSocket_UD.dll b/HP-Socket/Bin/HPSocket/x86/HPSocket_UD.dll
index 923f7f101..ca0b38af2 100644
Binary files a/HP-Socket/Bin/HPSocket/x86/HPSocket_UD.dll and b/HP-Socket/Bin/HPSocket/x86/HPSocket_UD.dll differ
diff --git a/HP-Socket/Bin/HPSocket/x86/HPSocket_UD.lib b/HP-Socket/Bin/HPSocket/x86/HPSocket_UD.lib
index 187fd1e50..050514de5 100644
Binary files a/HP-Socket/Bin/HPSocket/x86/HPSocket_UD.lib and b/HP-Socket/Bin/HPSocket/x86/HPSocket_UD.lib differ
diff --git a/HP-Socket/Bin/HPSocket4C/x64/HPSocket4C-SSL.dll b/HP-Socket/Bin/HPSocket4C/x64/HPSocket4C-SSL.dll
index fd5933e5e..046cf8a30 100644
Binary files a/HP-Socket/Bin/HPSocket4C/x64/HPSocket4C-SSL.dll and b/HP-Socket/Bin/HPSocket4C/x64/HPSocket4C-SSL.dll differ
diff --git a/HP-Socket/Bin/HPSocket4C/x64/HPSocket4C-SSL.lib b/HP-Socket/Bin/HPSocket4C/x64/HPSocket4C-SSL.lib
index 69ba9855f..3c48234aa 100644
Binary files a/HP-Socket/Bin/HPSocket4C/x64/HPSocket4C-SSL.lib and b/HP-Socket/Bin/HPSocket4C/x64/HPSocket4C-SSL.lib differ
diff --git a/HP-Socket/Bin/HPSocket4C/x64/HPSocket4C-SSL_D.dll b/HP-Socket/Bin/HPSocket4C/x64/HPSocket4C-SSL_D.dll
index dd06fa881..3859c5f23 100644
Binary files a/HP-Socket/Bin/HPSocket4C/x64/HPSocket4C-SSL_D.dll and b/HP-Socket/Bin/HPSocket4C/x64/HPSocket4C-SSL_D.dll differ
diff --git a/HP-Socket/Bin/HPSocket4C/x64/HPSocket4C-SSL_D.lib b/HP-Socket/Bin/HPSocket4C/x64/HPSocket4C-SSL_D.lib
index 82405d543..d2df092bf 100644
Binary files a/HP-Socket/Bin/HPSocket4C/x64/HPSocket4C-SSL_D.lib and b/HP-Socket/Bin/HPSocket4C/x64/HPSocket4C-SSL_D.lib differ
diff --git a/HP-Socket/Bin/HPSocket4C/x64/HPSocket4C-SSL_U.dll b/HP-Socket/Bin/HPSocket4C/x64/HPSocket4C-SSL_U.dll
index 46f827c4a..fa6c884a0 100644
Binary files a/HP-Socket/Bin/HPSocket4C/x64/HPSocket4C-SSL_U.dll and b/HP-Socket/Bin/HPSocket4C/x64/HPSocket4C-SSL_U.dll differ
diff --git a/HP-Socket/Bin/HPSocket4C/x64/HPSocket4C-SSL_U.lib b/HP-Socket/Bin/HPSocket4C/x64/HPSocket4C-SSL_U.lib
index 8f1c78772..66a5df627 100644
Binary files a/HP-Socket/Bin/HPSocket4C/x64/HPSocket4C-SSL_U.lib and b/HP-Socket/Bin/HPSocket4C/x64/HPSocket4C-SSL_U.lib differ
diff --git a/HP-Socket/Bin/HPSocket4C/x64/HPSocket4C-SSL_UD.dll b/HP-Socket/Bin/HPSocket4C/x64/HPSocket4C-SSL_UD.dll
index b201c3435..9feb115d8 100644
Binary files a/HP-Socket/Bin/HPSocket4C/x64/HPSocket4C-SSL_UD.dll and b/HP-Socket/Bin/HPSocket4C/x64/HPSocket4C-SSL_UD.dll differ
diff --git a/HP-Socket/Bin/HPSocket4C/x64/HPSocket4C-SSL_UD.lib b/HP-Socket/Bin/HPSocket4C/x64/HPSocket4C-SSL_UD.lib
index 3f3c3e6a3..19fcb5b31 100644
Binary files a/HP-Socket/Bin/HPSocket4C/x64/HPSocket4C-SSL_UD.lib and b/HP-Socket/Bin/HPSocket4C/x64/HPSocket4C-SSL_UD.lib differ
diff --git a/HP-Socket/Bin/HPSocket4C/x64/HPSocket4C.dll b/HP-Socket/Bin/HPSocket4C/x64/HPSocket4C.dll
index 314a52d39..ac86402d8 100644
Binary files a/HP-Socket/Bin/HPSocket4C/x64/HPSocket4C.dll and b/HP-Socket/Bin/HPSocket4C/x64/HPSocket4C.dll differ
diff --git a/HP-Socket/Bin/HPSocket4C/x64/HPSocket4C.lib b/HP-Socket/Bin/HPSocket4C/x64/HPSocket4C.lib
index 18cd3b0a1..2e197fd7c 100644
Binary files a/HP-Socket/Bin/HPSocket4C/x64/HPSocket4C.lib and b/HP-Socket/Bin/HPSocket4C/x64/HPSocket4C.lib differ
diff --git a/HP-Socket/Bin/HPSocket4C/x64/HPSocket4C_D.dll b/HP-Socket/Bin/HPSocket4C/x64/HPSocket4C_D.dll
index b9cc962c6..d25d04403 100644
Binary files a/HP-Socket/Bin/HPSocket4C/x64/HPSocket4C_D.dll and b/HP-Socket/Bin/HPSocket4C/x64/HPSocket4C_D.dll differ
diff --git a/HP-Socket/Bin/HPSocket4C/x64/HPSocket4C_D.lib b/HP-Socket/Bin/HPSocket4C/x64/HPSocket4C_D.lib
index 40e33fe0a..a1da43ecf 100644
Binary files a/HP-Socket/Bin/HPSocket4C/x64/HPSocket4C_D.lib and b/HP-Socket/Bin/HPSocket4C/x64/HPSocket4C_D.lib differ
diff --git a/HP-Socket/Bin/HPSocket4C/x64/HPSocket4C_U.dll b/HP-Socket/Bin/HPSocket4C/x64/HPSocket4C_U.dll
index 1ec49e42d..44331014f 100644
Binary files a/HP-Socket/Bin/HPSocket4C/x64/HPSocket4C_U.dll and b/HP-Socket/Bin/HPSocket4C/x64/HPSocket4C_U.dll differ
diff --git a/HP-Socket/Bin/HPSocket4C/x64/HPSocket4C_U.lib b/HP-Socket/Bin/HPSocket4C/x64/HPSocket4C_U.lib
index bbba65711..88abcbdda 100644
Binary files a/HP-Socket/Bin/HPSocket4C/x64/HPSocket4C_U.lib and b/HP-Socket/Bin/HPSocket4C/x64/HPSocket4C_U.lib differ
diff --git a/HP-Socket/Bin/HPSocket4C/x64/HPSocket4C_UD.dll b/HP-Socket/Bin/HPSocket4C/x64/HPSocket4C_UD.dll
index b13564a22..135ff4bed 100644
Binary files a/HP-Socket/Bin/HPSocket4C/x64/HPSocket4C_UD.dll and b/HP-Socket/Bin/HPSocket4C/x64/HPSocket4C_UD.dll differ
diff --git a/HP-Socket/Bin/HPSocket4C/x64/HPSocket4C_UD.lib b/HP-Socket/Bin/HPSocket4C/x64/HPSocket4C_UD.lib
index 183a01672..0f29bde4b 100644
Binary files a/HP-Socket/Bin/HPSocket4C/x64/HPSocket4C_UD.lib and b/HP-Socket/Bin/HPSocket4C/x64/HPSocket4C_UD.lib differ
diff --git a/HP-Socket/Bin/HPSocket4C/x86/HPSocket4C-SSL.dll b/HP-Socket/Bin/HPSocket4C/x86/HPSocket4C-SSL.dll
index b2ae5ee16..75e525a4c 100644
Binary files a/HP-Socket/Bin/HPSocket4C/x86/HPSocket4C-SSL.dll and b/HP-Socket/Bin/HPSocket4C/x86/HPSocket4C-SSL.dll differ
diff --git a/HP-Socket/Bin/HPSocket4C/x86/HPSocket4C-SSL.lib b/HP-Socket/Bin/HPSocket4C/x86/HPSocket4C-SSL.lib
index 42c351c12..08afa0ad4 100644
Binary files a/HP-Socket/Bin/HPSocket4C/x86/HPSocket4C-SSL.lib and b/HP-Socket/Bin/HPSocket4C/x86/HPSocket4C-SSL.lib differ
diff --git a/HP-Socket/Bin/HPSocket4C/x86/HPSocket4C-SSL_D.dll b/HP-Socket/Bin/HPSocket4C/x86/HPSocket4C-SSL_D.dll
index 6949c5bdc..80349e935 100644
Binary files a/HP-Socket/Bin/HPSocket4C/x86/HPSocket4C-SSL_D.dll and b/HP-Socket/Bin/HPSocket4C/x86/HPSocket4C-SSL_D.dll differ
diff --git a/HP-Socket/Bin/HPSocket4C/x86/HPSocket4C-SSL_D.lib b/HP-Socket/Bin/HPSocket4C/x86/HPSocket4C-SSL_D.lib
index 95d8f30bc..d1823bc0a 100644
Binary files a/HP-Socket/Bin/HPSocket4C/x86/HPSocket4C-SSL_D.lib and b/HP-Socket/Bin/HPSocket4C/x86/HPSocket4C-SSL_D.lib differ
diff --git a/HP-Socket/Bin/HPSocket4C/x86/HPSocket4C-SSL_U.dll b/HP-Socket/Bin/HPSocket4C/x86/HPSocket4C-SSL_U.dll
index a67c799aa..d2e1b187e 100644
Binary files a/HP-Socket/Bin/HPSocket4C/x86/HPSocket4C-SSL_U.dll and b/HP-Socket/Bin/HPSocket4C/x86/HPSocket4C-SSL_U.dll differ
diff --git a/HP-Socket/Bin/HPSocket4C/x86/HPSocket4C-SSL_U.lib b/HP-Socket/Bin/HPSocket4C/x86/HPSocket4C-SSL_U.lib
index c97b191ec..ce3317971 100644
Binary files a/HP-Socket/Bin/HPSocket4C/x86/HPSocket4C-SSL_U.lib and b/HP-Socket/Bin/HPSocket4C/x86/HPSocket4C-SSL_U.lib differ
diff --git a/HP-Socket/Bin/HPSocket4C/x86/HPSocket4C-SSL_UD.dll b/HP-Socket/Bin/HPSocket4C/x86/HPSocket4C-SSL_UD.dll
index 32cf2550a..90d0af161 100644
Binary files a/HP-Socket/Bin/HPSocket4C/x86/HPSocket4C-SSL_UD.dll and b/HP-Socket/Bin/HPSocket4C/x86/HPSocket4C-SSL_UD.dll differ
diff --git a/HP-Socket/Bin/HPSocket4C/x86/HPSocket4C-SSL_UD.lib b/HP-Socket/Bin/HPSocket4C/x86/HPSocket4C-SSL_UD.lib
index 6b8c845de..fadbb38b2 100644
Binary files a/HP-Socket/Bin/HPSocket4C/x86/HPSocket4C-SSL_UD.lib and b/HP-Socket/Bin/HPSocket4C/x86/HPSocket4C-SSL_UD.lib differ
diff --git a/HP-Socket/Bin/HPSocket4C/x86/HPSocket4C.dll b/HP-Socket/Bin/HPSocket4C/x86/HPSocket4C.dll
index 23949c6af..e3ee99f44 100644
Binary files a/HP-Socket/Bin/HPSocket4C/x86/HPSocket4C.dll and b/HP-Socket/Bin/HPSocket4C/x86/HPSocket4C.dll differ
diff --git a/HP-Socket/Bin/HPSocket4C/x86/HPSocket4C.lib b/HP-Socket/Bin/HPSocket4C/x86/HPSocket4C.lib
index 1f411cebb..231b9c542 100644
Binary files a/HP-Socket/Bin/HPSocket4C/x86/HPSocket4C.lib and b/HP-Socket/Bin/HPSocket4C/x86/HPSocket4C.lib differ
diff --git a/HP-Socket/Bin/HPSocket4C/x86/HPSocket4C_D.dll b/HP-Socket/Bin/HPSocket4C/x86/HPSocket4C_D.dll
index e047c61eb..f5630f2cc 100644
Binary files a/HP-Socket/Bin/HPSocket4C/x86/HPSocket4C_D.dll and b/HP-Socket/Bin/HPSocket4C/x86/HPSocket4C_D.dll differ
diff --git a/HP-Socket/Bin/HPSocket4C/x86/HPSocket4C_D.lib b/HP-Socket/Bin/HPSocket4C/x86/HPSocket4C_D.lib
index 0ef46d7cd..364779d03 100644
Binary files a/HP-Socket/Bin/HPSocket4C/x86/HPSocket4C_D.lib and b/HP-Socket/Bin/HPSocket4C/x86/HPSocket4C_D.lib differ
diff --git a/HP-Socket/Bin/HPSocket4C/x86/HPSocket4C_U.dll b/HP-Socket/Bin/HPSocket4C/x86/HPSocket4C_U.dll
index 4efcb500f..bd55ff24b 100644
Binary files a/HP-Socket/Bin/HPSocket4C/x86/HPSocket4C_U.dll and b/HP-Socket/Bin/HPSocket4C/x86/HPSocket4C_U.dll differ
diff --git a/HP-Socket/Bin/HPSocket4C/x86/HPSocket4C_U.lib b/HP-Socket/Bin/HPSocket4C/x86/HPSocket4C_U.lib
index 443d80daf..a089fb0e3 100644
Binary files a/HP-Socket/Bin/HPSocket4C/x86/HPSocket4C_U.lib and b/HP-Socket/Bin/HPSocket4C/x86/HPSocket4C_U.lib differ
diff --git a/HP-Socket/Bin/HPSocket4C/x86/HPSocket4C_UD.dll b/HP-Socket/Bin/HPSocket4C/x86/HPSocket4C_UD.dll
index 6ecc1b2ff..12444b20f 100644
Binary files a/HP-Socket/Bin/HPSocket4C/x86/HPSocket4C_UD.dll and b/HP-Socket/Bin/HPSocket4C/x86/HPSocket4C_UD.dll differ
diff --git a/HP-Socket/Bin/HPSocket4C/x86/HPSocket4C_UD.lib b/HP-Socket/Bin/HPSocket4C/x86/HPSocket4C_UD.lib
index 0a6c05f18..497653c8a 100644
Binary files a/HP-Socket/Bin/HPSocket4C/x86/HPSocket4C_UD.lib and b/HP-Socket/Bin/HPSocket4C/x86/HPSocket4C_UD.lib differ
diff --git a/HP-Socket/Bin/HPSocket4CS/x64/HPSocket4C-SSL_U.dll b/HP-Socket/Bin/HPSocket4CS/x64/HPSocket4C-SSL_U.dll
index 46f827c4a..fa6c884a0 100644
Binary files a/HP-Socket/Bin/HPSocket4CS/x64/HPSocket4C-SSL_U.dll and b/HP-Socket/Bin/HPSocket4CS/x64/HPSocket4C-SSL_U.dll differ
diff --git a/HP-Socket/Bin/HPSocket4CS/x64/HPSocket4C_U.dll b/HP-Socket/Bin/HPSocket4CS/x64/HPSocket4C_U.dll
index 1ec49e42d..44331014f 100644
Binary files a/HP-Socket/Bin/HPSocket4CS/x64/HPSocket4C_U.dll and b/HP-Socket/Bin/HPSocket4CS/x64/HPSocket4C_U.dll differ
diff --git a/HP-Socket/Bin/HPSocket4CS/x64/HPSocketCS.dll b/HP-Socket/Bin/HPSocket4CS/x64/HPSocketCS.dll
index b94794c48..76adccd6c 100644
Binary files a/HP-Socket/Bin/HPSocket4CS/x64/HPSocketCS.dll and b/HP-Socket/Bin/HPSocket4CS/x64/HPSocketCS.dll differ
diff --git a/HP-Socket/Bin/HPSocket4CS/x86/HPSocket4C-SSL_U.dll b/HP-Socket/Bin/HPSocket4CS/x86/HPSocket4C-SSL_U.dll
index a67c799aa..d2e1b187e 100644
Binary files a/HP-Socket/Bin/HPSocket4CS/x86/HPSocket4C-SSL_U.dll and b/HP-Socket/Bin/HPSocket4CS/x86/HPSocket4C-SSL_U.dll differ
diff --git a/HP-Socket/Bin/HPSocket4CS/x86/HPSocket4C_U.dll b/HP-Socket/Bin/HPSocket4CS/x86/HPSocket4C_U.dll
index 4efcb500f..bd55ff24b 100644
Binary files a/HP-Socket/Bin/HPSocket4CS/x86/HPSocket4C_U.dll and b/HP-Socket/Bin/HPSocket4CS/x86/HPSocket4C_U.dll differ
diff --git a/HP-Socket/Bin/HPSocket4CS/x86/HPSocketCS.dll b/HP-Socket/Bin/HPSocket4CS/x86/HPSocketCS.dll
index b94794c48..76adccd6c 100644
Binary files a/HP-Socket/Bin/HPSocket4CS/x86/HPSocketCS.dll and b/HP-Socket/Bin/HPSocket4CS/x86/HPSocketCS.dll differ
diff --git "a/HP-Socket/Bin/HPSocket4E/\346\224\257\346\214\201\345\272\223/HPSocket_4C.lib" "b/HP-Socket/Bin/HPSocket4E/\346\224\257\346\214\201\345\272\223/HPSocket_4C.lib"
new file mode 100644
index 000000000..63990c7bf
Binary files /dev/null and "b/HP-Socket/Bin/HPSocket4E/\346\224\257\346\214\201\345\272\223/HPSocket_4C.lib" differ
diff --git "a/HP-Socket/Bin/HPSocket4E/\346\224\257\346\214\201\345\272\223/Hp_Socket.fne" "b/HP-Socket/Bin/HPSocket4E/\346\224\257\346\214\201\345\272\223/Hp_Socket.fne"
new file mode 100644
index 000000000..375c5173b
Binary files /dev/null and "b/HP-Socket/Bin/HPSocket4E/\346\224\257\346\214\201\345\272\223/Hp_Socket.fne" differ
diff --git "a/HP-Socket/Bin/HPSocket4E/\346\224\257\346\214\201\345\272\223/Hp_Socket_static.lib" "b/HP-Socket/Bin/HPSocket4E/\346\224\257\346\214\201\345\272\223/Hp_Socket_static.lib"
new file mode 100644
index 000000000..e65cb603f
Binary files /dev/null and "b/HP-Socket/Bin/HPSocket4E/\346\224\257\346\214\201\345\272\223/Hp_Socket_static.lib" differ
diff --git "a/HP-Socket/Bin/HPSocket4E/\346\224\257\346\214\201\345\272\223/\344\275\277\347\224\250\346\226\271\346\263\225.txt" "b/HP-Socket/Bin/HPSocket4E/\346\224\257\346\214\201\345\272\223/\344\275\277\347\224\250\346\226\271\346\263\225.txt"
new file mode 100644
index 000000000..0e1a299f9
--- /dev/null
+++ "b/HP-Socket/Bin/HPSocket4E/\346\224\257\346\214\201\345\272\223/\344\275\277\347\224\250\346\226\271\346\263\225.txt"
@@ -0,0 +1,9 @@
+Hp_Socket.fne 鏀惧叆鏄撹瑷Lib鐩綍
+Hp_Socket_static.lib銆丠PSocket_4C.lib 鏀惧叆static_Lib鐩綍
+
+鏈敮鎸佸簱闇瑕佹槗璇█vs2010閾炬帴鍣(閾炬帴: http://pan.baidu.com/s/1i3ydamT 瀵嗙爜: baka)
+
+鐐瑰嚮閾炬帴鍔犲叆缇ゃ愭吔涔愬洯銆戯細http://jq.qq.com/?_wv=1027&k=2Ia8fHv
+
+3.5.1 鐩稿浜庡叾浠栫増鏈彉鍔
+1.鍒犻櫎AddressInfo 鏁版嵁绫诲瀷
diff --git "a/HP-Socket/Bin/HPSocket4E/\346\250\241\345\235\227/HPSocket.ec" "b/HP-Socket/Bin/HPSocket4E/\346\250\241\345\235\227/HPSocket.ec"
new file mode 100644
index 000000000..d839e3d18
Binary files /dev/null and "b/HP-Socket/Bin/HPSocket4E/\346\250\241\345\235\227/HPSocket.ec" differ
diff --git "a/HP-Socket/Bin/HPSocket4E/\346\250\241\345\235\227/HPSocket4C-SSL.dll" "b/HP-Socket/Bin/HPSocket4E/\346\250\241\345\235\227/HPSocket4C-SSL.dll"
new file mode 100644
index 000000000..75e525a4c
Binary files /dev/null and "b/HP-Socket/Bin/HPSocket4E/\346\250\241\345\235\227/HPSocket4C-SSL.dll" differ
diff --git "a/HP-Socket/Bin/HPSocket4E/\346\250\241\345\235\227/\346\250\241\345\235\227\344\275\277\347\224\250\350\257\264\346\230\216.txt" "b/HP-Socket/Bin/HPSocket4E/\346\250\241\345\235\227/\346\250\241\345\235\227\344\275\277\347\224\250\350\257\264\346\230\216.txt"
new file mode 100644
index 000000000..a874c3ede
--- /dev/null
+++ "b/HP-Socket/Bin/HPSocket4E/\346\250\241\345\235\227/\346\250\241\345\235\227\344\275\277\347\224\250\350\257\264\346\230\216.txt"
@@ -0,0 +1 @@
+必须先初始化模块!否则将出错!
\ No newline at end of file
diff --git a/HP-Socket/Demo/HttpProxy/HttpProxy.suo b/HP-Socket/Demo/HttpProxy/HttpProxy.suo
index 01140b471..183175751 100644
Binary files a/HP-Socket/Demo/HttpProxy/HttpProxy.suo and b/HP-Socket/Demo/HttpProxy/HttpProxy.suo differ
diff --git a/HP-Socket/Demo/HttpProxy/Server/Server.rc b/HP-Socket/Demo/HttpProxy/Server/Server.rc
index 3fa1fbb8d..c8c8a9555 100644
Binary files a/HP-Socket/Demo/HttpProxy/Server/Server.rc and b/HP-Socket/Demo/HttpProxy/Server/Server.rc differ
diff --git a/HP-Socket/Demo/Other Languages Demos/Authors.txt b/HP-Socket/Demo/Other Languages Demos/Authors.txt
new file mode 100644
index 000000000..1843a5611
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/Authors.txt
@@ -0,0 +1,7 @@
+* C# SDK 作者: int 2e
+* 易语言支持库 作者: Yecate
+* 易语言模块 作者: 卓越网维小邓
+
+1、C# Demo 作者: int 2e
+2、Delphi Demo 作者: 轻描●淡写~
+3、易语言 Demo 作者: Yecate、卓越网维小邓
\ No newline at end of file
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS.sln b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS.sln
new file mode 100644
index 000000000..075373806
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS.sln
@@ -0,0 +1,246 @@
+锘
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual Studio 2010
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HPSocketCS", "HPSocketCS\HPSocketCS.csproj", "{DFA935E2-CF37-4E26-B697-D7F3DEE19DD8}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TcpPullClient", "TcpPullClient\TcpPullClient.csproj", "{B9965E66-853A-47CC-B0C9-197B5A29ABFC}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TcpPullServer", "TcpPullServer\TcpPullServer.csproj", "{B6654857-4C82-4F92-AD7A-21FD3ED5BBFA}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TcpClient", "TcpClient\TcpClient.csproj", "{B6E43918-236A-4EA7-84C8-ED4A98049907}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TcpServer", "TcpServer\TcpServer.csproj", "{9A3339BC-37F0-4D03-9ACE-51CC4CF75277}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TcpServer-PFM", "TcpServer-PFM\TcpServer-PFM.csproj", "{10426A79-A3B3-4CD2-BD84-02AAEE27FB75}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TcpClient-PFM", "TcpClient-PFM\TcpClient-PFM.csproj", "{9A2CEAF1-95CF-4E7D-91D5-42DB1F3FD29A}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TcpPackServer", "TcpPackServer\TcpPackServer.csproj", "{2C7A6E29-980B-4A4C-9645-E2CA26FCEAAC}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TcpPackClient", "TcpPackClient\TcpPackClient.csproj", "{36D05914-1A8A-484C-9FB7-8BE4582A665A}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SSLClient", "SSLClient\SSLClient.csproj", "{90562CEB-1B6C-43AF-80A2-386A4323A4EF}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SSLPackClient", "SSLPackClient\SSLPackClient.csproj", "{54B8F93E-C7A6-463E-8DCD-2BDD94EF9D90}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SSLPackServer", "SSLPackServer\SSLPackServer.csproj", "{D99C1889-D52B-4640-B3F5-594F5A728A56}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SSLServer", "SSLServer\SSLServer.csproj", "{2125B641-AB4D-4C29-A2A7-DD37839CCACB}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TcpPortForwarding", "TcpPortForwarding\TcpPortForwarding.csproj", "{53C19B7D-9590-49FA-81BC-59ECC820F349}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Debug|Mixed Platforms = Debug|Mixed Platforms
+ Debug|x64 = Debug|x64
+ Debug|x86 = Debug|x86
+ Release|Any CPU = Release|Any CPU
+ Release|Mixed Platforms = Release|Mixed Platforms
+ Release|x64 = Release|x64
+ Release|x86 = Release|x86
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {DFA935E2-CF37-4E26-B697-D7F3DEE19DD8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {DFA935E2-CF37-4E26-B697-D7F3DEE19DD8}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {DFA935E2-CF37-4E26-B697-D7F3DEE19DD8}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {DFA935E2-CF37-4E26-B697-D7F3DEE19DD8}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {DFA935E2-CF37-4E26-B697-D7F3DEE19DD8}.Debug|x64.ActiveCfg = Debug|x64
+ {DFA935E2-CF37-4E26-B697-D7F3DEE19DD8}.Debug|x64.Build.0 = Debug|x64
+ {DFA935E2-CF37-4E26-B697-D7F3DEE19DD8}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {DFA935E2-CF37-4E26-B697-D7F3DEE19DD8}.Debug|x86.Build.0 = Debug|Any CPU
+ {DFA935E2-CF37-4E26-B697-D7F3DEE19DD8}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {DFA935E2-CF37-4E26-B697-D7F3DEE19DD8}.Release|Any CPU.Build.0 = Release|Any CPU
+ {DFA935E2-CF37-4E26-B697-D7F3DEE19DD8}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {DFA935E2-CF37-4E26-B697-D7F3DEE19DD8}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {DFA935E2-CF37-4E26-B697-D7F3DEE19DD8}.Release|x64.ActiveCfg = Release|x64
+ {DFA935E2-CF37-4E26-B697-D7F3DEE19DD8}.Release|x64.Build.0 = Release|x64
+ {DFA935E2-CF37-4E26-B697-D7F3DEE19DD8}.Release|x86.ActiveCfg = Release|Any CPU
+ {DFA935E2-CF37-4E26-B697-D7F3DEE19DD8}.Release|x86.Build.0 = Release|Any CPU
+ {B9965E66-853A-47CC-B0C9-197B5A29ABFC}.Debug|Any CPU.ActiveCfg = Debug|x86
+ {B9965E66-853A-47CC-B0C9-197B5A29ABFC}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
+ {B9965E66-853A-47CC-B0C9-197B5A29ABFC}.Debug|Mixed Platforms.Build.0 = Debug|x86
+ {B9965E66-853A-47CC-B0C9-197B5A29ABFC}.Debug|x64.ActiveCfg = Debug|x64
+ {B9965E66-853A-47CC-B0C9-197B5A29ABFC}.Debug|x64.Build.0 = Debug|x64
+ {B9965E66-853A-47CC-B0C9-197B5A29ABFC}.Debug|x86.ActiveCfg = Debug|x86
+ {B9965E66-853A-47CC-B0C9-197B5A29ABFC}.Debug|x86.Build.0 = Debug|x86
+ {B9965E66-853A-47CC-B0C9-197B5A29ABFC}.Release|Any CPU.ActiveCfg = Release|x86
+ {B9965E66-853A-47CC-B0C9-197B5A29ABFC}.Release|Mixed Platforms.ActiveCfg = Release|x86
+ {B9965E66-853A-47CC-B0C9-197B5A29ABFC}.Release|Mixed Platforms.Build.0 = Release|x86
+ {B9965E66-853A-47CC-B0C9-197B5A29ABFC}.Release|x64.ActiveCfg = Release|x64
+ {B9965E66-853A-47CC-B0C9-197B5A29ABFC}.Release|x64.Build.0 = Release|x64
+ {B9965E66-853A-47CC-B0C9-197B5A29ABFC}.Release|x86.ActiveCfg = Release|x86
+ {B9965E66-853A-47CC-B0C9-197B5A29ABFC}.Release|x86.Build.0 = Release|x86
+ {B6654857-4C82-4F92-AD7A-21FD3ED5BBFA}.Debug|Any CPU.ActiveCfg = Debug|x86
+ {B6654857-4C82-4F92-AD7A-21FD3ED5BBFA}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
+ {B6654857-4C82-4F92-AD7A-21FD3ED5BBFA}.Debug|Mixed Platforms.Build.0 = Debug|x86
+ {B6654857-4C82-4F92-AD7A-21FD3ED5BBFA}.Debug|x64.ActiveCfg = Debug|x64
+ {B6654857-4C82-4F92-AD7A-21FD3ED5BBFA}.Debug|x64.Build.0 = Debug|x64
+ {B6654857-4C82-4F92-AD7A-21FD3ED5BBFA}.Debug|x86.ActiveCfg = Debug|x86
+ {B6654857-4C82-4F92-AD7A-21FD3ED5BBFA}.Debug|x86.Build.0 = Debug|x86
+ {B6654857-4C82-4F92-AD7A-21FD3ED5BBFA}.Release|Any CPU.ActiveCfg = Release|x86
+ {B6654857-4C82-4F92-AD7A-21FD3ED5BBFA}.Release|Mixed Platforms.ActiveCfg = Release|x86
+ {B6654857-4C82-4F92-AD7A-21FD3ED5BBFA}.Release|Mixed Platforms.Build.0 = Release|x86
+ {B6654857-4C82-4F92-AD7A-21FD3ED5BBFA}.Release|x64.ActiveCfg = Release|x64
+ {B6654857-4C82-4F92-AD7A-21FD3ED5BBFA}.Release|x64.Build.0 = Release|x64
+ {B6654857-4C82-4F92-AD7A-21FD3ED5BBFA}.Release|x86.ActiveCfg = Release|x86
+ {B6654857-4C82-4F92-AD7A-21FD3ED5BBFA}.Release|x86.Build.0 = Release|x86
+ {B6E43918-236A-4EA7-84C8-ED4A98049907}.Debug|Any CPU.ActiveCfg = Debug|x86
+ {B6E43918-236A-4EA7-84C8-ED4A98049907}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
+ {B6E43918-236A-4EA7-84C8-ED4A98049907}.Debug|Mixed Platforms.Build.0 = Debug|x86
+ {B6E43918-236A-4EA7-84C8-ED4A98049907}.Debug|x64.ActiveCfg = Debug|x64
+ {B6E43918-236A-4EA7-84C8-ED4A98049907}.Debug|x64.Build.0 = Debug|x64
+ {B6E43918-236A-4EA7-84C8-ED4A98049907}.Debug|x86.ActiveCfg = Debug|x86
+ {B6E43918-236A-4EA7-84C8-ED4A98049907}.Debug|x86.Build.0 = Debug|x86
+ {B6E43918-236A-4EA7-84C8-ED4A98049907}.Release|Any CPU.ActiveCfg = Release|x86
+ {B6E43918-236A-4EA7-84C8-ED4A98049907}.Release|Mixed Platforms.ActiveCfg = Release|x86
+ {B6E43918-236A-4EA7-84C8-ED4A98049907}.Release|Mixed Platforms.Build.0 = Release|x86
+ {B6E43918-236A-4EA7-84C8-ED4A98049907}.Release|x64.ActiveCfg = Release|x64
+ {B6E43918-236A-4EA7-84C8-ED4A98049907}.Release|x64.Build.0 = Release|x64
+ {B6E43918-236A-4EA7-84C8-ED4A98049907}.Release|x86.ActiveCfg = Release|x86
+ {B6E43918-236A-4EA7-84C8-ED4A98049907}.Release|x86.Build.0 = Release|x86
+ {9A3339BC-37F0-4D03-9ACE-51CC4CF75277}.Debug|Any CPU.ActiveCfg = Debug|x86
+ {9A3339BC-37F0-4D03-9ACE-51CC4CF75277}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
+ {9A3339BC-37F0-4D03-9ACE-51CC4CF75277}.Debug|Mixed Platforms.Build.0 = Debug|x86
+ {9A3339BC-37F0-4D03-9ACE-51CC4CF75277}.Debug|x64.ActiveCfg = Debug|x64
+ {9A3339BC-37F0-4D03-9ACE-51CC4CF75277}.Debug|x64.Build.0 = Debug|x64
+ {9A3339BC-37F0-4D03-9ACE-51CC4CF75277}.Debug|x86.ActiveCfg = Debug|x86
+ {9A3339BC-37F0-4D03-9ACE-51CC4CF75277}.Debug|x86.Build.0 = Debug|x86
+ {9A3339BC-37F0-4D03-9ACE-51CC4CF75277}.Release|Any CPU.ActiveCfg = Release|x86
+ {9A3339BC-37F0-4D03-9ACE-51CC4CF75277}.Release|Mixed Platforms.ActiveCfg = Release|x86
+ {9A3339BC-37F0-4D03-9ACE-51CC4CF75277}.Release|Mixed Platforms.Build.0 = Release|x86
+ {9A3339BC-37F0-4D03-9ACE-51CC4CF75277}.Release|x64.ActiveCfg = Release|x64
+ {9A3339BC-37F0-4D03-9ACE-51CC4CF75277}.Release|x64.Build.0 = Release|x64
+ {9A3339BC-37F0-4D03-9ACE-51CC4CF75277}.Release|x86.ActiveCfg = Release|x86
+ {9A3339BC-37F0-4D03-9ACE-51CC4CF75277}.Release|x86.Build.0 = Release|x86
+ {10426A79-A3B3-4CD2-BD84-02AAEE27FB75}.Debug|Any CPU.ActiveCfg = Debug|x86
+ {10426A79-A3B3-4CD2-BD84-02AAEE27FB75}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
+ {10426A79-A3B3-4CD2-BD84-02AAEE27FB75}.Debug|Mixed Platforms.Build.0 = Debug|x86
+ {10426A79-A3B3-4CD2-BD84-02AAEE27FB75}.Debug|x64.ActiveCfg = Debug|x64
+ {10426A79-A3B3-4CD2-BD84-02AAEE27FB75}.Debug|x64.Build.0 = Debug|x64
+ {10426A79-A3B3-4CD2-BD84-02AAEE27FB75}.Debug|x86.ActiveCfg = Debug|x86
+ {10426A79-A3B3-4CD2-BD84-02AAEE27FB75}.Debug|x86.Build.0 = Debug|x86
+ {10426A79-A3B3-4CD2-BD84-02AAEE27FB75}.Release|Any CPU.ActiveCfg = Release|x86
+ {10426A79-A3B3-4CD2-BD84-02AAEE27FB75}.Release|Mixed Platforms.ActiveCfg = Release|x86
+ {10426A79-A3B3-4CD2-BD84-02AAEE27FB75}.Release|Mixed Platforms.Build.0 = Release|x86
+ {10426A79-A3B3-4CD2-BD84-02AAEE27FB75}.Release|x64.ActiveCfg = Release|x64
+ {10426A79-A3B3-4CD2-BD84-02AAEE27FB75}.Release|x64.Build.0 = Release|x64
+ {10426A79-A3B3-4CD2-BD84-02AAEE27FB75}.Release|x86.ActiveCfg = Release|x86
+ {10426A79-A3B3-4CD2-BD84-02AAEE27FB75}.Release|x86.Build.0 = Release|x86
+ {9A2CEAF1-95CF-4E7D-91D5-42DB1F3FD29A}.Debug|Any CPU.ActiveCfg = Debug|x86
+ {9A2CEAF1-95CF-4E7D-91D5-42DB1F3FD29A}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
+ {9A2CEAF1-95CF-4E7D-91D5-42DB1F3FD29A}.Debug|Mixed Platforms.Build.0 = Debug|x86
+ {9A2CEAF1-95CF-4E7D-91D5-42DB1F3FD29A}.Debug|x64.ActiveCfg = Debug|x64
+ {9A2CEAF1-95CF-4E7D-91D5-42DB1F3FD29A}.Debug|x64.Build.0 = Debug|x64
+ {9A2CEAF1-95CF-4E7D-91D5-42DB1F3FD29A}.Debug|x86.ActiveCfg = Debug|x86
+ {9A2CEAF1-95CF-4E7D-91D5-42DB1F3FD29A}.Debug|x86.Build.0 = Debug|x86
+ {9A2CEAF1-95CF-4E7D-91D5-42DB1F3FD29A}.Release|Any CPU.ActiveCfg = Release|x86
+ {9A2CEAF1-95CF-4E7D-91D5-42DB1F3FD29A}.Release|Mixed Platforms.ActiveCfg = Release|x86
+ {9A2CEAF1-95CF-4E7D-91D5-42DB1F3FD29A}.Release|Mixed Platforms.Build.0 = Release|x86
+ {9A2CEAF1-95CF-4E7D-91D5-42DB1F3FD29A}.Release|x64.ActiveCfg = Release|x64
+ {9A2CEAF1-95CF-4E7D-91D5-42DB1F3FD29A}.Release|x64.Build.0 = Release|x64
+ {9A2CEAF1-95CF-4E7D-91D5-42DB1F3FD29A}.Release|x86.ActiveCfg = Release|x86
+ {9A2CEAF1-95CF-4E7D-91D5-42DB1F3FD29A}.Release|x86.Build.0 = Release|x86
+ {2C7A6E29-980B-4A4C-9645-E2CA26FCEAAC}.Debug|Any CPU.ActiveCfg = Debug|x64
+ {2C7A6E29-980B-4A4C-9645-E2CA26FCEAAC}.Debug|Mixed Platforms.ActiveCfg = Debug|x64
+ {2C7A6E29-980B-4A4C-9645-E2CA26FCEAAC}.Debug|Mixed Platforms.Build.0 = Debug|x64
+ {2C7A6E29-980B-4A4C-9645-E2CA26FCEAAC}.Debug|x64.ActiveCfg = Debug|x64
+ {2C7A6E29-980B-4A4C-9645-E2CA26FCEAAC}.Debug|x64.Build.0 = Debug|x64
+ {2C7A6E29-980B-4A4C-9645-E2CA26FCEAAC}.Debug|x86.ActiveCfg = Debug|x86
+ {2C7A6E29-980B-4A4C-9645-E2CA26FCEAAC}.Debug|x86.Build.0 = Debug|x86
+ {2C7A6E29-980B-4A4C-9645-E2CA26FCEAAC}.Release|Any CPU.ActiveCfg = Release|x64
+ {2C7A6E29-980B-4A4C-9645-E2CA26FCEAAC}.Release|Mixed Platforms.ActiveCfg = Release|x64
+ {2C7A6E29-980B-4A4C-9645-E2CA26FCEAAC}.Release|Mixed Platforms.Build.0 = Release|x64
+ {2C7A6E29-980B-4A4C-9645-E2CA26FCEAAC}.Release|x64.ActiveCfg = Release|x64
+ {2C7A6E29-980B-4A4C-9645-E2CA26FCEAAC}.Release|x64.Build.0 = Release|x64
+ {2C7A6E29-980B-4A4C-9645-E2CA26FCEAAC}.Release|x86.ActiveCfg = Release|x86
+ {2C7A6E29-980B-4A4C-9645-E2CA26FCEAAC}.Release|x86.Build.0 = Release|x86
+ {36D05914-1A8A-484C-9FB7-8BE4582A665A}.Debug|Any CPU.ActiveCfg = Debug|x64
+ {36D05914-1A8A-484C-9FB7-8BE4582A665A}.Debug|Mixed Platforms.ActiveCfg = Debug|x64
+ {36D05914-1A8A-484C-9FB7-8BE4582A665A}.Debug|Mixed Platforms.Build.0 = Debug|x64
+ {36D05914-1A8A-484C-9FB7-8BE4582A665A}.Debug|x64.ActiveCfg = Debug|x64
+ {36D05914-1A8A-484C-9FB7-8BE4582A665A}.Debug|x64.Build.0 = Debug|x64
+ {36D05914-1A8A-484C-9FB7-8BE4582A665A}.Debug|x86.ActiveCfg = Debug|x86
+ {36D05914-1A8A-484C-9FB7-8BE4582A665A}.Debug|x86.Build.0 = Debug|x86
+ {36D05914-1A8A-484C-9FB7-8BE4582A665A}.Release|Any CPU.ActiveCfg = Release|x64
+ {36D05914-1A8A-484C-9FB7-8BE4582A665A}.Release|Mixed Platforms.ActiveCfg = Release|x64
+ {36D05914-1A8A-484C-9FB7-8BE4582A665A}.Release|Mixed Platforms.Build.0 = Release|x64
+ {36D05914-1A8A-484C-9FB7-8BE4582A665A}.Release|x64.ActiveCfg = Release|x64
+ {36D05914-1A8A-484C-9FB7-8BE4582A665A}.Release|x64.Build.0 = Release|x64
+ {36D05914-1A8A-484C-9FB7-8BE4582A665A}.Release|x86.ActiveCfg = Release|x86
+ {36D05914-1A8A-484C-9FB7-8BE4582A665A}.Release|x86.Build.0 = Release|x86
+ {90562CEB-1B6C-43AF-80A2-386A4323A4EF}.Debug|Any CPU.ActiveCfg = Debug|x64
+ {90562CEB-1B6C-43AF-80A2-386A4323A4EF}.Debug|Mixed Platforms.ActiveCfg = Debug|x64
+ {90562CEB-1B6C-43AF-80A2-386A4323A4EF}.Debug|Mixed Platforms.Build.0 = Debug|x64
+ {90562CEB-1B6C-43AF-80A2-386A4323A4EF}.Debug|x64.ActiveCfg = Debug|x64
+ {90562CEB-1B6C-43AF-80A2-386A4323A4EF}.Debug|x64.Build.0 = Debug|x64
+ {90562CEB-1B6C-43AF-80A2-386A4323A4EF}.Debug|x86.ActiveCfg = Debug|x86
+ {90562CEB-1B6C-43AF-80A2-386A4323A4EF}.Debug|x86.Build.0 = Debug|x86
+ {90562CEB-1B6C-43AF-80A2-386A4323A4EF}.Release|Any CPU.ActiveCfg = Release|x64
+ {90562CEB-1B6C-43AF-80A2-386A4323A4EF}.Release|Mixed Platforms.ActiveCfg = Release|x64
+ {90562CEB-1B6C-43AF-80A2-386A4323A4EF}.Release|Mixed Platforms.Build.0 = Release|x64
+ {90562CEB-1B6C-43AF-80A2-386A4323A4EF}.Release|x64.ActiveCfg = Release|x64
+ {90562CEB-1B6C-43AF-80A2-386A4323A4EF}.Release|x64.Build.0 = Release|x64
+ {90562CEB-1B6C-43AF-80A2-386A4323A4EF}.Release|x86.ActiveCfg = Release|x86
+ {90562CEB-1B6C-43AF-80A2-386A4323A4EF}.Release|x86.Build.0 = Release|x86
+ {54B8F93E-C7A6-463E-8DCD-2BDD94EF9D90}.Debug|Any CPU.ActiveCfg = Debug|x64
+ {54B8F93E-C7A6-463E-8DCD-2BDD94EF9D90}.Debug|Mixed Platforms.ActiveCfg = Debug|x64
+ {54B8F93E-C7A6-463E-8DCD-2BDD94EF9D90}.Debug|Mixed Platforms.Build.0 = Debug|x64
+ {54B8F93E-C7A6-463E-8DCD-2BDD94EF9D90}.Debug|x64.ActiveCfg = Debug|x64
+ {54B8F93E-C7A6-463E-8DCD-2BDD94EF9D90}.Debug|x64.Build.0 = Debug|x64
+ {54B8F93E-C7A6-463E-8DCD-2BDD94EF9D90}.Debug|x86.ActiveCfg = Debug|x86
+ {54B8F93E-C7A6-463E-8DCD-2BDD94EF9D90}.Debug|x86.Build.0 = Debug|x86
+ {54B8F93E-C7A6-463E-8DCD-2BDD94EF9D90}.Release|Any CPU.ActiveCfg = Release|x64
+ {54B8F93E-C7A6-463E-8DCD-2BDD94EF9D90}.Release|Mixed Platforms.ActiveCfg = Release|x64
+ {54B8F93E-C7A6-463E-8DCD-2BDD94EF9D90}.Release|Mixed Platforms.Build.0 = Release|x64
+ {54B8F93E-C7A6-463E-8DCD-2BDD94EF9D90}.Release|x64.ActiveCfg = Release|x64
+ {54B8F93E-C7A6-463E-8DCD-2BDD94EF9D90}.Release|x64.Build.0 = Release|x64
+ {54B8F93E-C7A6-463E-8DCD-2BDD94EF9D90}.Release|x86.ActiveCfg = Release|x86
+ {54B8F93E-C7A6-463E-8DCD-2BDD94EF9D90}.Release|x86.Build.0 = Release|x86
+ {D99C1889-D52B-4640-B3F5-594F5A728A56}.Debug|Any CPU.ActiveCfg = Debug|x64
+ {D99C1889-D52B-4640-B3F5-594F5A728A56}.Debug|Mixed Platforms.ActiveCfg = Debug|x64
+ {D99C1889-D52B-4640-B3F5-594F5A728A56}.Debug|Mixed Platforms.Build.0 = Debug|x64
+ {D99C1889-D52B-4640-B3F5-594F5A728A56}.Debug|x64.ActiveCfg = Debug|x64
+ {D99C1889-D52B-4640-B3F5-594F5A728A56}.Debug|x64.Build.0 = Debug|x64
+ {D99C1889-D52B-4640-B3F5-594F5A728A56}.Debug|x86.ActiveCfg = Debug|x86
+ {D99C1889-D52B-4640-B3F5-594F5A728A56}.Debug|x86.Build.0 = Debug|x86
+ {D99C1889-D52B-4640-B3F5-594F5A728A56}.Release|Any CPU.ActiveCfg = Release|x64
+ {D99C1889-D52B-4640-B3F5-594F5A728A56}.Release|Mixed Platforms.ActiveCfg = Release|x64
+ {D99C1889-D52B-4640-B3F5-594F5A728A56}.Release|Mixed Platforms.Build.0 = Release|x64
+ {D99C1889-D52B-4640-B3F5-594F5A728A56}.Release|x64.ActiveCfg = Release|x64
+ {D99C1889-D52B-4640-B3F5-594F5A728A56}.Release|x64.Build.0 = Release|x64
+ {D99C1889-D52B-4640-B3F5-594F5A728A56}.Release|x86.ActiveCfg = Release|x86
+ {D99C1889-D52B-4640-B3F5-594F5A728A56}.Release|x86.Build.0 = Release|x86
+ {2125B641-AB4D-4C29-A2A7-DD37839CCACB}.Debug|Any CPU.ActiveCfg = Debug|x64
+ {2125B641-AB4D-4C29-A2A7-DD37839CCACB}.Debug|Mixed Platforms.ActiveCfg = Debug|x64
+ {2125B641-AB4D-4C29-A2A7-DD37839CCACB}.Debug|Mixed Platforms.Build.0 = Debug|x64
+ {2125B641-AB4D-4C29-A2A7-DD37839CCACB}.Debug|x64.ActiveCfg = Debug|x64
+ {2125B641-AB4D-4C29-A2A7-DD37839CCACB}.Debug|x64.Build.0 = Debug|x64
+ {2125B641-AB4D-4C29-A2A7-DD37839CCACB}.Debug|x86.ActiveCfg = Debug|x86
+ {2125B641-AB4D-4C29-A2A7-DD37839CCACB}.Debug|x86.Build.0 = Debug|x86
+ {2125B641-AB4D-4C29-A2A7-DD37839CCACB}.Release|Any CPU.ActiveCfg = Release|x64
+ {2125B641-AB4D-4C29-A2A7-DD37839CCACB}.Release|Mixed Platforms.ActiveCfg = Release|x64
+ {2125B641-AB4D-4C29-A2A7-DD37839CCACB}.Release|Mixed Platforms.Build.0 = Release|x64
+ {2125B641-AB4D-4C29-A2A7-DD37839CCACB}.Release|x64.ActiveCfg = Release|x64
+ {2125B641-AB4D-4C29-A2A7-DD37839CCACB}.Release|x64.Build.0 = Release|x64
+ {2125B641-AB4D-4C29-A2A7-DD37839CCACB}.Release|x86.ActiveCfg = Release|x86
+ {2125B641-AB4D-4C29-A2A7-DD37839CCACB}.Release|x86.Build.0 = Release|x86
+ {53C19B7D-9590-49FA-81BC-59ECC820F349}.Debug|Any CPU.ActiveCfg = Debug|x64
+ {53C19B7D-9590-49FA-81BC-59ECC820F349}.Debug|Mixed Platforms.ActiveCfg = Debug|x64
+ {53C19B7D-9590-49FA-81BC-59ECC820F349}.Debug|Mixed Platforms.Build.0 = Debug|x64
+ {53C19B7D-9590-49FA-81BC-59ECC820F349}.Debug|x64.ActiveCfg = Debug|x64
+ {53C19B7D-9590-49FA-81BC-59ECC820F349}.Debug|x64.Build.0 = Debug|x64
+ {53C19B7D-9590-49FA-81BC-59ECC820F349}.Debug|x86.ActiveCfg = Debug|x86
+ {53C19B7D-9590-49FA-81BC-59ECC820F349}.Debug|x86.Build.0 = Debug|x86
+ {53C19B7D-9590-49FA-81BC-59ECC820F349}.Release|Any CPU.ActiveCfg = Release|x64
+ {53C19B7D-9590-49FA-81BC-59ECC820F349}.Release|Mixed Platforms.ActiveCfg = Release|x64
+ {53C19B7D-9590-49FA-81BC-59ECC820F349}.Release|Mixed Platforms.Build.0 = Release|x64
+ {53C19B7D-9590-49FA-81BC-59ECC820F349}.Release|x64.ActiveCfg = Release|x64
+ {53C19B7D-9590-49FA-81BC-59ECC820F349}.Release|x64.Build.0 = Release|x64
+ {53C19B7D-9590-49FA-81BC-59ECC820F349}.Release|x86.ActiveCfg = Release|x86
+ {53C19B7D-9590-49FA-81BC-59ECC820F349}.Release|x86.Build.0 = Release|x86
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS.suo b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS.suo
new file mode 100644
index 000000000..05c488ab1
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS.suo differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/HPSocketCS.csproj b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/HPSocketCS.csproj
new file mode 100644
index 000000000..b7295fdcc
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/HPSocketCS.csproj
@@ -0,0 +1,102 @@
+锘
+
+
+ Debug
+ AnyCPU
+ 8.0.30703
+ 2.0
+ {DFA935E2-CF37-4E26-B697-D7F3DEE19DD8}
+ Library
+ Properties
+ HPSocketCS
+ HPSocketCS
+ v4.0
+ 512
+
+
+ true
+ full
+ false
+ ..\bin\x86\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+ true
+
+
+ pdbonly
+ true
+ ..\bin\x86\Release\
+ TRACE
+ prompt
+ 4
+
+
+ true
+ ..\bin\x64\Debug\
+ DEBUG;TRACE
+ full
+ x64
+ ..\bin\Debug\HPSocketCS.dll.CodeAnalysisLog.xml
+ true
+ GlobalSuppressions.cs
+ prompt
+ MinimumRecommendedRules.ruleset
+ ;D:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets
+ ;D:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules
+
+
+ ..\bin\x64\Release\
+ TRACE
+ true
+ pdbonly
+ x64
+ ..\bin\Release\HPSocketCS.dll.CodeAnalysisLog.xml
+ true
+ GlobalSuppressions.cs
+ prompt
+ MinimumRecommendedRules.ruleset
+ ;D:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets
+ ;D:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/Properties/AssemblyInfo.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/Properties/AssemblyInfo.cs
new file mode 100644
index 000000000..fb8735106
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+锘縰sing System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 鏈夊叧绋嬪簭闆嗙殑甯歌淇℃伅閫氳繃浠ヤ笅
+// 鐗规ч泦鎺у埗銆傛洿鏀硅繖浜涚壒鎬у煎彲淇敼
+// 涓庣▼搴忛泦鍏宠仈鐨勪俊鎭
+[assembly: AssemblyTitle("HPSocketCS")]
+[assembly: AssemblyDescription("HP-Socket for C#")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("JessMA Open Source")]
+[assembly: AssemblyProduct("HPSocketCS")]
+[assembly: AssemblyCopyright("Copyright 漏 2016")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 灏 ComVisible 璁剧疆涓 false 浣挎绋嬪簭闆嗕腑鐨勭被鍨
+// 瀵 COM 缁勪欢涓嶅彲瑙併傚鏋滈渶瑕佷粠 COM 璁块棶姝ょ▼搴忛泦涓殑绫诲瀷锛
+// 鍒欏皢璇ョ被鍨嬩笂鐨 ComVisible 鐗规ц缃负 true銆
+[assembly: ComVisible(false)]
+
+// 濡傛灉姝ら」鐩悜 COM 鍏紑锛屽垯涓嬪垪 GUID 鐢ㄤ簬绫诲瀷搴撶殑 ID
+[assembly: Guid("f54bd34d-cd0c-40dc-8c50-73c3ead0a894")]
+
+// 绋嬪簭闆嗙殑鐗堟湰淇℃伅鐢变笅闈㈠洓涓肩粍鎴:
+//
+// 涓荤増鏈
+// 娆$増鏈
+// 鍐呴儴鐗堟湰鍙
+// 淇鍙
+//
+// 鍙互鎸囧畾鎵鏈夎繖浜涘硷紝涔熷彲浠ヤ娇鐢ㄢ滃唴閮ㄧ増鏈彿鈥濆拰鈥滀慨璁㈠彿鈥濈殑榛樿鍊硷紝
+// 鏂规硶鏄寜濡備笅鎵绀轰娇鐢ㄢ*鈥:
+
+[assembly: AssemblyVersion("3.5.2")]
+[assembly: AssemblyFileVersion("3.5.2")]
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/SSLAgent.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/SSLAgent.cs
new file mode 100644
index 000000000..955b06ae2
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/SSLAgent.cs
@@ -0,0 +1,202 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+using System.Runtime.Serialization;
+using System.Runtime.Serialization.Formatters.Binary;
+using System.Linq;
+using System.Text;
+using System.IO;
+using System.Threading;
+
+namespace HPSocketCS
+{
+ public class SSLAgent : TcpAgent
+ {
+ static int ObjectReferer = 0;
+ static string SSLInitLock = "SSL鍒濆鍖栭攣";
+ Sdk.OnHandShake _OnHandShake = null;
+
+ ///
+ /// 楠岃瘉妯″紡
+ ///
+ public SSLVerifyMode VerifyMode { get; set; }
+ ///
+ /// 璇佷功鏂囦欢锛堝鎴风鍙夛級
+ ///
+ public string PemCertFile { get; set; }
+ ///
+ /// 绉侀挜鏂囦欢锛堝鎴风鍙夛級
+ ///
+ public string PemKeyFile { get; set; }
+ ///
+ /// 绉侀挜瀵嗙爜锛堟病鏈夊瘑鐮佸垯涓虹┖锛
+ ///
+ public string KeyPasswod { get; set; }
+ ///
+ /// CA 璇佷功鏂囦欢鎴栫洰褰曪紙鍗曞悜楠岃瘉鎴栧鎴风鍙夛級
+ ///
+ public string CAPemCertFileOrPath { get; set; }
+
+
+ ///
+ /// SSL鎻℃墜鎴愬姛浜嬩欢
+ ///
+ public event SSLEvent.OnHandShakeEventHandler OnHandShake;
+
+ public SSLAgent()
+ {
+ Interlocked.Increment(ref ObjectReferer);
+ }
+
+ ///
+ ///
+ ///
+ /// 楠岃瘉妯″紡
+ /// 璇佷功鏂囦欢
+ /// 绉侀挜鏂囦欢
+ /// 绉侀挜瀵嗙爜锛堟病鏈夊瘑鐮佸垯涓虹┖锛
+ /// CA 璇佷功鏂囦欢鎴栫洰褰曪紙鍗曞悜楠岃瘉鎴栧鎴风鍙夛級
+ public SSLAgent(SSLVerifyMode _verifyModel, string _pemCertFile, string _pemKeyFile, string _keyPasswod, string _caPemCertFileOrPath)
+ {
+ Interlocked.Increment(ref ObjectReferer);
+ this.VerifyMode = _verifyModel;
+ this.PemCertFile = _pemCertFile;
+ this.PemKeyFile = _pemKeyFile;
+ this.KeyPasswod = _keyPasswod;
+ this.CAPemCertFileOrPath = _caPemCertFileOrPath;
+ Initialize();
+ }
+
+ ~SSLAgent()
+ {
+ Uninitialize();
+ }
+
+ protected override bool CreateListener()
+ {
+ if (IsCreate == true || pListener != IntPtr.Zero || pAgent != IntPtr.Zero)
+ {
+ return false;
+ }
+
+ pListener = Sdk.Create_HP_TcpAgentListener();
+ if (pListener == IntPtr.Zero)
+ {
+ return false;
+ }
+
+ pAgent = SSLSdk.Create_HP_SSLAgent(pListener);
+ if (pAgent == IntPtr.Zero)
+ {
+ return false;
+ }
+
+ IsCreate = true;
+
+ return true;
+ }
+
+ protected override void SetCallback()
+ {
+ _OnHandShake = new Sdk.OnHandShake(SDK_OnHandShake);
+ Sdk.HP_Set_FN_Server_OnHandShake(pListener, _OnHandShake);
+ base.SetCallback();
+ }
+
+ ///
+ /// 鍒濆鍖朣SL鐜
+ ///
+ ///
+ protected virtual bool Initialize()
+ {
+ lock (SSLInitLock)
+ {
+ if (SSLSdk.HP_SSL_IsValid() == false)
+ {
+ if (string.IsNullOrWhiteSpace(PemCertFile))
+ {
+ throw new NullReferenceException("PemCertFile");
+ }
+
+ if (string.IsNullOrWhiteSpace(PemKeyFile))
+ {
+ throw new NullReferenceException("PemKeyFile");
+ }
+
+ if (string.IsNullOrWhiteSpace(KeyPasswod))
+ {
+ throw new NullReferenceException("KeyPasswod");
+ }
+
+ if (string.IsNullOrWhiteSpace(CAPemCertFileOrPath))
+ {
+ throw new NullReferenceException("CAPemCertFileOrPath");
+ }
+
+ return SSLSdk.HP_SSL_Initialize(SSLSessionMode.Client, VerifyMode, PemCertFile, PemKeyFile, KeyPasswod, CAPemCertFileOrPath);
+
+ }
+
+ return true;
+ }
+ }
+
+ ///
+ /// 鍙嶅垵濮嬪寲SSL鐜
+ ///
+ protected virtual void Uninitialize()
+ {
+ if (Interlocked.Decrement(ref ObjectReferer) == 0)
+ {
+ SSLSdk.HP_SSL_Cleanup();
+ }
+ }
+
+ ///
+ /// 鍚姩閫氳缁勪欢
+ /// 鍚姩瀹屾垚鍚庡彲寮濮嬭繛鎺ヨ繙绋嬫湇鍔″櫒
+ ///
+ /// 缁戝畾鍦板潃
+ /// 鏄惁寮傛
+ ///
+ public new bool Start(string address, bool async = false)
+ {
+ bool ret = false;
+ if (Initialize())
+ {
+ ret = base.Start(address, async);
+ }
+
+ return ret;
+ }
+
+
+ public override void Destroy()
+ {
+
+ Stop();
+
+ if (pAgent != IntPtr.Zero)
+ {
+ SSLSdk.Destroy_HP_SSLAgent(pAgent);
+ pAgent = IntPtr.Zero;
+ }
+ if (pListener != IntPtr.Zero)
+ {
+ Sdk.Destroy_HP_TcpAgentListener(pListener);
+ pListener = IntPtr.Zero;
+ }
+
+ IsCreate = false;
+ }
+
+ protected HandleResult SDK_OnHandShake(IntPtr connId)
+ {
+ if (OnHandShake != null)
+ {
+ return OnHandShake(connId);
+ }
+ return HandleResult.Ignore;
+ }
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/SSLClient.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/SSLClient.cs
new file mode 100644
index 000000000..c1283ad92
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/SSLClient.cs
@@ -0,0 +1,193 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading;
+
+namespace HPSocketCS
+{
+ public class SSLClientEvent
+ {
+ public delegate HandleResult OnHandShakeEventHandler(TcpClient sender);
+ }
+
+ public class SSLClient : TcpClient
+ {
+ static int ObjectReferer = 0;
+ static string SSLInitLock = "SSL鍒濆鍖栭攣";
+ Sdk.OnHandShake _OnHandShake = null;
+ ///
+ /// 楠岃瘉妯″紡
+ ///
+ public SSLVerifyMode VerifyMode { get; set; }
+ ///
+ /// 璇佷功鏂囦欢锛堝鎴风鍙夛級
+ ///
+ public string PemCertFile { get; set; }
+ ///
+ /// 绉侀挜鏂囦欢锛堝鎴风鍙夛級
+ ///
+ public string PemKeyFile { get; set; }
+ ///
+ /// 绉侀挜瀵嗙爜锛堟病鏈夊瘑鐮佸垯涓虹┖锛
+ ///
+ public string KeyPasswod { get; set; }
+ ///
+ /// CA 璇佷功鏂囦欢鎴栫洰褰曪紙鍗曞悜楠岃瘉鎴栧鎴风鍙夛級
+ ///
+ public string CAPemCertFileOrPath { get; set; }
+
+
+ ///
+ /// SSL鎻℃墜鎴愬姛浜嬩欢
+ ///
+ public event SSLClientEvent.OnHandShakeEventHandler OnHandShake;
+
+
+ public SSLClient()
+ {
+ Interlocked.Increment(ref ObjectReferer);
+ }
+
+ ///
+ ///
+ ///
+ /// 楠岃瘉妯″紡
+ /// 璇佷功鏂囦欢锛堝鎴风鍙夛級
+ /// 绉侀挜鏂囦欢锛堝鎴风鍙夛級
+ /// 绉侀挜瀵嗙爜锛堟病鏈夊瘑鐮佸垯涓虹┖锛
+ /// CA 璇佷功鏂囦欢鎴栫洰褰曪紙鍗曞悜楠岃瘉鎴栧鎴风鍙夛級
+ public SSLClient(SSLVerifyMode _verifyModel, string _pemCertFile, string _pemKeyFile, string _keyPasswod, string _caPemCertFileOrPath)
+ {
+ Interlocked.Increment(ref ObjectReferer);
+ this.VerifyMode = _verifyModel;
+ this.PemCertFile = _pemCertFile;
+ this.PemKeyFile = _pemKeyFile;
+ this.KeyPasswod = _keyPasswod;
+ this.CAPemCertFileOrPath = _caPemCertFileOrPath;
+ Initialize();
+ }
+
+ ~SSLClient()
+ {
+ Uninitialize();
+ }
+
+ protected override bool CreateListener()
+ {
+ if (IsCreate == true || pListener != IntPtr.Zero || pClient != IntPtr.Zero)
+ {
+ return false;
+ }
+
+ pListener = Sdk.Create_HP_TcpClientListener();
+ if (pListener == IntPtr.Zero)
+ {
+ return false;
+ }
+
+ pClient = SSLSdk.Create_HP_SSLClient(pListener);
+ if (pClient == IntPtr.Zero)
+ {
+ return false;
+ }
+
+ IsCreate = true;
+
+ return true;
+ }
+
+ protected override void SetCallback()
+ {
+ _OnHandShake = new Sdk.OnHandShake(SDK_OnHandShake);
+ Sdk.HP_Set_FN_Server_OnHandShake(pListener, _OnHandShake);
+ base.SetCallback();
+ }
+
+ ///
+ /// 鍒濆鍖朣SL鐜
+ ///
+ ///
+ protected virtual bool Initialize()
+ {
+ lock (SSLInitLock)
+ {
+ if (SSLSdk.HP_SSL_IsValid() == false)
+ {
+ if (string.IsNullOrWhiteSpace(PemCertFile))
+ {
+ throw new NullReferenceException("PemCertFile");
+ }
+
+ if (string.IsNullOrWhiteSpace(PemKeyFile))
+ {
+ throw new NullReferenceException("PemKeyFile");
+ }
+
+ if (string.IsNullOrWhiteSpace(KeyPasswod))
+ {
+ throw new NullReferenceException("KeyPasswod");
+ }
+
+ if (string.IsNullOrWhiteSpace(CAPemCertFileOrPath))
+ {
+ throw new NullReferenceException("CAPemCertFileOrPath");
+ }
+
+ return SSLSdk.HP_SSL_Initialize(SSLSessionMode.Client, VerifyMode, PemCertFile, PemKeyFile, KeyPasswod, CAPemCertFileOrPath);
+
+ }
+
+ return true;
+ }
+ }
+
+ ///
+ /// 鍙嶅垵濮嬪寲SSL鐜
+ ///
+ protected virtual void Uninitialize()
+ {
+ if (Interlocked.Decrement(ref ObjectReferer) == 0)
+ {
+ SSLSdk.HP_SSL_Cleanup();
+ }
+ }
+
+ public new bool Connetion(string address, ushort port, bool async = false)
+ {
+ bool ret = false;
+ if (Initialize())
+ {
+ ret = base.Connetion(address, port, async);
+ }
+
+ return ret;
+ }
+
+ public override void Destroy()
+ {
+ Stop();
+ if (pClient != IntPtr.Zero)
+ {
+ SSLSdk.Destroy_HP_SSLClient(pClient);
+ pClient = IntPtr.Zero;
+ }
+ if (pListener != IntPtr.Zero)
+ {
+ Sdk.Destroy_HP_TcpClientListener(pListener);
+ pListener = IntPtr.Zero;
+ }
+
+ IsCreate = false;
+ }
+
+ protected HandleResult SDK_OnHandShake(IntPtr connId)
+ {
+ if (OnHandShake != null)
+ {
+ return OnHandShake(this);
+ }
+ return HandleResult.Ignore;
+ }
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/SSLPackAgent.CS b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/SSLPackAgent.CS
new file mode 100644
index 000000000..c5db4dba8
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/SSLPackAgent.CS
@@ -0,0 +1,112 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HPSocketCS
+{
+ public class SSLPackAgent : SSLAgent
+ {
+ public SSLPackAgent()
+ : base()
+ {
+
+ }
+ ///
+ ///
+ ///
+ /// 楠岃瘉妯″紡
+ /// 璇佷功鏂囦欢锛堝鎴风鍙夛級
+ /// 绉侀挜鏂囦欢锛堝鎴风鍙夛級
+ /// 绉侀挜瀵嗙爜锛堟病鏈夊瘑鐮佸垯涓虹┖锛
+ /// CA 璇佷功鏂囦欢鎴栫洰褰曪紙鍗曞悜楠岃瘉鎴栧鎴风鍙夛級
+ public SSLPackAgent(SSLVerifyMode _verifyModel, string _pemCertFile, string _pemKeyFile, string _keyPasswod, string _caPemCertFileOrPath)
+ : base(_verifyModel, _pemCertFile, _pemKeyFile, _keyPasswod, _caPemCertFileOrPath)
+ {
+
+ }
+
+ ///
+ /// 鍒涘缓socket鐩戝惉&鏈嶅姟缁勪欢
+ ///
+ ///
+ protected override bool CreateListener()
+ {
+ if (IsCreate == true || pListener != IntPtr.Zero || pAgent != IntPtr.Zero)
+ {
+ return false;
+ }
+
+ pListener = Sdk.Create_HP_TcpAgentListener();
+ if (pListener == IntPtr.Zero)
+ {
+ return false;
+ }
+
+ pAgent = SSLSdk.Create_HP_SSLPackAgent(pListener);
+ if (pAgent == IntPtr.Zero)
+ {
+ return false;
+ }
+
+ IsCreate = true;
+
+ return true;
+ }
+
+ ///
+ /// 缁堟鏈嶅姟骞堕噴鏀捐祫婧
+ ///
+ public override void Destroy()
+ {
+ Stop();
+
+ if (pAgent != IntPtr.Zero)
+ {
+ SSLSdk.Destroy_HP_SSLPackAgent(pAgent);
+ pAgent = IntPtr.Zero;
+ }
+ if (pListener != IntPtr.Zero)
+ {
+ Sdk.Destroy_HP_TcpAgentListener(pListener);
+ pListener = IntPtr.Zero;
+ }
+
+ IsCreate = false;
+ }
+
+ ///
+ /// 璇诲彇鎴栬缃暟鎹寘鏈澶ч暱搴
+ /// 鏈夋晥鏁版嵁鍖呮渶澶ч暱搴︿笉鑳借秴杩 524287/0x7FFFF 瀛楄妭锛岄粯璁わ細262144/0x40000
+ ///
+ public uint MaxPackSize
+ {
+ get
+ {
+ return Sdk.HP_TcpPackAgent_GetMaxPackSize(pAgent);
+ }
+ set
+ {
+ Sdk.HP_TcpPackAgent_SetMaxPackSize(pAgent, value);
+ }
+ }
+
+ ///
+ /// 璇诲彇鎴栬缃寘澶存爣璇
+ /// 鏈夋晥鍖呭ご鏍囪瘑鍙栧艰寖鍥 0 ~ 8191/0x1FFF锛屽綋鍖呭ご鏍囪瘑涓 0 鏃朵笉鏍¢獙鍖呭ご锛岄粯璁わ細0
+ ///
+ public ushort PackHeaderFlag
+ {
+ get
+ {
+ return Sdk.HP_TcpPackAgent_GetPackHeaderFlag(pAgent);
+ }
+ set
+ {
+ Sdk.HP_TcpPackAgent_SetPackHeaderFlag(pAgent, value);
+ }
+ }
+
+
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/SSLPackClient.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/SSLPackClient.cs
new file mode 100644
index 000000000..4c055ffdb
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/SSLPackClient.cs
@@ -0,0 +1,112 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HPSocketCS
+{
+ public class SSLPackClient : SSLClient
+ {
+ public SSLPackClient()
+ : base()
+ {
+
+ }
+ ///
+ ///
+ ///
+ /// 楠岃瘉妯″紡
+ /// 璇佷功鏂囦欢锛堝鎴风鍙夛級
+ /// 绉侀挜鏂囦欢锛堝鎴风鍙夛級
+ /// 绉侀挜瀵嗙爜锛堟病鏈夊瘑鐮佸垯涓虹┖锛
+ /// CA 璇佷功鏂囦欢鎴栫洰褰曪紙鍗曞悜楠岃瘉鎴栧鎴风鍙夛級
+ public SSLPackClient(SSLVerifyMode _verifyModel, string _pemCertFile, string _pemKeyFile, string _keyPasswod, string _caPemCertFileOrPath)
+ : base(_verifyModel, _pemCertFile, _pemKeyFile, _keyPasswod, _caPemCertFileOrPath)
+ {
+
+ }
+
+ ///
+ /// 鍒涘缓socket鐩戝惉&鏈嶅姟缁勪欢
+ ///
+ ///
+ protected override bool CreateListener()
+ {
+ if (IsCreate == true || pListener != IntPtr.Zero || pClient != IntPtr.Zero)
+ {
+ return false;
+ }
+
+ pListener = Sdk.Create_HP_TcpClientListener();
+ if (pListener == IntPtr.Zero)
+ {
+ return false;
+ }
+
+ pClient = SSLSdk.Create_HP_SSLPackClient (pListener);
+ if (pClient == IntPtr.Zero)
+ {
+ return false;
+ }
+
+ IsCreate = true;
+
+ return true;
+ }
+
+ ///
+ /// 缁堟鏈嶅姟骞堕噴鏀捐祫婧
+ ///
+ public override void Destroy()
+ {
+ Stop();
+
+ if (pClient != IntPtr.Zero)
+ {
+ SSLSdk.Destroy_HP_SSLPackClient(pClient);
+ pClient = IntPtr.Zero;
+ }
+ if (pListener != IntPtr.Zero)
+ {
+ Sdk.Destroy_HP_TcpClientListener(pListener);
+ pListener = IntPtr.Zero;
+ }
+
+ IsCreate = false;
+ }
+
+ ///
+ /// 璇诲彇鎴栬缃暟鎹寘鏈澶ч暱搴
+ /// 鏈夋晥鏁版嵁鍖呮渶澶ч暱搴︿笉鑳借秴杩 524287/0x7FFFF 瀛楄妭锛岄粯璁わ細262144/0x40000
+ ///
+ public uint MaxPackSize
+ {
+ get
+ {
+ return Sdk.HP_TcpPackClient_GetMaxPackSize(pClient);
+ }
+ set
+ {
+ Sdk.HP_TcpPackClient_SetMaxPackSize(pClient, value);
+ }
+ }
+
+ ///
+ /// 璇诲彇鎴栬缃寘澶存爣璇
+ /// 鏈夋晥鍖呭ご鏍囪瘑鍙栧艰寖鍥 0 ~ 8191/0x1FFF锛屽綋鍖呭ご鏍囪瘑涓 0 鏃朵笉鏍¢獙鍖呭ご锛岄粯璁わ細0
+ ///
+ public ushort PackHeaderFlag
+ {
+ get
+ {
+ return Sdk.HP_TcpPackClient_GetPackHeaderFlag(pClient);
+ }
+ set
+ {
+ Sdk.HP_TcpPackClient_SetPackHeaderFlag(pClient, value);
+ }
+ }
+
+
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/SSLPackServer.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/SSLPackServer.cs
new file mode 100644
index 000000000..a176eee34
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/SSLPackServer.cs
@@ -0,0 +1,112 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HPSocketCS
+{
+ public class SSLPackServer : SSLServer
+ {
+ public SSLPackServer()
+ : base()
+ {
+
+ }
+ ///
+ ///
+ ///
+ /// 楠岃瘉妯″紡
+ /// 璇佷功鏂囦欢锛堝鎴风鍙夛級
+ /// 绉侀挜鏂囦欢锛堝鎴风鍙夛級
+ /// 绉侀挜瀵嗙爜锛堟病鏈夊瘑鐮佸垯涓虹┖锛
+ /// CA 璇佷功鏂囦欢鎴栫洰褰曪紙鍗曞悜楠岃瘉鎴栧鎴风鍙夛級
+ public SSLPackServer(SSLVerifyMode _verifyModel, string _pemCertFile, string _pemKeyFile, string _keyPasswod, string _caPemCertFileOrPath)
+ : base(_verifyModel, _pemCertFile, _pemKeyFile, _keyPasswod, _caPemCertFileOrPath)
+ {
+
+ }
+
+ ///
+ /// 鍒涘缓socket鐩戝惉&鏈嶅姟缁勪欢
+ ///
+ ///
+ protected override bool CreateListener()
+ {
+ if (IsCreate == true || pListener != IntPtr.Zero || pServer != IntPtr.Zero)
+ {
+ return false;
+ }
+
+ pListener = Sdk.Create_HP_TcpServerListener();
+ if (pListener == IntPtr.Zero)
+ {
+ return false;
+ }
+
+ pServer = SSLSdk.Create_HP_SSLPackServer(pListener);
+ if (pServer == IntPtr.Zero)
+ {
+ return false;
+ }
+
+ IsCreate = true;
+
+ return true;
+ }
+
+ ///
+ /// 缁堟鏈嶅姟骞堕噴鏀捐祫婧
+ ///
+ public override void Destroy()
+ {
+ Stop();
+
+ if (pServer != IntPtr.Zero)
+ {
+ SSLSdk.Destroy_HP_SSLPackServer(pServer);
+ pServer = IntPtr.Zero;
+ }
+ if (pListener != IntPtr.Zero)
+ {
+ Sdk.Destroy_HP_TcpServerListener(pListener);
+ pListener = IntPtr.Zero;
+ }
+
+ IsCreate = false;
+ }
+
+ ///
+ /// 璇诲彇鎴栬缃暟鎹寘鏈澶ч暱搴
+ /// 鏈夋晥鏁版嵁鍖呮渶澶ч暱搴︿笉鑳借秴杩 4194303/0x3FFFFF 瀛楄妭锛岄粯璁わ細262144/0x40000
+ ///
+ public uint MaxPackSize
+ {
+ get
+ {
+ return Sdk.HP_TcpPackServer_GetMaxPackSize(pServer);
+ }
+ set
+ {
+ Sdk.HP_TcpPackServer_SetMaxPackSize(pServer, value );
+ }
+ }
+
+ ///
+ /// 璇诲彇鎴栬缃寘澶存爣璇
+ /// 鏈夋晥鍖呭ご鏍囪瘑鍙栧艰寖鍥 0 ~ 1023/0x3FF锛屽綋鍖呭ご鏍囪瘑涓 0 鏃朵笉鏍¢獙鍖呭ご锛岄粯璁わ細0
+ ///
+ public ushort PackHeaderFlag
+ {
+ get
+ {
+ return Sdk.HP_TcpPackServer_GetPackHeaderFlag(pServer);
+ }
+ set
+ {
+ Sdk.HP_TcpPackServer_SetPackHeaderFlag(pServer, value);
+ }
+ }
+
+
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/SSLPullAgent.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/SSLPullAgent.cs
new file mode 100644
index 000000000..3f659fa0d
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/SSLPullAgent.cs
@@ -0,0 +1,136 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HPSocketCS
+{
+ public class SSLPullAgent : SSLAgent
+ {
+ protected new TcpPullAgentEvent.OnReceiveEventHandler OnReceive;
+
+ public SSLPullAgent()
+ : base()
+ {
+
+ }
+ ///
+ ///
+ ///
+ /// 楠岃瘉妯″紡
+ /// 璇佷功鏂囦欢锛堝鎴风鍙夛級
+ /// 绉侀挜鏂囦欢锛堝鎴风鍙夛級
+ /// 绉侀挜瀵嗙爜锛堟病鏈夊瘑鐮佸垯涓虹┖锛
+ /// CA 璇佷功鏂囦欢鎴栫洰褰曪紙鍗曞悜楠岃瘉鎴栧鎴风鍙夛級
+ public SSLPullAgent(SSLVerifyMode _verifyModel, string _pemCertFile, string _pemKeyFile, string _keyPasswod, string _caPemCertFileOrPath)
+ : base(_verifyModel, _pemCertFile, _pemKeyFile, _keyPasswod, _caPemCertFileOrPath)
+ {
+
+ }
+
+ ///
+ /// 鍒涘缓socket鐩戝惉&鏈嶅姟缁勪欢
+ ///
+ ///
+ protected override bool CreateListener()
+ {
+ if (IsCreate == true || pListener != IntPtr.Zero || pAgent != IntPtr.Zero)
+ {
+ return false;
+ }
+
+ pListener = Sdk.Create_HP_TcpPullAgentListener();
+ if (pListener == IntPtr.Zero)
+ {
+ return false;
+ }
+
+ pAgent = SSLSdk.Create_HP_SSLPullAgent(pListener);
+ if (pAgent == IntPtr.Zero)
+ {
+ return false;
+ }
+
+ IsCreate = true;
+
+ return true;
+ }
+
+ ///
+ /// 鎶撳彇鏁版嵁
+ /// 鐢ㄦ埛閫氳繃璇ユ柟娉曚粠 Socket 缁勪欢涓姄鍙栨暟鎹
+ ///
+ ///
+ ///
+ ///
+ ///
+ public FetchResult Fetch(IntPtr connId, IntPtr pBuffer, int size)
+ {
+ return Sdk.HP_TcpPullAgent_Fetch(pAgent, connId, pBuffer, size);
+ }
+
+ ///
+ /// 鎶撳彇鏁版嵁
+ /// 鐢ㄦ埛閫氳繃璇ユ柟娉曚粠 Socket 缁勪欢涓姄鍙栨暟鎹
+ ///
+ ///
+ ///
+ ///
+ ///
+ public FetchResult Peek(IntPtr connId, IntPtr pBuffer, int size)
+ {
+ return Sdk.HP_TcpPullAgent_Peek(pAgent, connId, pBuffer, size);
+ }
+
+ Sdk.OnPullReceive _OnReceive = null;
+
+ ///
+ /// 璁剧疆鍥炶皟鍑芥暟
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ protected override void SetCallback()
+ {
+ _OnReceive = new Sdk.OnPullReceive(SDK_OnReceive);
+
+ // 璁剧疆 Socket 鐩戝惉鍣ㄥ洖璋冨嚱鏁
+ Sdk.HP_Set_FN_Agent_OnPullReceive(pListener, _OnReceive);
+ base.SetCallback();
+ }
+
+ protected virtual HandleResult SDK_OnReceive(IntPtr connId, int length)
+ {
+ if (OnReceive != null)
+ {
+ return OnReceive(connId, length);
+ }
+ return HandleResult.Ignore;
+ }
+
+ ///
+ /// 缁堟鏈嶅姟骞堕噴鏀捐祫婧
+ ///
+ public override void Destroy()
+ {
+ Stop();
+
+ if (pAgent != IntPtr.Zero)
+ {
+ SSLSdk.Destroy_HP_SSLPullAgent(pAgent);
+ pAgent = IntPtr.Zero;
+ }
+ if (pListener != IntPtr.Zero)
+ {
+ Sdk.Destroy_HP_TcpPullAgentListener(pListener);
+ pListener = IntPtr.Zero;
+ }
+
+ IsCreate = false;
+ }
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/SSLPullClient.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/SSLPullClient.cs
new file mode 100644
index 000000000..4df6ff72d
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/SSLPullClient.cs
@@ -0,0 +1,144 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HPSocketCS
+{
+ public class SSLPullClientEvent
+ {
+
+ public delegate HandleResult OnReceiveEventHandler(SSLPullClient sender, int length);
+ }
+
+ public class SSLPullClient : SSLClient
+ {
+ ///
+ /// 鏁版嵁鍒拌揪浜嬩欢
+ ///
+ public new event SSLPullClientEvent.OnReceiveEventHandler OnReceive;
+
+ public SSLPullClient()
+ : base()
+ {
+
+ }
+ ///
+ ///
+ ///
+ /// 楠岃瘉妯″紡
+ /// 璇佷功鏂囦欢锛堝鎴风鍙夛級
+ /// 绉侀挜鏂囦欢锛堝鎴风鍙夛級
+ /// 绉侀挜瀵嗙爜锛堟病鏈夊瘑鐮佸垯涓虹┖锛
+ /// CA 璇佷功鏂囦欢鎴栫洰褰曪紙鍗曞悜楠岃瘉鎴栧鎴风鍙夛級
+ public SSLPullClient(SSLVerifyMode _verifyModel, string _pemCertFile, string _pemKeyFile, string _keyPasswod, string _caPemCertFileOrPath)
+ : base(_verifyModel, _pemCertFile, _pemKeyFile, _keyPasswod, _caPemCertFileOrPath)
+ {
+
+ }
+
+ ~SSLPullClient()
+ {
+ Destroy();
+ }
+
+ ///
+ /// 鍒涘缓socket鐩戝惉&鏈嶅姟缁勪欢
+ ///
+ ///
+ protected override bool CreateListener()
+ {
+ if (IsCreate == true || pListener != IntPtr.Zero || pClient != IntPtr.Zero)
+ {
+ return false;
+ }
+
+ pListener = Sdk.Create_HP_TcpPullClientListener();
+ if (pListener == IntPtr.Zero)
+ {
+ return false;
+ }
+
+ pClient = SSLSdk.Create_HP_SSLPullClient(pListener);
+ if (pClient == IntPtr.Zero)
+ {
+ return false;
+ }
+
+ IsCreate = true;
+
+ return true;
+ }
+
+
+ ///
+ /// 鎶撳彇鏁版嵁
+ /// 鐢ㄦ埛閫氳繃璇ユ柟娉曚粠 Socket 缁勪欢涓姄鍙栨暟鎹
+ ///
+ ///
+ ///
+ ///
+ ///
+ public FetchResult Fetch(IntPtr pBuffer, int size)
+ {
+ return Sdk.HP_TcpPullClient_Fetch(pClient, pBuffer, size);
+ }
+
+ ///
+ /// 鎶撳彇鏁版嵁
+ /// 鐢ㄦ埛閫氳繃璇ユ柟娉曚粠 Socket 缁勪欢涓姄鍙栨暟鎹
+ ///
+ ///
+ ///
+ ///
+ ///
+ public FetchResult Peek(IntPtr pBuffer, int size)
+ {
+ return Sdk.HP_TcpPullClient_Peek(pClient, pBuffer, size);
+ }
+
+ Sdk.OnPullReceive _OnReceive = null;
+
+ ///
+ /// 璁剧疆鍥炶皟鍑芥暟
+ ///
+ protected override void SetCallback()
+ {
+ _OnReceive = new Sdk.OnPullReceive(SDK_OnReceive);
+ Sdk.HP_Set_FN_Client_OnPullReceive(pListener, _OnReceive);
+ base.SetCallback();
+ }
+
+
+ protected HandleResult SDK_OnReceive(IntPtr pClient, int length)
+ {
+ if (OnReceive != null)
+ {
+ return OnReceive(this, length);
+ }
+
+ return HandleResult.Ignore;
+ }
+
+ ///
+ /// 缁堟鏈嶅姟骞堕噴鏀捐祫婧
+ ///
+ public override void Destroy()
+ {
+ Stop();
+
+ if (pClient != IntPtr.Zero)
+ {
+ SSLSdk.Destroy_HP_SSLPullClient(pClient);
+ pClient = IntPtr.Zero;
+ }
+ if (pListener != IntPtr.Zero)
+ {
+ Sdk.Destroy_HP_TcpPullClientListener(pListener);
+ pListener = IntPtr.Zero;
+ }
+
+ IsCreate = false;
+ }
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/SSLPullServer.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/SSLPullServer.cs
new file mode 100644
index 000000000..dd0983069
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/SSLPullServer.cs
@@ -0,0 +1,134 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Runtime.InteropServices;
+
+namespace HPSocketCS
+{
+ public class SSLPullServerEvent
+ {
+ public delegate HandleResult OnReceiveEventHandler(IntPtr connId, int length);
+ }
+
+ public class SSLPullServer : SSLServer
+ {
+
+ ///
+ /// 鏁版嵁鍒拌揪浜嬩欢
+ ///
+ public new event SSLPullServerEvent.OnReceiveEventHandler OnReceive;
+
+ public SSLPullServer()
+ : base()
+ {
+
+ }
+ ///
+ ///
+ ///
+ /// 楠岃瘉妯″紡
+ /// 璇佷功鏂囦欢锛堝鎴风鍙夛級
+ /// 绉侀挜鏂囦欢锛堝鎴风鍙夛級
+ /// 绉侀挜瀵嗙爜锛堟病鏈夊瘑鐮佸垯涓虹┖锛
+ /// CA 璇佷功鏂囦欢鎴栫洰褰曪紙鍗曞悜楠岃瘉鎴栧鎴风鍙夛級
+ public SSLPullServer(SSLVerifyMode _verifyModel, string _pemCertFile, string _pemKeyFile, string _keyPasswod, string _caPemCertFileOrPath)
+ : base(_verifyModel, _pemCertFile, _pemKeyFile, _keyPasswod, _caPemCertFileOrPath)
+ {
+
+ }
+
+ ///
+ /// 鍒涘缓socket鐩戝惉&鏈嶅姟缁勪欢
+ ///
+ ///
+ protected override bool CreateListener()
+ {
+ if (IsCreate == true || pListener != IntPtr.Zero || pServer != IntPtr.Zero)
+ {
+ return false;
+ }
+
+ pListener = Sdk.Create_HP_TcpPullServerListener();
+ if (pListener == IntPtr.Zero)
+ {
+ return false;
+ }
+
+ pServer = SSLSdk.Create_HP_SSLPullServer(pListener);
+ if (pServer == IntPtr.Zero)
+ {
+ return false;
+ }
+
+ IsCreate = true;
+
+ return true;
+ }
+
+ Sdk.OnPullReceive _OnReceive = null;
+
+ protected override void SetCallback()
+ {
+ _OnReceive = new Sdk.OnPullReceive(SDK_OnReceive);
+ Sdk.HP_Set_FN_Server_OnPullReceive(pListener, _OnReceive);
+ base.SetCallback();
+ }
+
+ protected HandleResult SDK_OnReceive(IntPtr connId, int length)
+ {
+ if (OnReceive != null)
+ {
+ return OnReceive(connId, length);
+ }
+ return HandleResult.Ignore;
+ }
+
+ ///
+ /// 鎶撳彇鏁版嵁
+ /// 鐢ㄦ埛閫氳繃璇ユ柟娉曚粠 Socket 缁勪欢涓姄鍙栨暟鎹
+ ///
+ ///
+ ///
+ ///
+ ///
+ public FetchResult Fetch(IntPtr connId, IntPtr pBuffer, int size)
+ {
+ return Sdk.HP_TcpPullServer_Fetch(pServer, connId, pBuffer, size);
+ }
+
+ ///
+ /// 鎶撳彇鏁版嵁
+ /// 鐢ㄦ埛閫氳繃璇ユ柟娉曚粠 Socket 缁勪欢涓姄鍙栨暟鎹
+ ///
+ ///
+ ///
+ ///
+ ///
+ public FetchResult Peek(IntPtr connId, IntPtr pBuffer, int size)
+ {
+ return Sdk.HP_TcpPullServer_Peek(pServer, connId, pBuffer, size);
+ }
+
+
+ ///
+ /// 缁堟鏈嶅姟骞堕噴鏀捐祫婧
+ ///
+ public override void Destroy()
+ {
+ Stop();
+
+ if (pServer != IntPtr.Zero)
+ {
+ SSLSdk.Destroy_HP_SSLPullServer(pServer);
+ pServer = IntPtr.Zero;
+ }
+ if (pListener != IntPtr.Zero)
+ {
+ Sdk.Destroy_HP_TcpPullServerListener(pListener);
+ pListener = IntPtr.Zero;
+ }
+ IsCreate = false;
+ }
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/SSLSdk.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/SSLSdk.cs
new file mode 100644
index 000000000..32ee96e07
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/SSLSdk.cs
@@ -0,0 +1,265 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Runtime.InteropServices;
+
+namespace HPSocketCS
+{
+ ///
+ /// SSL 宸ヤ綔妯″紡
+ /// 鎻忚堪锛氭爣璇 SSL 鐨勫伐浣滄ā寮忥紝瀹㈡埛绔ā寮忔垨鏈嶅姟绔ā寮
+ ///
+ public enum SSLSessionMode
+ {
+ ///
+ /// 瀹㈡埛绔ā寮
+ ///
+ Client = 0,
+ ///
+ /// 鏈嶅姟绔ā寮
+ ///
+ Server = 1,
+ }
+
+ ///
+ /// 鍚嶇О锛歋SL 楠岃瘉妯″紡
+ /// 鎻忚堪锛歋SL 楠岃瘉妯″紡閫夐」锛孲SL_VM_PEER 鍙互鍜屽悗闈袱涓夐」缁勫悎涓璧
+ ///
+ public enum SSLVerifyMode
+ {
+ ///
+ /// SSL_VERIFY_NONE
+ ///
+ None = 0x00,
+ ///
+ /// SSL_VERIFY_PEER
+ ///
+ Peer = 0x01,
+ ///
+ /// SSL_VERIFY_FAIL_IF_NO_PEER_CERT
+ ///
+ FailIfNoPeerCert = 0x02,
+ ///
+ /// SSL_VERIFY_CLIENT_ONCE
+ ///
+ ClientOnce = 0x04,
+ }
+
+
+ ///
+ /// SSL浜嬩欢
+ ///
+ public class SSLEvent
+ {
+ public delegate HandleResult OnHandShakeEventHandler(IntPtr connId);
+ }
+
+ ///
+ /// Unicode鐗堟湰
+ ///
+ public class SSLSdk
+ {
+ ///
+ /// HPSocket鐨勬枃浠惰矾寰
+ ///
+#if DEBUG
+ private const string HPSOCKET_SSL_DLL_PATH = "HPSocket4C-SSL_UD.dll";
+#else
+ private const string HPSOCKET_SSL_DLL_PATH = "HPSocket4C-SSL_U.dll";
+#endif
+
+ /**************** HPSocket4C-SSL 瀵煎嚭鍑芥暟 ****************/
+ ///
+ /// 鍒涘缓 HP_SSLServer 瀵硅薄
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_SSL_DLL_PATH)]
+ public static extern IntPtr Create_HP_SSLServer(IntPtr pListener);
+
+ ///
+ /// 鍒涘缓 HP_SSLAgent 瀵硅薄
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_SSL_DLL_PATH)]
+ public static extern IntPtr Create_HP_SSLAgent(IntPtr pListener);
+
+ ///
+ /// 鍒涘缓 HP_SSLClient 瀵硅薄
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_SSL_DLL_PATH)]
+ public static extern IntPtr Create_HP_SSLClient(IntPtr pListener);
+
+ ///
+ /// 鍒涘缓 HP_SSLPullServer 瀵硅薄
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_SSL_DLL_PATH)]
+ public static extern IntPtr Create_HP_SSLPullServer(IntPtr pListener);
+
+ ///
+ /// 鍒涘缓 HP_SSLPullAgent 瀵硅薄
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_SSL_DLL_PATH)]
+ public static extern IntPtr Create_HP_SSLPullAgent(IntPtr pListener);
+
+ ///
+ /// 鍒涘缓 HP_SSLPullClient 瀵硅薄
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_SSL_DLL_PATH)]
+ public static extern IntPtr Create_HP_SSLPullClient(IntPtr pListener);
+
+ ///
+ /// 鍒涘缓 HP_SSLPackServer 瀵硅薄
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_SSL_DLL_PATH)]
+ public static extern IntPtr Create_HP_SSLPackServer(IntPtr pListener);
+
+ ///
+ /// 鍒涘缓 HP_SSLPackAgent 瀵硅薄
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_SSL_DLL_PATH)]
+ public static extern IntPtr Create_HP_SSLPackAgent(IntPtr pListener);
+
+ ///
+ /// 鍒涘缓 HP_SSLPackClient 瀵硅薄
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_SSL_DLL_PATH)]
+ public static extern IntPtr Create_HP_SSLPackClient(IntPtr pListener);
+
+
+
+ ///
+ /// 閿姣 HP_SSLServer 瀵硅薄
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_SSL_DLL_PATH)]
+ public static extern void Destroy_HP_SSLServer(IntPtr pObj);
+
+ ///
+ /// 閿姣 HP_SSLAgent 瀵硅薄
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_SSL_DLL_PATH)]
+ public static extern void Destroy_HP_SSLAgent(IntPtr pObj);
+
+ ///
+ /// 閿姣 HP_SSLClient 瀵硅薄
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_SSL_DLL_PATH)]
+ public static extern void Destroy_HP_SSLClient(IntPtr pObj);
+
+ ///
+ /// 閿姣 HP_SSLPullServer 瀵硅薄
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_SSL_DLL_PATH)]
+ public static extern void Destroy_HP_SSLPullServer(IntPtr pObj);
+
+ ///
+ /// 閿姣 HP_SSLPullAgent 瀵硅薄
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_SSL_DLL_PATH)]
+ public static extern void Destroy_HP_SSLPullAgent(IntPtr pObj);
+
+ ///
+ /// 閿姣 HP_SSLPullClient 瀵硅薄
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_SSL_DLL_PATH)]
+ public static extern void Destroy_HP_SSLPullClient(IntPtr pObj);
+
+ ///
+ /// 閿姣 HP_SSLPackServer 瀵硅薄
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_SSL_DLL_PATH)]
+ public static extern void Destroy_HP_SSLPackServer(IntPtr pObj);
+
+ ///
+ /// 閿姣 HP_SSLPackAgent 瀵硅薄
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_SSL_DLL_PATH)]
+ public static extern void Destroy_HP_SSLPackAgent(IntPtr pObj);
+
+ ///
+ /// 閿姣 HP_SSLPackClient 瀵硅薄
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_SSL_DLL_PATH)]
+ public static extern void Destroy_HP_SSLPackClient(IntPtr pObj);
+
+ /************************ SSL 鍒濆鍖栨柟娉 ****************************/
+ ///
+ /// 鍚嶇О锛氬垵濮嬪寲 SSL 鍏ㄥ眬鐜鍙傛暟
+ /// 鎻忚堪锛歋SL 鍏ㄥ眬鐜鍙傛暟蹇呴』鍦 SSL 閫氫俊缁勪欢鍚姩鍓嶅畬鎴愬垵濮嬪寲锛屽惁鍒欏惎鍔ㄥけ璐
+ ///
+ /// SSL 宸ヤ綔妯″紡
+ /// SSL 楠岃瘉妯″紡
+ /// 璇佷功鏂囦欢锛堝鎴风鍙夛級
+ /// 绉侀挜鏂囦欢锛堝鎴风鍙夛級
+ /// 绉侀挜瀵嗙爜锛堟病鏈夊瘑鐮佸垯涓虹┖锛
+ /// CA 璇佷功鏂囦欢鎴栫洰褰曪紙鍗曞悜楠岃瘉鎴栧鎴风鍙夛級
+ ///
+ [DllImport(HPSOCKET_SSL_DLL_PATH, CharSet = CharSet.Unicode, SetLastError = true)]
+ public static extern bool HP_SSL_Initialize(SSLSessionMode sessionMode, SSLVerifyMode verifyMode, string lpszPemCertFile, string lpszPemKeyFile, string lpszKeyPasswod, string lpszCAPemCertFileOrPath);
+ /*
+ * public static extern bool HP_SSL_Initialize(SSLSessionMode sessionMode, SSLVerifyMode verifyMode, [MarshalAs(UnmanagedType.LPWStr)] StringBuilder lpszPemCertFile, [MarshalAs(UnmanagedType.LPWStr)] StringBuilder lpszPemKeyFile, [MarshalAs(UnmanagedType.LPWStr)] StringBuilder lpszKeyPasswod, [MarshalAs(UnmanagedType.LPWStr)] StringBuilder lpszCAPemCertFileOrPath);
+ */
+
+ ///
+ /// 娓呯悊 SSL 鍏ㄥ眬杩愯鐜
+ /// 鎻忚堪锛氭竻鐞 SSL 鍏ㄥ眬杩愯鐜锛屽洖鏀 SSL 鐩稿叧鍐呭瓨
+ /// 1銆佸簲鐢ㄧ▼搴忛鍑烘椂浼氳嚜鍔ㄨ皟鐢ㄨ皟鐢ㄦ湰鏂规硶
+ /// 2銆佸綋瑕侀噸鏂拌缃 SSL 鍏ㄥ眬鐜鍙傛暟鏃讹紝闇瑕佸厛璋冪敤鏈柟娉曟竻鐞嗗師鍏堢殑鐜鍙傛暟
+ ///
+ [DllImport(HPSOCKET_SSL_DLL_PATH)]
+ public static extern void HP_SSL_Cleanup();
+
+
+ ///
+ /// 娓呯悊绾跨▼灞閮ㄧ幆澧 SSL 璧勬簮
+ /// 鎻忚堪锛氭竻鐞 SSL 鍏ㄥ眬杩愯鐜锛屽洖鏀 SSL 鐩稿叧鍐呭瓨
+ /// 浠讳綍涓涓搷浣 SSL 鐨勭嚎绋嬶紝閫氫俊缁撴潫鏃堕兘闇瑕佹竻鐞嗙嚎绋嬪眬閮ㄧ幆澧 SSL 璧勬簮
+ /// 1銆佷富绾跨▼鍜 HP-Socket 宸ヤ綔绾跨▼鍦ㄩ氫俊缁撴潫鏃朵細鑷姩娓呯悊绾跨▼灞閮ㄧ幆澧 SSL 璧勬簮銆傚洜姝わ紝涓鑸儏鍐典笅涓嶅繀鎵嬪伐璋冪敤鏈柟娉
+ /// 2銆佺壒娈婃儏鍐典笅锛屽綋鑷畾涔夌嚎绋嬪弬涓 HP-Socket 閫氫俊鎿嶄綔骞舵鏌ュ埌 SSL 鍐呭瓨娉勬紡鏃讹紝闇鍦ㄦ瘡娆¢氫俊缁撴潫鏃惰嚜瀹氫箟绾跨▼璋冪敤鏈柟娉
+ ///
+ [DllImport(HPSOCKET_SSL_DLL_PATH)]
+ public static extern void HP_SSL_RemoveThreadLocalState();
+
+ ///
+ /// 妫鏌 SSL 鍏ㄥ眬杩愯鐜鏄惁鍒濆鍖栧畬鎴
+ ///
+ ///
+ [DllImport(HPSOCKET_SSL_DLL_PATH)]
+ public static extern bool HP_SSL_IsValid();
+
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/SSLServer.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/SSLServer.cs
new file mode 100644
index 000000000..9715a7182
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/SSLServer.cs
@@ -0,0 +1,189 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading;
+
+namespace HPSocketCS
+{
+
+ public class SSLServer : TcpServer
+ {
+ static int ObjectReferer = 0;
+ static string SSLInitLock = "SSL鍒濆鍖栭攣";
+ Sdk.OnHandShake _OnHandShake = null;
+
+ ///
+ /// 楠岃瘉妯″紡
+ ///
+ public SSLVerifyMode VerifyMode { get; set; }
+ ///
+ /// 璇佷功鏂囦欢锛堝鎴风鍙夛級
+ ///
+ public string PemCertFile { get; set; }
+ ///
+ /// 绉侀挜鏂囦欢锛堝鎴风鍙夛級
+ ///
+ public string PemKeyFile { get; set; }
+ ///
+ /// 绉侀挜瀵嗙爜锛堟病鏈夊瘑鐮佸垯涓虹┖锛
+ ///
+ public string KeyPasswod { get; set; }
+ ///
+ /// CA 璇佷功鏂囦欢鎴栫洰褰曪紙鍗曞悜楠岃瘉鎴栧鎴风鍙夛級
+ ///
+ public string CAPemCertFileOrPath { get; set; }
+
+
+ ///
+ /// SSL鎻℃墜鎴愬姛浜嬩欢
+ ///
+ public event SSLEvent.OnHandShakeEventHandler OnHandShake;
+
+ public SSLServer()
+ {
+ Interlocked.Increment(ref ObjectReferer);
+ }
+
+ ///
+ ///
+ ///
+ /// 楠岃瘉妯″紡
+ /// 璇佷功鏂囦欢
+ /// 绉侀挜鏂囦欢
+ /// 绉侀挜瀵嗙爜锛堟病鏈夊瘑鐮佸垯涓虹┖锛
+ /// CA 璇佷功鏂囦欢鎴栫洰褰曪紙鍗曞悜楠岃瘉鎴栧鎴风鍙夛級
+ public SSLServer(SSLVerifyMode _verifyModel, string _pemCertFile, string _pemKeyFile, string _keyPasswod, string _caPemCertFileOrPath)
+ {
+ Interlocked.Increment(ref ObjectReferer);
+ this.VerifyMode = _verifyModel;
+ this.PemCertFile = _pemCertFile;
+ this.PemKeyFile = _pemKeyFile;
+ this.KeyPasswod = _keyPasswod;
+ this.CAPemCertFileOrPath = _caPemCertFileOrPath;
+ Initialize();
+ }
+
+ ~SSLServer()
+ {
+ Uninitialize();
+ }
+
+ protected override bool CreateListener()
+ {
+ if (IsCreate == true || pListener != IntPtr.Zero || pServer != IntPtr.Zero)
+ {
+ return false;
+ }
+
+ pListener = Sdk.Create_HP_TcpServerListener();
+ if (pListener == IntPtr.Zero)
+ {
+ return false;
+ }
+ pServer = SSLSdk.Create_HP_SSLServer(pListener);
+ if (pServer == IntPtr.Zero)
+ {
+ return false;
+ }
+
+ IsCreate = true;
+
+ return true;
+ }
+
+ protected override void SetCallback()
+ {
+ _OnHandShake = new Sdk.OnHandShake(SDK_OnHandShake);
+ Sdk.HP_Set_FN_Server_OnHandShake(pListener, _OnHandShake);
+ base.SetCallback();
+ }
+
+ ///
+ /// 鍒濆鍖朣SL鐜
+ ///
+ ///
+ protected virtual bool Initialize()
+ {
+ lock (SSLInitLock)
+ {
+ if (SSLSdk.HP_SSL_IsValid() == false)
+ {
+ if (string.IsNullOrWhiteSpace(PemCertFile))
+ {
+ throw new NullReferenceException("PemCertFile");
+ }
+
+ if (string.IsNullOrWhiteSpace(PemKeyFile))
+ {
+ throw new NullReferenceException("PemKeyFile");
+ }
+
+ if (string.IsNullOrWhiteSpace(KeyPasswod))
+ {
+ throw new NullReferenceException("KeyPasswod");
+ }
+
+ if (string.IsNullOrWhiteSpace(CAPemCertFileOrPath))
+ {
+ throw new NullReferenceException("CAPemCertFileOrPath");
+ }
+
+ return SSLSdk.HP_SSL_Initialize(SSLSessionMode.Server, VerifyMode, PemCertFile, PemKeyFile, KeyPasswod, CAPemCertFileOrPath);
+
+ }
+
+ return true;
+ }
+ }
+
+ ///
+ /// 鍙嶅垵濮嬪寲SSL鐜
+ ///
+ protected virtual void Uninitialize()
+ {
+ if (Interlocked.Decrement(ref ObjectReferer) == 0)
+ {
+ SSLSdk.HP_SSL_Cleanup();
+ }
+ }
+
+ public new bool Start()
+ {
+ bool ret = false;
+ if (Initialize())
+ {
+ ret = base.Start();
+ }
+
+ return ret;
+ }
+
+ public override void Destroy()
+ {
+ Stop();
+
+ if (pServer != IntPtr.Zero)
+ {
+ SSLSdk.Destroy_HP_SSLServer(pServer);
+ pServer = IntPtr.Zero;
+ }
+ if (pListener != IntPtr.Zero)
+ {
+ Sdk.Destroy_HP_TcpServerListener(pListener);
+ pListener = IntPtr.Zero;
+ }
+
+ IsCreate = false;
+ }
+
+ protected HandleResult SDK_OnHandShake(IntPtr connId)
+ {
+ if (OnHandShake != null)
+ {
+ return OnHandShake(connId);
+ }
+ return HandleResult.Ignore;
+ }
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/Sdk.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/Sdk.cs
new file mode 100644
index 000000000..a689e5584
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/Sdk.cs
@@ -0,0 +1,2276 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Runtime.InteropServices;
+using HPSocketCS;
+
+
+namespace HPSocketCS
+{
+
+ ///
+ /// 閫氫俊缁勪欢鏈嶅姟鐘舵,鐢ㄧ▼搴忓彲浠ラ氳繃閫氫俊缁勪欢鐨 GetState() 鏂规硶鑾峰彇缁勪欢褰撳墠鏈嶅姟鐘舵
+ ///
+ public enum ServiceState
+ {
+ ///
+ /// 姝e湪鍚姩
+ ///
+ Starting = 0,
+ ///
+ /// 宸茬粡鍚姩
+ ///
+ Started = 1,
+ ///
+ /// 姝e湪鍋滄
+ ///
+ Stoping = 2,
+ ///
+ /// 宸茬粡鍚姩
+ ///
+ Stoped = 3,
+ }
+
+ ///
+ /// Socket 鎿嶄綔绫诲瀷,搴旂敤绋嬪簭鐨 OnErrror() 浜嬩欢涓氳繃璇ュ弬鏁版爣璇嗘槸鍝鎿嶄綔瀵艰嚧鐨勯敊璇
+ ///
+ public enum SocketOperation
+ {
+ Unknown = 0, // Unknown
+ Acccept = 1, // Acccept
+ Connnect = 2, // Connnect
+ Send = 3, // Send
+ Receive = 4, // Receive
+ Close = 5, // Receive
+ };
+
+ ///
+ /// 浜嬩欢閫氱煡澶勭悊缁撴灉,浜嬩欢閫氱煡鐨勮繑鍥炲硷紝涓嶅悓鐨勮繑鍥炲间細褰卞搷閫氫俊缁勪欢鐨勫悗缁涓
+ ///
+ public enum HandleResult
+ {
+ ///
+ /// 鎴愬姛
+ ///
+ Ok = 0,
+ ///
+ /// 蹇界暐
+ ///
+ Ignore = 1,
+ ///
+ /// 閿欒
+ ///
+ Error = 2,
+ };
+
+
+ ///
+ /// 鍚嶇О锛氭搷浣滅粨鏋滀唬鐮
+ /// 鎻忚堪锛氱粍浠 Start() / Stop() 鏂规硶鎵ц澶辫触鏃讹紝鍙氳繃 GetLastError() 鑾峰彇閿欒浠g爜
+ ///
+ public enum SocketError
+ {
+ ///
+ /// 鎴愬姛
+ ///
+ Ok = 0,
+ ///
+ /// 褰撳墠鐘舵佷笉鍏佽鎿嶄綔
+ ///
+ IllegalState = 1,
+ ///
+ /// 闈炴硶鍙傛暟
+ ///
+ InvalidParam = 2,
+ ///
+ /// 鍒涘缓 SOCKET 澶辫触
+ ///
+ SocketCreate = 3,
+ ///
+ /// 缁戝畾 SOCKET 澶辫触
+ ///
+ SocketBind = 4,
+ ///
+ /// 璁剧疆 SOCKET 澶辫触
+ ///
+ SocketPrepare = 5,
+ ///
+ /// 鐩戝惉 SOCKET 澶辫触
+ ///
+ SocketListen = 6,
+ ///
+ /// 鍒涘缓瀹屾垚绔彛澶辫触
+ ///
+ CPCreate = 7,
+ ///
+ /// 鍒涘缓宸ヤ綔绾跨▼澶辫触
+ ///
+ WorkerThreadCreate = 8,
+ ///
+ /// 鍒涘缓鐩戞祴绾跨▼澶辫触
+ ///
+ DetectThreadCreate = 9,
+ ///
+ /// 缁戝畾瀹屾垚绔彛澶辫触
+ ///
+ SocketAttachToCP = 10,
+ ///
+ /// 杩炴帴鏈嶅姟鍣ㄥけ璐
+ ///
+ ConnectServer = 11,
+ ///
+ /// 缃戠粶閿欒
+ ///
+ Network = 12,
+ ///
+ /// 鏁版嵁澶勭悊閿欒
+ ///
+ DataProc = 13,
+ ///
+ /// 鏁版嵁鍙戦佸け璐
+ ///
+ DataSend = 14,
+
+ /***** SSL Socket 鎵╁睍鎿嶄綔缁撴灉浠g爜 *****/
+ ///
+ /// SSL 鐜鏈氨缁
+ ///
+ SSLEnvNotReady = 101,
+ };
+
+ ///
+ /// 鏁版嵁鎶撳彇缁撴灉,鏁版嵁鎶撳彇鎿嶄綔鐨勮繑鍥炲
+ ///
+ public enum FetchResult
+ {
+ ///
+ /// 鎴愬姛
+ ///
+ Ok = 0,
+ ///
+ /// 鎶撳彇闀垮害杩囧ぇ
+ ///
+ LengthTooLong = 1,
+ ///
+ /// 鎵句笉鍒 ConnID 瀵瑰簲鐨勬暟鎹
+ ///
+ DataNotFound = 2,
+ };
+
+ ///
+ /// 鍙戦佺瓥鐣
+ ///
+ public enum SendPolicy
+ {
+ ///
+ /// 鎵撳寘妯″紡锛堥粯璁わ級
+ ///
+ Pack = 0,
+ ///
+ /// 瀹夊叏妯″紡
+ ///
+ Safe = 1,
+ ///
+ /// 鐩存帴妯″紡
+ ///
+ Direct = 2,
+ };
+
+ ///
+ /// 鎾佹ā寮 UDP 缁勪欢鐨勬挱閫佹ā寮忥紙缁勬挱鎴栧箍鎾級
+ ///
+ public enum CastMode
+ {
+ ///
+ /// 缁勬挱
+ ///
+ Multicast = 0,
+ ///
+ /// 骞挎挱
+ ///
+ Broadcast = 1,
+
+ }
+
+ /****************************************************/
+ /************** sockaddr缁撴瀯浣,udp鏈嶅姟鍣ㄦ椂OnAccept鏈鍚庝釜鍙傛暟鍙浆鍖 **************/
+ [StructLayout(LayoutKind.Sequential)]
+ public struct in_addr
+ {
+ public ulong S_addr;
+ }
+
+ //[StructLayout(LayoutKind.Sequential)]
+ //public struct in_addr
+ //{
+ // public byte s_b1, s_b2, s_b3, s_b4;
+ //}
+
+ [StructLayout(LayoutKind.Sequential)]
+ public struct sockaddr_in
+ {
+ public short sin_family;
+ public ushort sin_port;
+ public in_addr sin_addr;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
+ public byte[] sLibNamesin_zero;
+ }
+
+ /****************************************************/
+
+ [StructLayout(LayoutKind.Sequential)]
+ public struct WSABUF
+ {
+ public int Length;
+ public IntPtr Buffer;
+ }
+}
+
+
+
+///
+/// Unicode鐗堟湰
+///
+public class Sdk
+{
+ ///
+ /// HPSocket鐨勬枃浠惰矾寰
+ ///
+#if DEBUG
+ private const string HPSOCKET_DLL_PATH = "HPSocket4C_UD.dll";
+#else
+ private const string HPSOCKET_DLL_PATH = "HPSocket4C_U.dll";
+#endif
+ /*****************************************************************************************************/
+ /******************************************** 鍏叡绫汇佹帴鍙 ********************************************/
+ /*****************************************************************************************************/
+
+
+
+ /****************************************************/
+ /************** HPSocket4C.dll 鍥炶皟鍑芥暟 **************/
+ /* Agent & Server & Clent */
+ public delegate HandleResult OnSend(IntPtr connId, IntPtr pData, int length);
+ public delegate HandleResult OnReceive(IntPtr connId, IntPtr pData, int length);
+ public delegate HandleResult OnPullReceive(IntPtr connId, int length);
+ public delegate HandleResult OnClose(IntPtr connId, SocketOperation enOperation, int errorCode);
+
+ /* Agent & Server */
+ public delegate HandleResult OnShutdown();
+
+ /* Agent & Client */
+ public delegate HandleResult OnPrepareConnect(IntPtr connId /* IntPtr pClient */, uint socket);
+ public delegate HandleResult OnConnect(IntPtr connId /* IntPtr pClient */);
+
+ /* Server */
+ public delegate HandleResult OnPrepareListen(IntPtr soListen);
+ public delegate HandleResult OnAccept(IntPtr connId, IntPtr pClient);
+
+ /* SSL */
+ public delegate HandleResult OnHandShake(IntPtr connId);
+
+ /****************************************************/
+ /************** HPSocket4C.dll 瀵煎嚭鍑芥暟 **************/
+
+ ///
+ /// 鍒涘缓 TcpServer 瀵硅薄
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern IntPtr Create_HP_TcpServer(IntPtr pListener);
+
+ ///
+ /// 鍒涘缓 TcpClient 瀵硅薄
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern IntPtr Create_HP_TcpClient(IntPtr pListener);
+
+ ///
+ /// 鍒涘缓 TcpAgent 瀵硅薄
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern IntPtr Create_HP_TcpAgent(IntPtr pListener);
+
+ ///
+ /// 鍒涘缓 TcpPullServer 瀵硅薄
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern IntPtr Create_HP_TcpPullServer(IntPtr pListener);
+
+ ///
+ /// 鍒涘缓 TcpPullClient 瀵硅薄
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern IntPtr Create_HP_TcpPullClient(IntPtr pListener);
+
+ ///
+ /// 鍒涘缓 TcpPullAgent 瀵硅薄
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern IntPtr Create_HP_TcpPullAgent(IntPtr pListener);
+
+ ///
+ /// 鍒涘缓 HP_TcpPackServer 瀵硅薄
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern IntPtr Create_HP_TcpPackServer(IntPtr pListener);
+
+ ///
+ /// 鍒涘缓 HP_TcpPackAgent 瀵硅薄
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern IntPtr Create_HP_TcpPackAgent(IntPtr pListener);
+
+ ///
+ /// 鍒涘缓 HP_TcpPackAgent 瀵硅薄
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern IntPtr Create_HP_TcpPackClient(IntPtr pListener);
+
+ ///
+ /// 鍒涘缓 UdpServer 瀵硅薄
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern IntPtr Create_HP_UdpServer(IntPtr pListener);
+
+ ///
+ /// 鍒涘缓 UdpClient 瀵硅薄
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern IntPtr Create_HP_UdpClient(IntPtr pListener);
+
+
+ ///
+ /// 閿姣 TcpServer 瀵硅薄
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void Destroy_HP_TcpServer(IntPtr pServer);
+
+ ///
+ /// 閿姣 TcpClient 瀵硅薄
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void Destroy_HP_TcpClient(IntPtr pClient);
+
+ ///
+ /// 閿姣 TcpAgent 瀵硅薄
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void Destroy_HP_TcpAgent(IntPtr pAgent);
+
+ ///
+ /// 閿姣 TcpPullServer 瀵硅薄
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void Destroy_HP_TcpPullServer(IntPtr pServer);
+
+ ///
+ /// 閿姣 TcpPullClient 瀵硅薄
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void Destroy_HP_TcpPullClient(IntPtr pClient);
+
+ ///
+ /// 閿姣 TcpPullAgent 瀵硅薄
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void Destroy_HP_TcpPullAgent(IntPtr pAgent);
+
+ ///
+ /// 閿姣 HP_TcpPackServer 瀵硅薄
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void Destroy_HP_TcpPackServer(IntPtr pServer);
+
+ ///
+ /// 閿姣 HP_TcpPackAgent 瀵硅薄
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void Destroy_HP_TcpPackAgent(IntPtr pAgent);
+
+ ///
+ /// 閿姣 HP_TcpPackClient 瀵硅薄
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void Destroy_HP_TcpPackClient(IntPtr pClient);
+
+
+ ///
+ /// 閿姣 UdpServer 瀵硅薄
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void Destroy_HP_UdpServer(IntPtr pServer);
+
+ ///
+ /// 閿姣 UdpClient 瀵硅薄
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void Destroy_HP_UdpClient(IntPtr pClient);
+
+
+ ///
+ /// 鍒涘缓 TcpServerListener 瀵硅薄
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern IntPtr Create_HP_TcpServerListener();
+
+ ///
+ /// 鍒涘缓 TcpClientListener 瀵硅薄
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern IntPtr Create_HP_TcpClientListener();
+
+ ///
+ /// 鍒涘缓 TcpAgentListener 瀵硅薄
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern IntPtr Create_HP_TcpAgentListener();
+
+ ///
+ /// 鍒涘缓 TcpPullServerListener 瀵硅薄
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern IntPtr Create_HP_TcpPullServerListener();
+
+ ///
+ /// 鍒涘缓 TcpPullClientListener 瀵硅薄
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern IntPtr Create_HP_TcpPullClientListener();
+
+ ///
+ /// 鍒涘缓 TcpPullAgentListener 瀵硅薄
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern IntPtr Create_HP_TcpPullAgentListener();
+
+ ///
+ /// 鍒涘缓 UdpServerListener 瀵硅薄
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern IntPtr Create_HP_UdpServerListener();
+
+ ///
+ /// 鍒涘缓 UdpClientListener 瀵硅薄
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern IntPtr Create_HP_UdpClientListener();
+
+
+ ///
+ /// 閿姣 TcpServerListener 瀵硅薄
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void Destroy_HP_TcpServerListener(IntPtr pListener);
+
+ ///
+ /// 閿姣 TcpClientListener 瀵硅薄
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void Destroy_HP_TcpClientListener(IntPtr pListener);
+
+ ///
+ /// 閿姣 TcpAgentListener 瀵硅薄
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void Destroy_HP_TcpAgentListener(IntPtr pListener);
+
+
+ ///
+ /// 閿姣 TcpPullServerListener 瀵硅薄
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void Destroy_HP_TcpPullServerListener(IntPtr pListener);
+
+ ///
+ /// 閿姣 TcpPullClientListener 瀵硅薄
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void Destroy_HP_TcpPullClientListener(IntPtr pListener);
+
+ ///
+ /// 閿姣 TcpPullAgentListener 瀵硅薄
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void Destroy_HP_TcpPullAgentListener(IntPtr pListener);
+
+ ///
+ /// 閿姣 UdpServerListener 瀵硅薄
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void Destroy_HP_UdpServerListener(IntPtr pListener);
+
+ ///
+ /// 閿姣 UdpClientListener 瀵硅薄
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void Destroy_HP_UdpClientListener(IntPtr pListener);
+
+
+ /**********************************************************************************/
+ /***************************** Server 鍥炶皟鍑芥暟璁剧疆鏂规硶 *****************************/
+
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void HP_Set_FN_Server_OnPrepareListen(IntPtr pListener, OnPrepareListen fn);
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void HP_Set_FN_Server_OnAccept(IntPtr pListener, OnAccept fn);
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void HP_Set_FN_Server_OnHandShake(IntPtr pListener, OnHandShake fn);
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void HP_Set_FN_Server_OnSend(IntPtr pListener, OnSend fn);
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void HP_Set_FN_Server_OnReceive(IntPtr pListener, OnReceive fn);
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void HP_Set_FN_Server_OnPullReceive(IntPtr pListener, OnPullReceive fn);
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void HP_Set_FN_Server_OnClose(IntPtr pListener, OnClose fn);
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void HP_Set_FN_Server_OnShutdown(IntPtr pListener, OnShutdown fn);
+
+ /**********************************************************************************/
+ /***************************** Client 鍥炶皟鍑芥暟璁剧疆鏂规硶 *****************************/
+
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void HP_Set_FN_Client_OnPrepareConnect(IntPtr pListener, OnPrepareConnect fn);
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void HP_Set_FN_Client_OnConnect(IntPtr pListener, OnConnect fn);
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void HP_Set_FN_Client_OnHandShake(IntPtr pListener, OnHandShake fn);
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void HP_Set_FN_Client_OnSend(IntPtr pListener, OnSend fn);
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void HP_Set_FN_Client_OnReceive(IntPtr pListener, OnReceive fn);
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void HP_Set_FN_Client_OnPullReceive(IntPtr pListener, OnPullReceive fn);
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void HP_Set_FN_Client_OnClose(IntPtr pListener, OnClose fn);
+
+ /**********************************************************************************/
+ /****************************** Agent 鍥炶皟鍑芥暟璁剧疆鏂规硶 *****************************/
+
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void HP_Set_FN_Agent_OnPrepareConnect(IntPtr pListener, OnPrepareConnect fn);
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void HP_Set_FN_Agent_OnConnect(IntPtr pListener, OnConnect fn);
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void HP_Set_FN_Agent_OnHandShake(IntPtr pListener, OnHandShake fn);
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void HP_Set_FN_Agent_OnSend(IntPtr pListener, OnSend fn);
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void HP_Set_FN_Agent_OnReceive(IntPtr pListener, OnReceive fn);
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void HP_Set_FN_Agent_OnPullReceive(IntPtr pListener, OnPullReceive fn);
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void HP_Set_FN_Agent_OnClose(IntPtr pListener, OnClose fn);
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void HP_Set_FN_Agent_OnShutdown(IntPtr pListener, OnShutdown fn);
+
+ /**************************************************************************/
+ /***************************** Server 鎿嶄綔鏂规硶 *****************************/
+
+ ///
+ /// 鍚嶇О锛氬惎鍔ㄩ氫俊缁勪欢
+ /// 鎻忚堪锛氬惎鍔ㄦ湇鍔$閫氫俊缁勪欢锛屽惎鍔ㄥ畬鎴愬悗鍙紑濮嬫帴鏀跺鎴风杩炴帴骞舵敹鍙戞暟鎹
+ ///
+ ///
+ /// 鐩戝惉鍦板潃
+ /// 鐩戝惉绔彛
+ /// 澶辫触锛屽彲閫氳繃 GetLastError() 鑾峰彇閿欒浠g爜
+ [DllImport(HPSOCKET_DLL_PATH, CharSet = CharSet.Unicode)]
+ public static extern bool HP_Server_Start(IntPtr pServer, string pszBindAddress, ushort usPort);
+
+ ///
+ /// 鍏抽棴鏈嶅姟绔氫俊缁勪欢锛屽叧闂畬鎴愬悗鏂紑鎵鏈夊鎴风杩炴帴骞堕噴鏀炬墍鏈夎祫婧
+ ///
+ ///
+ /// 澶辫触锛屽彲閫氳繃 GetLastError() 鑾峰彇閿欒浠g爜
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern bool HP_Server_Stop(IntPtr pServer);
+
+ ///
+ /// 鐢ㄦ埛閫氳繃璇ユ柟娉曞悜鎸囧畾瀹㈡埛绔彂閫佹暟鎹
+ ///
+ ///
+ /// 杩炴帴 ID
+ /// 鍙戦佹暟鎹暱搴
+ /// 鍙戦佹暟鎹暱搴
+ ///
+ [DllImport(HPSOCKET_DLL_PATH, CharSet = CharSet.Ansi, SetLastError = true)]
+ public static extern bool HP_Server_Send(IntPtr pServer, IntPtr connId, byte[] pBuffer, int length);
+
+ ///
+ /// 鐢ㄦ埛閫氳繃璇ユ柟娉曞悜鎸囧畾瀹㈡埛绔彂閫佹暟鎹
+ ///
+ ///
+ /// 杩炴帴 ID
+ /// 鍙戦佹暟鎹暱搴
+ /// 鍙戦佹暟鎹暱搴
+ ///
+ [DllImport(HPSOCKET_DLL_PATH, SetLastError = true)]
+ public static extern bool HP_Server_Send(IntPtr pServer, IntPtr connId, IntPtr pBuffer, int length);
+
+ ///
+ /// 鐢ㄦ埛閫氳繃璇ユ柟娉曞悜鎸囧畾瀹㈡埛绔彂閫佹暟鎹
+ ///
+ ///
+ ///
+ ///
+ ///
+ /// 閽堝pBuffer鐨勫亸绉
+ ///
+ [DllImport(HPSOCKET_DLL_PATH, CharSet = CharSet.Ansi, SetLastError = true)]
+ public static extern bool HP_Server_SendPart(IntPtr pServer, IntPtr connId, byte[] pBuffer, int length, int iOffset);
+
+ ///
+ /// 鐢ㄦ埛閫氳繃璇ユ柟娉曞悜鎸囧畾瀹㈡埛绔彂閫佹暟鎹
+ ///
+ ///
+ ///
+ ///
+ ///
+ /// 閽堝pBuffer鐨勫亸绉
+ ///
+ [DllImport(HPSOCKET_DLL_PATH, SetLastError = true)]
+ public static extern bool HP_Server_SendPart(IntPtr pServer, IntPtr connId, IntPtr pBuffer, int length, int iOffset);
+
+
+ ///
+ /// 鍙戦佸缁勬暟鎹
+ /// 鍚戞寚瀹氳繛鎺ュ彂閫佸缁勬暟鎹
+ /// TCP - 椤哄簭鍙戦佹墍鏈夋暟鎹寘
+ /// UDP - 鎶婃墍鏈夋暟鎹寘缁勫悎鎴愪竴涓暟鎹寘鍙戦侊紙鏁版嵁鍖呯殑鎬婚暱搴︿笉鑳藉ぇ浜庤缃殑 UDP 鍖呮渶澶ч暱搴︼級
+ ///
+ ///
+ /// 杩炴帴 ID
+ /// 鍙戦佺紦鍐插尯鏁扮粍
+ /// 鍙戦佺紦鍐插尯鏁扮洰
+ /// TRUE.鎴愬姛,FALSE.澶辫触锛屽彲閫氳繃 Windows API 鍑芥暟 ::GetLastError() 鑾峰彇 Windows 閿欒浠g爜
+ [DllImport(HPSOCKET_DLL_PATH, SetLastError = true)]
+ public static extern bool HP_Server_SendPackets(IntPtr pServer, IntPtr connId, WSABUF[] pBuffers, int iCount);
+
+
+ ///
+ /// 鏂紑涓庢煇涓鎴风鐨勮繛鎺
+ ///
+ ///
+ /// 杩炴帴 ID
+ /// 鏄惁寮哄埗鏂紑杩炴帴
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern bool HP_Server_Disconnect(IntPtr pServer, IntPtr connId, bool bForce);
+
+ ///
+ /// 鏂紑瓒呰繃鎸囧畾鏃堕暱鐨勮繛鎺
+ ///
+ ///
+ /// 鏃堕暱锛堟绉掞級
+ /// 鏄惁寮哄埗鏂紑杩炴帴
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern bool HP_Server_DisconnectLongConnections(IntPtr pServer, uint dwPeriod, bool bForce);
+
+ ///
+ /// 鏂紑瓒呰繃鎸囧畾鏃堕暱鐨勯潤榛樿繛鎺
+ ///
+ ///
+ /// 鏃堕暱锛堟绉掞級
+ /// 鏄惁寮哄埗鏂紑杩炴帴
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern bool HP_Server_DisconnectSilenceConnections(IntPtr pServer, uint dwPeriod, bool bForce);
+
+ /******************************************************************************/
+ /***************************** Server 灞炴ц闂柟娉 *****************************/
+
+ ///
+ /// 璁剧疆鏁版嵁鍙戦佺瓥鐣
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void HP_Server_SetSendPolicy(IntPtr pServer, SendPolicy enSendPolicy);
+
+ ///
+ /// 鑾峰彇鏁版嵁鍙戦佺瓥鐣
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern SendPolicy HP_Server_GetSendPolicy(IntPtr pServer);
+
+ ///
+ /// 璁剧疆杩炴帴鐨勯檮鍔犳暟鎹
+ /// 鏄惁涓鸿繛鎺ョ粦瀹氶檮鍔犳暟鎹垨鑰呯粦瀹氫粈涔堟牱鐨勬暟鎹紝鍧囩敱搴旂敤绋嬪簭鍙韩鍐冲畾
+ ///
+ ///
+ /// 杩炴帴 ID
+ ///
+ /// 鑻ヨ繑鍥 false 澶辫触鍒欎负锛堟棤鏁堢殑杩炴帴 ID锛
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern bool HP_Server_SetConnectionExtra(IntPtr pServer, IntPtr connId, IntPtr pExtra);
+
+ ///
+ /// 鑾峰彇杩炴帴鐨勯檮鍔犳暟鎹
+ /// 鏄惁涓鸿繛鎺ョ粦瀹氶檮鍔犳暟鎹垨鑰呯粦瀹氫粈涔堟牱鐨勬暟鎹紝鍧囩敱搴旂敤绋嬪簭鍙韩鍐冲畾
+ ///
+ ///
+ /// 杩炴帴 ID
+ /// 鏁版嵁鎸囬拡
+ /// 鑻ヨ繑鍥 false 澶辫触鍒欎负锛堟棤鏁堢殑杩炴帴 ID锛
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern bool HP_Server_GetConnectionExtra(IntPtr pServer, IntPtr connId, ref IntPtr pExtra);
+
+ ///
+ /// 妫鏌ラ氫俊缁勪欢鏄惁宸插惎鍔
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern bool HP_Server_HasStarted(IntPtr pServer);
+
+ ///
+ /// 鏌ョ湅閫氫俊缁勪欢褰撳墠鐘舵
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern ServiceState HP_Server_GetState(IntPtr pServer);
+
+ ///
+ /// 鑾峰彇鏈杩戜竴娆″け璐ユ搷浣滅殑閿欒浠g爜
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern SocketError HP_Server_GetLastError(IntPtr pServer);
+
+ ///
+ /// 鑾峰彇鏈杩戜竴娆″け璐ユ搷浣滅殑閿欒鎻忚堪
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern IntPtr HP_Server_GetLastErrorDesc(IntPtr pServer);
+
+
+ ///
+ /// 鑾峰彇杩炴帴涓湭鍙戝嚭鏁版嵁鐨勯暱搴
+ ///
+ ///
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern bool HP_Server_GetPendingDataLength(IntPtr pServer, IntPtr connId, ref int piPending);
+
+ ///
+ /// 鑾峰彇瀹㈡埛绔繛鎺ユ暟
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern uint HP_Server_GetConnectionCount(IntPtr pServer);
+
+ ///
+ /// 鑾峰彇鎵鏈夎繛鎺ョ殑 CONNID
+ ///
+ ///
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern bool HP_Server_GetAllConnectionIDs(IntPtr pServer, IntPtr[] pIDs, ref uint pdwCount);
+
+ ///
+ /// 鑾峰彇鏌愪釜瀹㈡埛绔繛鎺ユ椂闀匡紙姣锛
+ ///
+ ///
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern bool HP_Server_GetConnectPeriod(IntPtr pServer, IntPtr connId, ref uint pdwPeriod);
+
+ ///
+ /// 鑾峰彇鏌愪釜杩炴帴闈欓粯鏃堕棿锛堟绉掞級
+ ///
+ ///
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern bool HP_Server_GetSilencePeriod(IntPtr pServer, IntPtr connId, ref uint pdwPeriod);
+
+ ///
+ /// 鑾峰彇鐩戝惉 Socket 鐨勫湴鍧淇℃伅
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern bool HP_Server_GetListenAddress(IntPtr pServer, [MarshalAs(UnmanagedType.LPWStr)] StringBuilder lpszAddress, ref int piAddressLen, ref ushort pusPort);
+
+ ///
+ /// 鑾峰彇鏌愪釜杩炴帴鐨勬湰鍦板湴鍧淇℃伅
+ ///
+ ///
+ ///
+ ///
+ /// 浼犲叆浼犲嚭鍊,澶у皬鏈濂藉湪222.222.222.222鐨勯暱搴︿互涓
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern bool HP_Server_GetLocalAddress(IntPtr pServer, IntPtr connId, [MarshalAs(UnmanagedType.LPWStr)] StringBuilder lpszAddress, ref int piAddressLen, ref ushort pusPort);
+
+ ///
+ /// 鑾峰彇鏌愪釜杩炴帴鐨勮繙绋嬪湴鍧淇℃伅
+ ///
+ ///
+ ///
+ ///
+ /// 浼犲叆浼犲嚭鍊,澶у皬鏈濂藉湪222.222.222.222鐨勯暱搴︿互涓
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern bool HP_Server_GetRemoteAddress(IntPtr pServer, IntPtr connId, [MarshalAs(UnmanagedType.LPWStr)] StringBuilder lpszAddress, ref int piAddressLen, ref ushort pusPort);
+
+
+ ///
+ /// 璁剧疆 Socket 缂撳瓨瀵硅薄閿佸畾鏃堕棿锛堟绉掞紝鍦ㄩ攣瀹氭湡闂磋 Socket 缂撳瓨瀵硅薄涓嶈兘琚幏鍙栦娇鐢級
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void HP_Server_SetFreeSocketObjLockTime(IntPtr pServer, uint dwFreeSocketObjLockTime);
+
+ ///
+ /// 璁剧疆 Socket 缂撳瓨姹犲ぇ灏忥紙閫氬父璁剧疆涓哄钩鍧囧苟鍙戣繛鎺ユ暟閲忕殑 1/3 - 1/2锛
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void HP_Server_SetFreeSocketObjPool(IntPtr pServer, uint dwFreeSocketObjPool);
+
+ ///
+ /// 璁剧疆鍐呭瓨鍧楃紦瀛樻睜澶у皬锛堥氬父璁剧疆涓 Socket 缂撳瓨姹犲ぇ灏忕殑 2 - 3 鍊嶏級
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void HP_Server_SetFreeBufferObjPool(IntPtr pServer, uint dwFreeBufferObjPool);
+
+ ///
+ /// 璁剧疆 Socket 缂撳瓨姹犲洖鏀堕榾鍊硷紙閫氬父璁剧疆涓 Socket 缂撳瓨姹犲ぇ灏忕殑 3 鍊嶏級
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void HP_Server_SetFreeSocketObjHold(IntPtr pServer, uint dwFreeSocketObjHold);
+
+ ///
+ /// 璁剧疆鍐呭瓨鍧楃紦瀛樻睜鍥炴敹闃鍊硷紙閫氬父璁剧疆涓哄唴瀛樺潡缂撳瓨姹犲ぇ灏忕殑 3 鍊嶏級
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void HP_Server_SetFreeBufferObjHold(IntPtr pServer, uint dwFreeBufferObjHold);
+
+ ///
+ /// 璁剧疆宸ヤ綔绾跨▼鏁伴噺锛堥氬父璁剧疆涓 2 * CPU + 2锛
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void HP_Server_SetWorkerThreadCount(IntPtr pServer, uint dwWorkerThreadCount);
+
+ ///
+ /// 璁剧疆鏄惁鏍囪闈欓粯鏃堕棿锛堣缃负 TRUE 鏃 DisconnectSilenceConnections() 鍜 GetSilencePeriod() 鎵嶆湁鏁堬紝榛樿锛欶ALSE锛
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void HP_Server_SetMarkSilence(IntPtr pServer, bool bMarkSilence);
+
+ ///
+ /// 鑾峰彇 Socket 缂撳瓨瀵硅薄閿佸畾鏃堕棿
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern uint HP_Server_GetFreeSocketObjLockTime(IntPtr pServer);
+
+ ///
+ /// 鑾峰彇 Socket 缂撳瓨姹犲ぇ灏
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern uint HP_Server_GetFreeSocketObjPool(IntPtr pServer);
+
+ ///
+ /// 鑾峰彇鍐呭瓨鍧楃紦瀛樻睜澶у皬
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern uint HP_Server_GetFreeBufferObjPool(IntPtr pServer);
+
+ ///
+ /// 鑾峰彇 Socket 缂撳瓨姹犲洖鏀堕榾鍊
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern uint HP_Server_GetFreeSocketObjHold(IntPtr pServer);
+
+ ///
+ /// 鑾峰彇鍐呭瓨鍧楃紦瀛樻睜鍥炴敹闃鍊
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern uint HP_Server_GetFreeBufferObjHold(IntPtr pServer);
+
+ ///
+ /// 鑾峰彇宸ヤ綔绾跨▼鏁伴噺
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern uint HP_Server_GetWorkerThreadCount(IntPtr pServer);
+
+ ///
+ /// 妫娴嬫槸鍚︽爣璁伴潤榛樻椂闂
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern bool HP_Server_IsMarkSilence(IntPtr pServer);
+
+ /**********************************************************************************/
+ /***************************** TCP Server 鎿嶄綔鏂规硶 *****************************/
+
+ ///
+ /// 鍚嶇О锛氬彂閫佸皬鏂囦欢
+ /// 鎻忚堪锛氬悜鎸囧畾杩炴帴鍙戦 4096 KB 浠ヤ笅鐨勫皬鏂囦欢
+ ///
+ ///
+ /// 杩炴帴 ID
+ /// 鏂囦欢璺緞
+ /// 澶撮儴闄勫姞鏁版嵁
+ /// 灏鹃儴闄勫姞鏁版嵁
+ /// TRUE.鎴愬姛 FALSE -- 澶辫触锛屽彲閫氳繃 Windows API 鍑芥暟 ::GetLastError() 鑾峰彇 Windows 閿欒浠g爜
+ [DllImport(HPSOCKET_DLL_PATH, CharSet = CharSet.Unicode, SetLastError = true)]
+ public static extern bool HP_TcpServer_SendSmallFile(IntPtr pServer, IntPtr connId, string lpszFileName, ref WSABUF pHead, ref WSABUF pTail);
+
+ /**********************************************************************************/
+ /***************************** TCP Server 灞炴ц闂柟娉 *****************************/
+
+ ///
+ /// 璁剧疆 Accept 棰勬姇閫掓暟閲忥紙鏍规嵁璐熻浇璋冩暣璁剧疆锛孉ccept 棰勬姇閫掓暟閲忚秺澶у垯鏀寔鐨勫苟鍙戣繛鎺ヨ姹傝秺澶氾級
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void HP_TcpServer_SetAcceptSocketCount(IntPtr pServer, uint dwAcceptSocketCount);
+
+ ///
+ /// 璁剧疆閫氫俊鏁版嵁缂撳啿鍖哄ぇ灏忥紙鏍规嵁骞冲潎閫氫俊鏁版嵁鍖呭ぇ灏忚皟鏁磋缃紝閫氬父璁剧疆涓 1024 鐨勫嶆暟锛
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void HP_TcpServer_SetSocketBufferSize(IntPtr pServer, uint dwSocketBufferSize);
+
+ ///
+ /// 璁剧疆鐩戝惉 Socket 鐨勭瓑鍊欓槦鍒楀ぇ灏忥紙鏍规嵁骞跺彂杩炴帴鏁伴噺璋冩暣璁剧疆锛
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void HP_TcpServer_SetSocketListenQueue(IntPtr pServer, uint dwSocketListenQueue);
+
+ ///
+ /// 璁剧疆蹇冭烦鍖呴棿闅旓紙姣锛0 鍒欎笉鍙戦佸績璺冲寘锛
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void HP_TcpServer_SetKeepAliveTime(IntPtr pServer, uint dwKeepAliveTime);
+
+ ///
+ /// 璁剧疆蹇冭烦纭鍖呮娴嬮棿闅旓紙姣锛0 涓嶅彂閫佸績璺冲寘锛屽鏋滆秴杩囪嫢骞叉 [榛樿锛歐inXP 5 娆, Win7 10 娆 妫娴嬩笉鍒板績璺崇‘璁ゅ寘鍒欒涓哄凡鏂嚎锛
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void HP_TcpServer_SetKeepAliveInterval(IntPtr pServer, uint dwKeepAliveInterval);
+
+
+ ///
+ /// 鑾峰彇 Accept 棰勬姇閫掓暟閲
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern uint HP_TcpServer_GetAcceptSocketCount(IntPtr pServer);
+
+ ///
+ /// 鑾峰彇閫氫俊鏁版嵁缂撳啿鍖哄ぇ灏
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern uint HP_TcpServer_GetSocketBufferSize(IntPtr pServer);
+
+ ///
+ /// 鑾峰彇鐩戝惉 Socket 鐨勭瓑鍊欓槦鍒楀ぇ灏
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern uint HP_TcpServer_GetSocketListenQueue(IntPtr pServer);
+
+ ///
+ /// 鑾峰彇蹇冭烦妫鏌ユ鏁
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern uint HP_TcpServer_GetKeepAliveTime(IntPtr pServer);
+
+ ///
+ /// 鑾峰彇蹇冭烦妫鏌ラ棿闅
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern uint HP_TcpServer_GetKeepAliveInterval(IntPtr pServer);
+
+
+ /**********************************************************************************/
+ /***************************** UDP Server 灞炴ц闂柟娉 *****************************/
+
+ ///
+ /// 璁剧疆鏁版嵁鎶ユ枃鏈澶ч暱搴︼紙寤鸿鍦ㄥ眬鍩熺綉鐜涓嬩笉瓒呰繃 1472 瀛楄妭锛屽湪骞垮煙缃戠幆澧冧笅涓嶈秴杩 548 瀛楄妭锛
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void HP_UdpServer_SetMaxDatagramSize(IntPtr pServer, uint dwMaxDatagramSize);
+
+ ///
+ /// 鑾峰彇鏁版嵁鎶ユ枃鏈澶ч暱搴
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern uint HP_UdpServer_GetMaxDatagramSize(IntPtr pServer);
+
+ ///
+ /// 璁剧疆 Receive 棰勬姇閫掓暟閲忥紙鏍规嵁璐熻浇璋冩暣璁剧疆锛孯eceive 棰勬姇閫掓暟閲忚秺澶у垯涓㈠寘姒傜巼瓒婂皬锛
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void HP_UdpServer_SetPostReceiveCount(IntPtr pServer, uint dwPostReceiveCount);
+
+ ///
+ /// 鑾峰彇 Receive 棰勬姇閫掓暟閲
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern uint HP_UdpServer_GetPostReceiveCount(IntPtr pServer);
+
+ ///
+ /// 璁剧疆鐩戞祴鍖呭皾璇曟鏁帮紙0 鍒欎笉鍙戦佺洃娴嬭烦鍖咃紝濡傛灉瓒呰繃鏈澶у皾璇曟鏁板垯璁や负宸叉柇绾匡級
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void HP_UdpServer_SetDetectAttempts(IntPtr pServer, uint dwMaxDatagramSize);
+
+ ///
+ /// 璁剧疆鐩戞祴鍖呭彂閫侀棿闅旓紙绉掞紝0 涓嶅彂閫佺洃娴嬪寘锛
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void HP_UdpServer_SetDetectInterval(IntPtr pServer, uint dwMaxDatagramSize);
+
+ ///
+ /// 鑾峰彇蹇冭烦妫鏌ユ鏁
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern uint HP_UdpServer_GetDetectAttempts(IntPtr pServer);
+
+ ///
+ /// 鑾峰彇蹇冭烦妫鏌ラ棿闅
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern uint HP_UdpServer_GetDetectInterval(IntPtr pServer);
+ /******************************************************************************/
+ /***************************** Client 缁勪欢鎿嶄綔鏂规硶 *****************************/
+
+ ///
+ /// 鍚姩瀹㈡埛绔氫俊缁勪欢骞惰繛鎺ユ湇鍔$锛屽惎鍔ㄥ畬鎴愬悗鍙紑濮嬫敹鍙戞暟鎹
+ ///
+ ///
+ /// 鏈嶅姟绔湴鍧
+ /// 鏈嶅姟绔鍙
+ /// 鏄惁閲囩敤寮傛 Connnect
+ /// 澶辫触锛屽彲閫氳繃 HP_Client_GetLastError() 鑾峰彇閿欒浠g爜
+ [DllImport(HPSOCKET_DLL_PATH, CharSet = CharSet.Unicode)]
+ public static extern bool HP_Client_Start(IntPtr pClient, string pszRemoteAddress, ushort usPort, bool bAsyncConnect);
+
+
+ ///
+ /// 鍚姩閫氫俊缁勪欢锛堝苟鎸囧畾缁戝畾鍦板潃锛, 鍚姩瀹㈡埛绔氫俊缁勪欢骞惰繛鎺ユ湇鍔$锛屽惎鍔ㄥ畬鎴愬悗鍙紑濮嬫敹鍙戞暟鎹
+ ///
+ ///
+ /// 鏈嶅姟绔湴鍧
+ /// 鏈嶅姟绔鍙
+ /// 鏄惁閲囩敤寮傛 Connect
+ /// 缁戝畾鍦板潃锛堥粯璁わ細nullptr锛孴cpClient/UdpClient -> 涓嶆墽琛岀粦瀹氭搷浣滐紝UdpCast 缁戝畾 -> 0.0.0.0锛
+ /// 澶辫触锛屽彲閫氳繃 HP_Client_GetLastError() 鑾峰彇閿欒浠g爜
+ [DllImport(HPSOCKET_DLL_PATH, CharSet = CharSet.Unicode)]
+ public static extern bool HP_Client_StartWithBindAddress(IntPtr pClient, string lpszRemoteAddress, ushort usPort, bool bAsyncConnect, string lpszBindAddress);
+
+
+ ///
+ /// 鍏抽棴瀹㈡埛绔氫俊缁勪欢锛屽叧闂畬鎴愬悗鏂紑涓庢湇鍔$鐨勮繛鎺ュ苟閲婃斁鎵鏈夎祫婧
+ ///
+ ///
+ /// 澶辫触锛屽彲閫氳繃 HP_Client_GetLastError() 鑾峰彇閿欒浠g爜
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern bool HP_Client_Stop(IntPtr pClient);
+
+ ///
+ /// 鐢ㄦ埛閫氳繃璇ユ柟娉曞悜鏈嶅姟绔彂閫佹暟鎹
+ ///
+ ///
+ /// 杩炴帴 ID锛堜繚鐣欏弬鏁帮紝鐩墠璇ュ弬鏁板苟鏈娇鐢級
+ /// 鍙戦佹暟鎹紦鍐插尯
+ /// 鍙戦佹暟鎹暱搴
+ /// 澶辫触锛屽彲閫氳繃 HP_Client_GetLastError() 鑾峰彇閿欒浠g爜
+ [DllImport(HPSOCKET_DLL_PATH, CharSet = CharSet.Ansi, SetLastError = true)]
+ public static extern bool HP_Client_Send(IntPtr pClient, byte[] pBuffer, int length);
+
+ ///
+ /// 鐢ㄦ埛閫氳繃璇ユ柟娉曞悜鏈嶅姟绔彂閫佹暟鎹
+ ///
+ ///
+ /// 杩炴帴 ID锛堜繚鐣欏弬鏁帮紝鐩墠璇ュ弬鏁板苟鏈娇鐢級
+ /// 鍙戦佹暟鎹紦鍐插尯
+ /// 鍙戦佹暟鎹暱搴
+ /// 澶辫触锛屽彲閫氳繃 HP_Client_GetLastError() 鑾峰彇閿欒浠g爜
+ [DllImport(HPSOCKET_DLL_PATH, SetLastError = true)]
+ public static extern bool HP_Client_Send(IntPtr pClient, IntPtr pBuffer, int length);
+
+ ///
+ /// 鐢ㄦ埛閫氳繃璇ユ柟娉曞悜鏈嶅姟绔彂閫佹暟鎹
+ ///
+ ///
+ ///
+ ///
+ /// 閽堝pBuffer鐨勫亸绉
+ ///
+ [DllImport(HPSOCKET_DLL_PATH, CharSet = CharSet.Ansi, SetLastError = true)]
+ public static extern bool HP_Client_SendPart(IntPtr pClient, byte[] pBuffer, int length, int iOffset);
+
+ ///
+ /// 鐢ㄦ埛閫氳繃璇ユ柟娉曞悜鏈嶅姟绔彂閫佹暟鎹
+ ///
+ ///
+ ///
+ ///
+ /// 閽堝pBuffer鐨勫亸绉
+ ///
+ [DllImport(HPSOCKET_DLL_PATH, SetLastError = true)]
+ public static extern bool HP_Client_SendPart(IntPtr pClient, IntPtr pBuffer, int length, int iOffset);
+
+
+ ///
+ /// 鍙戦佸缁勬暟鎹
+ /// 鍚戞湇鍔$鍙戦佸缁勬暟鎹
+ /// TCP - 椤哄簭鍙戦佹墍鏈夋暟鎹寘
+ /// UDP - 鎶婃墍鏈夋暟鎹寘缁勫悎鎴愪竴涓暟鎹寘鍙戦侊紙鏁版嵁鍖呯殑鎬婚暱搴︿笉鑳藉ぇ浜庤缃殑 UDP 鍖呮渶澶ч暱搴︼級
+ ///
+ ///
+ /// 鍙戦佺紦鍐插尯鏁扮粍
+ /// 鍙戦佺紦鍐插尯鏁扮洰
+ /// TRUE.鎴愬姛,FALSE.澶辫触锛屽彲閫氳繃 Windows API 鍑芥暟 ::GetLastError() 鑾峰彇 Windows 閿欒浠g爜
+ [DllImport(HPSOCKET_DLL_PATH, SetLastError = true)]
+ public static extern bool HP_Client_SendPackets(IntPtr pClient, WSABUF[] pBuffers, int iCount);
+
+
+ /******************************************************************************/
+ /***************************** Client 灞炴ц闂柟娉 *****************************/
+
+ ///
+ /// 璁剧疆杩炴帴鐨勯檮鍔犳暟鎹
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void HP_Client_SetExtra(IntPtr pClient, IntPtr pExtra);
+
+
+ ///
+ /// 鑾峰彇杩炴帴鐨勯檮鍔犳暟鎹
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern IntPtr HP_Client_GetExtra(IntPtr pClient);
+
+
+ ///
+ /// 妫鏌ラ氫俊缁勪欢鏄惁宸插惎鍔
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern bool HP_Client_HasStarted(IntPtr pClient);
+
+ ///
+ /// 鏌ョ湅閫氫俊缁勪欢褰撳墠鐘舵
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern ServiceState HP_Client_GetState(IntPtr pClient);
+
+ ///
+ /// 鑾峰彇鏈杩戜竴娆″け璐ユ搷浣滅殑閿欒浠g爜
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern SocketError HP_Client_GetLastError(IntPtr pClient);
+
+ ///
+ /// 鑾峰彇鏈杩戜竴娆″け璐ユ搷浣滅殑閿欒鎻忚堪
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern IntPtr HP_Client_GetLastErrorDesc(IntPtr pClient);
+
+ ///
+ /// 鑾峰彇璇ョ粍浠跺璞$殑杩炴帴 ID
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern IntPtr HP_Client_GetConnectionID(IntPtr pClient);
+
+ ///
+ /// 鑾峰彇 Client Socket 鐨勫湴鍧淇℃伅
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern bool HP_Client_GetLocalAddress(IntPtr pClient, [MarshalAs(UnmanagedType.LPWStr)] StringBuilder lpszAddress, ref int piAddressLen, ref ushort pusPort);
+
+ ///
+ /// 鑾峰彇杩炴帴涓湭鍙戝嚭鏁版嵁鐨勯暱搴
+ ///
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern bool HP_Client_GetPendingDataLength(IntPtr pClient, ref int piPending);
+
+ ///
+ /// 璁剧疆鍐呭瓨鍧楃紦瀛樻睜澶у皬锛堥氬父璁剧疆涓 -> PUSH 妯″瀷锛5 - 10锛汸ULL 妯″瀷锛10 - 20 锛
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void HP_Client_SetFreeBufferPoolSize(IntPtr pClient, uint dwFreeBufferPoolSize);
+
+ ///
+ /// 璁剧疆鍐呭瓨鍧楃紦瀛樻睜鍥炴敹闃鍊硷紙閫氬父璁剧疆涓哄唴瀛樺潡缂撳瓨姹犲ぇ灏忕殑 3 鍊嶏級
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void HP_Client_SetFreeBufferPoolHold(IntPtr pClient, uint dwFreeBufferPoolHold);
+
+ ///
+ /// 鑾峰彇鍐呭瓨鍧楃紦瀛樻睜澶у皬
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern uint HP_Client_GetFreeBufferPoolSize(IntPtr pClient);
+
+ ///
+ /// 鑾峰彇鍐呭瓨鍧楃紦瀛樻睜鍥炴敹闃鍊
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern uint HP_Client_GetFreeBufferPoolHold(IntPtr pClient);
+ /**********************************************************************************/
+ /***************************** TCP Client 鎿嶄綔鏂规硶 *****************************/
+
+ ///
+ /// 鍚嶇О锛氬彂閫佸皬鏂囦欢
+ /// 鎻忚堪锛氬悜鎸囧畾杩炴帴鍙戦 4096 KB 浠ヤ笅鐨勫皬鏂囦欢
+ ///
+ ///
+ /// 鏂囦欢璺緞
+ /// 澶撮儴闄勫姞鏁版嵁
+ /// 灏鹃儴闄勫姞鏁版嵁
+ /// TRUE.鎴愬姛 FALSE -- 澶辫触锛屽彲閫氳繃 Windows API 鍑芥暟 ::GetLastError() 鑾峰彇 Windows 閿欒浠g爜
+ [DllImport(HPSOCKET_DLL_PATH, CharSet = CharSet.Unicode, SetLastError = true)]
+ public static extern bool HP_TcpClient_SendSmallFile(IntPtr pClient, string lpszFileName, ref WSABUF pHead, ref WSABUF pTail);
+
+ /**********************************************************************************/
+ /***************************** TCP Client 灞炴ц闂柟娉 *****************************/
+
+ ///
+ /// 璁剧疆閫氫俊鏁版嵁缂撳啿鍖哄ぇ灏忥紙鏍规嵁骞冲潎閫氫俊鏁版嵁鍖呭ぇ灏忚皟鏁磋缃紝閫氬父璁剧疆涓猴細(N * 1024) - sizeof(TBufferObj)锛
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void HP_TcpClient_SetSocketBufferSize(IntPtr pClient, uint dwSocketBufferSize);
+
+ ///
+ /// 璁剧疆蹇冭烦鍖呴棿闅旓紙姣锛0 鍒欎笉鍙戦佸績璺冲寘锛
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void HP_TcpClient_SetKeepAliveTime(IntPtr pClient, uint dwKeepAliveTime);
+
+ ///
+ /// 璁剧疆蹇冭烦纭鍖呮娴嬮棿闅旓紙姣锛0 涓嶅彂閫佸績璺冲寘锛屽鏋滆秴杩囪嫢骞叉 [榛樿锛歐inXP 5 娆, Win7 10 娆 妫娴嬩笉鍒板績璺崇‘璁ゅ寘鍒欒涓哄凡鏂嚎锛
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void HP_TcpClient_SetKeepAliveInterval(IntPtr pClient, uint dwKeepAliveInterval);
+
+ ///
+ /// 鑾峰彇閫氫俊鏁版嵁缂撳啿鍖哄ぇ灏
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern uint HP_TcpClient_GetSocketBufferSize(IntPtr pClient);
+
+ ///
+ /// 鑾峰彇蹇冭烦妫鏌ユ鏁
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern uint HP_TcpClient_GetKeepAliveTime(IntPtr pClient);
+
+ ///
+ /// 鑾峰彇蹇冭烦妫鏌ラ棿闅
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern uint HP_TcpClient_GetKeepAliveInterval(IntPtr pClient);
+
+ /**********************************************************************************/
+ /***************************** UDP Client 灞炴ц闂柟娉 *****************************/
+
+ ///
+ /// 璁剧疆鏁版嵁鎶ユ枃鏈澶ч暱搴︼紙寤鸿鍦ㄥ眬鍩熺綉鐜涓嬩笉瓒呰繃 1472 瀛楄妭锛屽湪骞垮煙缃戠幆澧冧笅涓嶈秴杩 548 瀛楄妭锛
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void HP_UdpClient_SetMaxDatagramSize(IntPtr pClient, uint dwMaxDatagramSize);
+
+ ///
+ /// 鑾峰彇鏁版嵁鎶ユ枃鏈澶ч暱搴
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern uint HP_UdpClient_GetMaxDatagramSize(IntPtr pClient);
+
+ ///
+ /// 璁剧疆鐩戞祴鍖呭皾璇曟鏁帮紙0 鍒欎笉鍙戦佺洃娴嬭烦鍖咃紝濡傛灉瓒呰繃鏈澶у皾璇曟鏁板垯璁や负宸叉柇绾
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void HP_UdpClient_SetDetectAttempts(IntPtr pClient, uint dwDetectAttempts);
+
+ ///
+ /// 璁剧疆鐩戞祴鍖呭彂閫侀棿闅旓紙绉掞紝0 涓嶅彂閫佺洃娴嬪寘锛
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void HP_UdpClient_SetDetectInterval(IntPtr pClient, uint dwDetectInterval);
+
+ ///
+ /// 鑾峰彇蹇冭烦妫鏌ユ鏁
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern uint HP_UdpClient_GetDetectAttempts(IntPtr pClient);
+
+ ///
+ /// 鑾峰彇蹇冭烦妫鏌ラ棿闅
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern uint HP_UdpClient_GetDetectInterval(IntPtr pClient);
+
+ /**************************************************************************/
+ /***************************** Agent 鎿嶄綔鏂规硶 *****************************/
+
+ ///
+ /// 鍚姩閫氫俊缁勪欢
+ /// 鍚姩閫氫俊浠g悊缁勪欢锛屽惎鍔ㄥ畬鎴愬悗鍙紑濮嬭繛鎺ヨ繙绋嬫湇鍔″櫒
+ ///
+ ///
+ /// 鐩戝惉鍦板潃
+ /// 鏄惁閲囩敤寮傛 Connect
+ /// 澶辫触锛屽彲閫氳繃 GetLastError() 鑾峰彇閿欒浠g爜
+ [DllImport(HPSOCKET_DLL_PATH, CharSet = CharSet.Unicode)]
+ public static extern bool HP_Agent_Start(IntPtr pAgent, string pszBindAddress, bool bAsyncConnect);
+
+ ///
+ /// 鍏抽棴閫氫俊缁勪欢
+ /// 鍏抽棴閫氫俊缁勪欢锛屽叧闂畬鎴愬悗鏂紑鎵鏈夎繛鎺ュ苟閲婃斁鎵鏈夎祫婧
+ ///
+ ///
+ /// -- 澶辫触锛屽彲閫氳繃 GetLastError() 鑾峰彇閿欒浠g爜
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern bool HP_Agent_Stop(IntPtr pAgent);
+
+ ///
+ /// 杩炴帴鏈嶅姟鍣
+ /// 杩炴帴鏈嶅姟鍣紝杩炴帴鎴愬姛鍚 IAgentListener 浼氭帴鏀跺埌 OnConnect() 浜嬩欢
+ ///
+ ///
+ /// 鏈嶅姟绔湴鍧
+ /// 鏈嶅姟绔鍙
+ /// 浼犲嚭杩炴帴 ID
+ /// 澶辫触锛屽彲閫氳繃 SYS_GetLastError() 鑾峰彇 Windows 閿欒浠g爜
+ [DllImport(HPSOCKET_DLL_PATH, CharSet = CharSet.Unicode, SetLastError = true)]
+ public static extern bool HP_Agent_Connect(IntPtr pAgent, string pszBindAddress, ushort usPort, ref IntPtr pconnId);
+
+ ///
+ /// 鍙戦佹暟鎹
+ /// 鐢ㄦ埛閫氳繃璇ユ柟娉曞悜鎸囧畾杩炴帴鍙戦佹暟鎹
+ ///
+ ///
+ /// 杩炴帴 ID
+ /// 鍙戦佹暟鎹紦鍐插尯
+ /// 鍙戦佹暟鎹暱搴
+ ///
+ [DllImport(HPSOCKET_DLL_PATH, CharSet = CharSet.Ansi, SetLastError = true)]
+ public static extern bool HP_Agent_Send(IntPtr pAgent, IntPtr connId, byte[] pBuffer, int length);
+
+ ///
+ /// 鍙戦佹暟鎹
+ /// 鐢ㄦ埛閫氳繃璇ユ柟娉曞悜鎸囧畾杩炴帴鍙戦佹暟鎹
+ ///
+ ///
+ /// 杩炴帴 ID
+ /// 鍙戦佹暟鎹紦鍐插尯
+ /// 鍙戦佹暟鎹暱搴
+ ///
+ [DllImport(HPSOCKET_DLL_PATH, SetLastError = true)]
+ public static extern bool HP_Agent_Send(IntPtr pAgent, IntPtr connId, IntPtr pBuffer, int length);
+
+ ///
+ /// 鍙戦佹暟鎹
+ /// 鐢ㄦ埛閫氳繃璇ユ柟娉曞悜鎸囧畾杩炴帴鍙戦佹暟鎹
+ ///
+ ///
+ ///
+ ///
+ ///
+ /// 閽堝pBuffer鐨勫亸绉
+ ///
+ [DllImport(HPSOCKET_DLL_PATH, SetLastError = true)]
+ public static extern bool HP_Agent_SendPart(IntPtr pAgent, IntPtr connId, byte[] pBuffer, int length, int iOffset);
+
+ ///
+ /// 鍙戦佹暟鎹
+ /// 鐢ㄦ埛閫氳繃璇ユ柟娉曞悜鎸囧畾杩炴帴鍙戦佹暟鎹
+ ///
+ ///
+ ///
+ ///
+ ///
+ /// 閽堝pBuffer鐨勫亸绉
+ ///
+ [DllImport(HPSOCKET_DLL_PATH, SetLastError = true)]
+ public static extern bool HP_Agent_SendPart(IntPtr pAgent, IntPtr connId, IntPtr pBuffer, int length, int iOffset);
+
+
+ ///
+ /// 鍙戦佸缁勬暟鎹
+ /// 鍚戞寚瀹氳繛鎺ュ彂閫佸缁勬暟鎹
+ /// TCP - 椤哄簭鍙戦佹墍鏈夋暟鎹寘
+ /// UDP - 鎶婃墍鏈夋暟鎹寘缁勫悎鎴愪竴涓暟鎹寘鍙戦侊紙鏁版嵁鍖呯殑鎬婚暱搴︿笉鑳藉ぇ浜庤缃殑 UDP 鍖呮渶澶ч暱搴︼級
+ ///
+ ///
+ /// 杩炴帴 ID
+ /// 鍙戦佺紦鍐插尯鏁扮粍
+ /// 鍙戦佺紦鍐插尯鏁扮洰
+ /// TRUE.鎴愬姛,FALSE .澶辫触锛屽彲閫氳繃 Windows API 鍑芥暟 ::GetLastError() 鑾峰彇 Windows 閿欒浠g爜
+ [DllImport(HPSOCKET_DLL_PATH, SetLastError = true)]
+ public static extern bool HP_Agent_SendPackets(IntPtr pAgent, IntPtr connId, WSABUF[] pBuffers, int iCount);
+
+ ///
+ /// 鏂紑鏌愪釜杩炴帴
+ ///
+ ///
+ /// 杩炴帴 ID
+ /// 鏄惁寮哄埗鏂紑杩炴帴
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern bool HP_Agent_Disconnect(IntPtr pAgent, IntPtr connId, bool bForce);
+
+ ///
+ /// 鏂紑瓒呰繃鎸囧畾鏃堕暱鐨勮繛鎺
+ ///
+ ///
+ /// 鏃堕暱锛堟绉掞級
+ /// 鏄惁寮哄埗鏂紑杩炴帴
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern bool HP_Agent_DisconnectLongConnections(IntPtr pAgent, uint dwPeriod, bool bForce);
+
+ ///
+ /// 鏂紑瓒呰繃鎸囧畾鏃堕暱鐨勯潤榛樿繛鎺
+ ///
+ ///
+ /// 鏃堕暱锛堟绉掞級
+ /// 鏄惁寮哄埗鏂紑杩炴帴
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern bool HP_Agent_DisconnectSilenceConnections(IntPtr pAgent, uint dwPeriod, bool bForce);
+
+ /******************************************************************************/
+ /***************************** Agent 鎿嶄綔鏂规硶 *****************************/
+
+ ///
+ /// 鍚嶇О锛氬彂閫佸皬鏂囦欢
+ /// 鎻忚堪锛氬悜鎸囧畾杩炴帴鍙戦 4096 KB 浠ヤ笅鐨勫皬鏂囦欢
+ ///
+ ///
+ /// 杩炴帴 ID
+ /// 鏂囦欢璺緞
+ /// 澶撮儴闄勫姞鏁版嵁
+ /// 灏鹃儴闄勫姞鏁版嵁
+ /// TRUE.鎴愬姛 FALSE -- 澶辫触锛屽彲閫氳繃 Windows API 鍑芥暟 ::GetLastError() 鑾峰彇 Windows 閿欒浠g爜
+ [DllImport(HPSOCKET_DLL_PATH, CharSet = CharSet.Unicode, SetLastError = true)]
+ public static extern bool HP_TcpAgent_SendSmallFile(IntPtr pAgent, IntPtr connId, string lpszFileName, ref WSABUF pHead, ref WSABUF pTail);
+
+ /******************************************************************************/
+ /***************************** Agent 灞炴ц闂柟娉 *****************************/
+
+ ///
+ /// 璁剧疆鏁版嵁鍙戦佺瓥鐣
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void HP_Agent_SetSendPolicy(IntPtr pAgent, SendPolicy enSendPolicy);
+
+ ///
+ /// 鑾峰彇鏁版嵁鍙戦佺瓥鐣
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern SendPolicy HP_Agent_GetSendPolicy(IntPtr pAgent);
+
+ ///
+ /// 璁剧疆杩炴帴鐨勯檮鍔犳暟鎹
+ /// 鏄惁涓鸿繛鎺ョ粦瀹氶檮鍔犳暟鎹垨鑰呯粦瀹氫粈涔堟牱鐨勬暟鎹紝鍧囩敱搴旂敤绋嬪簭鍙韩鍐冲畾
+ ///
+ ///
+ /// 杩炴帴 ID
+ /// 鏁版嵁
+ /// FALSE -- 澶辫触锛堟棤鏁堢殑杩炴帴 ID锛
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern bool HP_Agent_SetConnectionExtra(IntPtr pAgent, IntPtr connId, IntPtr pExtra);
+
+ ///
+ /// 鑾峰彇杩炴帴鐨勯檮鍔犳暟鎹
+ /// 鏄惁涓鸿繛鎺ョ粦瀹氶檮鍔犳暟鎹垨鑰呯粦瀹氫粈涔堟牱鐨勬暟鎹紝鍧囩敱搴旂敤绋嬪簭鍙韩鍐冲畾
+ ///
+ ///
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern bool HP_Agent_GetConnectionExtra(IntPtr pAgent, IntPtr connId, ref IntPtr pExtra);
+
+ ///
+ /// 妫鏌ラ氫俊缁勪欢鏄惁宸插惎鍔
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern bool HP_Agent_HasStarted(IntPtr pAgent);
+
+ ///
+ /// 鏌ョ湅閫氫俊缁勪欢褰撳墠鐘舵
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern ServiceState HP_Agent_GetState(IntPtr pAgent);
+
+ ///
+ /// 鑾峰彇杩炴帴鏁
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern uint HP_Agent_GetConnectionCount(IntPtr pAgent);
+
+ ///
+ /// 鑾峰彇鎵鏈夎繛鎺ョ殑 CONNID
+ ///
+ ///
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern bool HP_Agent_GetAllConnectionIDs(IntPtr pAgent, IntPtr[] pIDs, ref uint pdwCount);
+
+ ///
+ /// 鑾峰彇鏌愪釜杩炴帴鏃堕暱锛堟绉掞級
+ ///
+ ///
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern bool HP_Agent_GetConnectPeriod(IntPtr pAgent, IntPtr connId, ref uint pdwPeriod);
+
+ ///
+ /// 鑾峰彇鏌愪釜杩炴帴闈欓粯鏃堕棿锛堟绉掞級
+ ///
+ ///
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern bool HP_Agent_GetSilencePeriod(IntPtr pAgent, IntPtr connId, ref uint pdwPeriod);
+
+ ///
+ /// 鑾峰彇鏌愪釜杩炴帴鐨勬湰鍦板湴鍧淇℃伅
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern bool HP_Agent_GetLocalAddress(IntPtr pAgent, IntPtr connId, [MarshalAs(UnmanagedType.LPWStr)] StringBuilder lpszAddress, ref int piAddressLen, ref ushort pusPort);
+
+ ///
+ /// 鑾峰彇鏌愪釜杩炴帴鐨勮繙绋嬪湴鍧淇℃伅
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern bool HP_Agent_GetRemoteAddress(IntPtr pAgent, IntPtr connId, [MarshalAs(UnmanagedType.LPWStr)] StringBuilder lpszAddress, ref int piAddressLen, ref ushort pusPort);
+
+ ///
+ /// 鑾峰彇鏈杩戜竴娆″け璐ユ搷浣滅殑閿欒浠g爜
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern SocketError HP_Agent_GetLastError(IntPtr pAgent);
+
+ ///
+ /// 鑾峰彇鏈杩戜竴娆″け璐ユ搷浣滅殑閿欒鎻忚堪
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern IntPtr HP_Agent_GetLastErrorDesc(IntPtr pAgent);
+
+ ///
+ /// 鑾峰彇杩炴帴涓湭鍙戝嚭鏁版嵁鐨勯暱搴
+ ///
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern bool HP_Agent_GetPendingDataLength(IntPtr pAgent, IntPtr connId, ref int piPending);
+
+ ///
+ /// 璁剧疆 Socket 缂撳瓨瀵硅薄閿佸畾鏃堕棿锛堟绉掞紝鍦ㄩ攣瀹氭湡闂磋 Socket 缂撳瓨瀵硅薄涓嶈兘琚幏鍙栦娇鐢級
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void HP_Agent_SetFreeSocketObjLockTime(IntPtr pAgent, uint dwFreeSocketObjLockTime);
+
+ ///
+ /// 璁剧疆 Socket 缂撳瓨姹犲ぇ灏忥紙閫氬父璁剧疆涓哄钩鍧囧苟鍙戣繛鎺ユ暟閲忕殑 1/3 - 1/2锛
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void HP_Agent_SetFreeSocketObjPool(IntPtr pAgent, uint dwFreeSocketObjPool);
+
+ ///
+ /// 璁剧疆鍐呭瓨鍧楃紦瀛樻睜澶у皬锛堥氬父璁剧疆涓 Socket 缂撳瓨姹犲ぇ灏忕殑 2 - 3 鍊嶏級
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void HP_Agent_SetFreeBufferObjPool(IntPtr pAgent, uint dwFreeBufferObjPool);
+
+ ///
+ /// 璁剧疆 Socket 缂撳瓨姹犲洖鏀堕榾鍊硷紙閫氬父璁剧疆涓 Socket 缂撳瓨姹犲ぇ灏忕殑 3 鍊嶏級
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void HP_Agent_SetFreeSocketObjHold(IntPtr pAgent, uint dwFreeSocketObjHold);
+
+ ///
+ /// 璁剧疆鍐呭瓨鍧楃紦瀛樻睜鍥炴敹闃鍊硷紙閫氬父璁剧疆涓哄唴瀛樺潡缂撳瓨姹犲ぇ灏忕殑 3 鍊嶏級
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void HP_Agent_SetFreeBufferObjHold(IntPtr pAgent, uint dwFreeBufferObjHold);
+
+ ///
+ /// 璁剧疆宸ヤ綔绾跨▼鏁伴噺锛堥氬父璁剧疆涓 2 * CPU + 2锛
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void HP_Agent_SetWorkerThreadCount(IntPtr pAgent, uint dwWorkerThreadCount);
+
+ ///
+ /// 璁剧疆鏄惁鏍囪闈欓粯鏃堕棿锛堣缃负 TRUE 鏃 DisconnectSilenceConnections() 鍜 GetSilencePeriod() 鎵嶆湁鏁堬紝榛樿锛欶ALSE锛
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void HP_Agent_SetMarkSilence(IntPtr pAgent, bool bMarkSilence);
+
+ ///
+ /// 鑾峰彇 Socket 缂撳瓨瀵硅薄閿佸畾鏃堕棿
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern uint HP_Agent_GetFreeSocketObjLockTime(IntPtr pAgent);
+
+ ///
+ /// 鑾峰彇 Socket 缂撳瓨姹犲ぇ灏
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern uint HP_Agent_GetFreeSocketObjPool(IntPtr pAgent);
+
+ ///
+ /// 鑾峰彇鍐呭瓨鍧楃紦瀛樻睜澶у皬
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern uint HP_Agent_GetFreeBufferObjPool(IntPtr pAgent);
+
+ ///
+ /// 鑾峰彇 Socket 缂撳瓨姹犲洖鏀堕榾鍊
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern uint HP_Agent_GetFreeSocketObjHold(IntPtr pAgent);
+
+ ///
+ /// 鑾峰彇鍐呭瓨鍧楃紦瀛樻睜鍥炴敹闃鍊
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern uint HP_Agent_GetFreeBufferObjHold(IntPtr pAgent);
+
+ ///
+ /// 鑾峰彇宸ヤ綔绾跨▼鏁伴噺
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern uint HP_Agent_GetWorkerThreadCount(IntPtr pAgent);
+
+ ///
+ /// 妫娴嬫槸鍚︽爣璁伴潤榛樻椂闂
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern bool HP_Agent_IsMarkSilence(IntPtr pAgent);
+
+ /**********************************************************************************/
+ /***************************** TCP Agent 灞炴ц闂柟娉 *****************************/
+
+ ///
+ /// 缃槸鍚﹀惎鐢ㄥ湴鍧閲嶇敤鏈哄埗锛堥粯璁わ細涓嶅惎鐢級
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void HP_TcpAgent_SetReuseAddress(IntPtr pAgent, bool bReuseAddress);
+
+ ///
+ /// 妫娴嬫槸鍚﹀惎鐢ㄥ湴鍧閲嶇敤鏈哄埗
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern bool HP_TcpAgent_IsReuseAddress(IntPtr pAgent);
+
+ ///
+ /// 璁剧疆閫氫俊鏁版嵁缂撳啿鍖哄ぇ灏忥紙鏍规嵁骞冲潎閫氫俊鏁版嵁鍖呭ぇ灏忚皟鏁磋缃紝閫氬父璁剧疆涓 1024 鐨勫嶆暟锛
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void HP_TcpAgent_SetSocketBufferSize(IntPtr pAgent, uint dwSocketBufferSize);
+
+ ///
+ /// 璁剧疆蹇冭烦鍖呴棿闅旓紙姣锛0 鍒欎笉鍙戦佸績璺冲寘锛
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void HP_TcpAgent_SetKeepAliveTime(IntPtr pAgent, uint dwKeepAliveTime);
+
+ ///
+ /// 璁剧疆蹇冭烦纭鍖呮娴嬮棿闅旓紙姣锛0 涓嶅彂閫佸績璺冲寘锛屽鏋滆秴杩囪嫢骞叉 [榛樿锛歐inXP 5 娆, Win7 10 娆 妫娴嬩笉鍒板績璺崇‘璁ゅ寘鍒欒涓哄凡鏂嚎锛
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void HP_TcpAgent_SetKeepAliveInterval(IntPtr pAgent, uint dwKeepAliveInterval);
+
+ ///
+ /// 鑾峰彇閫氫俊鏁版嵁缂撳啿鍖哄ぇ灏
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern uint HP_TcpAgent_GetSocketBufferSize(IntPtr pAgent);
+
+ ///
+ /// 鑾峰彇蹇冭烦妫鏌ユ鏁
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern uint HP_TcpAgent_GetKeepAliveTime(IntPtr pAgent);
+
+ ///
+ /// 鑾峰彇蹇冭烦妫鏌ラ棿闅
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern uint HP_TcpAgent_GetKeepAliveInterval(IntPtr pAgent);
+
+ /***************************************************************************************/
+ /***************************** TCP Pull Server 缁勪欢鎿嶄綔鏂规硶 *****************************/
+
+ ///
+ /// 鎶撳彇鏁版嵁
+ /// 鐢ㄦ埛閫氳繃璇ユ柟娉曚粠 Socket 缁勪欢涓姄鍙栨暟鎹
+ ///
+ ///
+ /// 杩炴帴 ID
+ /// 鏁版嵁鎶撳彇缂撳啿鍖
+ /// 鎶撳彇鏁版嵁闀垮害
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern FetchResult HP_TcpPullServer_Fetch(IntPtr pServer, IntPtr connId, IntPtr pBuffer, int length);
+
+ ///
+ /// 绐ユ帰鏁版嵁锛堜笉浼氱Щ闄ょ紦鍐插尯鏁版嵁锛
+ /// 鎻忚堪锛氱敤鎴烽氳繃璇ユ柟娉曚粠 Socket 缁勪欢涓鎺㈡暟鎹
+ ///
+ ///
+ /// 杩炴帴 ID
+ /// 绐ユ帰缂撳啿鍖
+ /// 绐ユ帰鏁版嵁闀垮害
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern FetchResult HP_TcpPullServer_Peek(IntPtr pServer, IntPtr connId, IntPtr pBuffer, int length);
+
+ /***************************************************************************************/
+ /***************************** TCP Pull Server 灞炴ц闂柟娉 *****************************/
+
+ /***************************************************************************************/
+ /***************************** TCP Pull Client 缁勪欢鎿嶄綔鏂规硶 *****************************/
+
+ ///
+ /// 鎶撳彇鏁版嵁
+ /// 鐢ㄦ埛閫氳繃璇ユ柟娉曚粠 Socket 缁勪欢涓姄鍙栨暟鎹
+ ///
+ ///
+ /// 杩炴帴 ID
+ /// 鏁版嵁鎶撳彇缂撳啿鍖
+ /// 鎶撳彇鏁版嵁闀垮害
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern FetchResult HP_TcpPullClient_Fetch(IntPtr pClient, IntPtr pBuffer, int length);
+
+ ///
+ /// 鍚嶇О锛氱鎺㈡暟鎹紙涓嶄細绉婚櫎缂撳啿鍖烘暟鎹級
+ /// 鎻忚堪锛氱敤鎴烽氳繃璇ユ柟娉曚粠 Socket 缁勪欢涓鎺㈡暟鎹
+ ///
+ ///
+ /// 杩炴帴 ID
+ /// 鏁版嵁鎶撳彇缂撳啿鍖
+ /// 鎶撳彇鏁版嵁闀垮害
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern FetchResult HP_TcpPullClient_Peek(IntPtr pClient, IntPtr pBuffer, int length);
+
+ /***************************************************************************************/
+ /***************************** TCP Pull Client 灞炴ц闂柟娉 *****************************/
+
+ /***************************************************************************************/
+ /***************************** TCP Pull Agent 缁勪欢鎿嶄綔鏂规硶 *****************************/
+
+ ///
+ /// 鎶撳彇鏁版嵁
+ /// 鐢ㄦ埛閫氳繃璇ユ柟娉曚粠 Socket 缁勪欢涓姄鍙栨暟鎹
+ ///
+ ///
+ /// 杩炴帴 ID
+ /// 鏁版嵁鎶撳彇缂撳啿鍖
+ /// 鎶撳彇鏁版嵁闀垮害
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern FetchResult HP_TcpPullAgent_Fetch(IntPtr pAgent, IntPtr connId, IntPtr pBuffer, int length);
+
+ ///
+ /// 鍚嶇О锛氱鎺㈡暟鎹紙涓嶄細绉婚櫎缂撳啿鍖烘暟鎹級
+ /// 鎻忚堪锛氱敤鎴烽氳繃璇ユ柟娉曚粠 Socket 缁勪欢涓鎺㈡暟鎹
+ ///
+ ///
+ /// 杩炴帴 ID
+ /// 鏁版嵁鎶撳彇缂撳啿鍖
+ /// 鎶撳彇鏁版嵁闀垮害
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern FetchResult HP_TcpPullAgent_Peek(IntPtr pAgent, IntPtr connId, IntPtr pBuffer, int length);
+
+ /***************************************************************************************/
+ /***************************** TCP Pull Agent 灞炴ц闂柟娉 *****************************/
+
+ /***************************************************************************************/
+
+ /***************************************************************************************/
+ /***************************** TCP Pack Server 缁勪欢鎿嶄綔鏂规硶 *****************************/
+
+ /***************************************************************************************/
+ /***************************** TCP Pack Server 灞炴ц闂柟娉 *****************************/
+
+ ///
+ /// 璁剧疆鏁版嵁鍖呮渶澶ч暱搴︼紙鏈夋晥鏁版嵁鍖呮渶澶ч暱搴︿笉鑳借秴杩 4194303/0x3FFFFF 瀛楄妭锛岄粯璁わ細262144/0x40000锛
+ ///
+ ///
+ /// 鏈夋晥鏁版嵁鍖呮渶澶ч暱搴︿笉鑳借秴杩 4194303/0x3FFFFF 瀛楄妭锛岄粯璁わ細262144/0x40000
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void HP_TcpPackServer_SetMaxPackSize(IntPtr pServer, uint dwMaxPackSize);
+
+ ///
+ /// 璁剧疆鍖呭ご鏍囪瘑锛堟湁鏁堝寘澶存爣璇嗗彇鍊艰寖鍥 0 ~ 1023/0x3FF锛屽綋鍖呭ご鏍囪瘑涓 0 鏃朵笉鏍¢獙鍖呭ご锛岄粯璁わ細0锛
+ ///
+ ///
+ /// 鏈夋晥鍖呭ご鏍囪瘑鍙栧艰寖鍥 0 ~ 1023/0x3FF锛屽綋鍖呭ご鏍囪瘑涓 0 鏃朵笉鏍¢獙鍖呭ご锛岄粯璁わ細0
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void HP_TcpPackServer_SetPackHeaderFlag(IntPtr pServer, ushort usPackHeaderFlag);
+
+ ///
+ /// 鑾峰彇鏁版嵁鍖呮渶澶ч暱搴
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern uint HP_TcpPackServer_GetMaxPackSize(IntPtr pServer);
+
+ ///
+ /// 鑾峰彇鍖呭ご鏍囪瘑
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern ushort HP_TcpPackServer_GetPackHeaderFlag(IntPtr pServer);
+ /***************************************************************************************/
+ /***************************** TCP Pack Agent 缁勪欢鎿嶄綔鏂规硶 *****************************/
+
+ /***************************************************************************************/
+ /***************************** TCP Pack Agent 灞炴ц闂柟娉 *****************************/
+
+ ///
+ /// 璁剧疆鏁版嵁鍖呮渶澶ч暱搴︼紙鏈夋晥鏁版嵁鍖呮渶澶ч暱搴︿笉鑳借秴杩 524287/0x7FFFF 瀛楄妭锛岄粯璁わ細262144/0x40000锛
+ ///
+ ///
+ /// 鏈夋晥鏁版嵁鍖呮渶澶ч暱搴︿笉鑳借秴杩 524287/0x7FFFF 瀛楄妭锛岄粯璁わ細262144/0x40000
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void HP_TcpPackAgent_SetMaxPackSize(IntPtr pAgent, uint dwMaxPackSize);
+
+ ///
+ /// 璁剧疆鍖呭ご鏍囪瘑锛堟湁鏁堝寘澶存爣璇嗗彇鍊艰寖鍥 0 ~ 8191/0x1FFF锛屽綋鍖呭ご鏍囪瘑涓 0 鏃朵笉鏍¢獙鍖呭ご锛岄粯璁わ細0锛
+ ///
+ ///
+ /// 鏈夋晥鍖呭ご鏍囪瘑鍙栧艰寖鍥 0 ~ 8191/0x1FFF锛屽綋鍖呭ご鏍囪瘑涓 0 鏃朵笉鏍¢獙鍖呭ご锛岄粯璁わ細0
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void HP_TcpPackAgent_SetPackHeaderFlag(IntPtr pAgent, ushort usPackHeaderFlag);
+
+ ///
+ /// 鑾峰彇鏁版嵁鍖呮渶澶ч暱搴
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern uint HP_TcpPackAgent_GetMaxPackSize(IntPtr pAgent);
+
+ ///
+ /// 鑾峰彇鍖呭ご鏍囪瘑
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern ushort HP_TcpPackAgent_GetPackHeaderFlag(IntPtr pAgent);
+ /***************************************************************************************/
+ /***************************** TCP Pack Client 缁勪欢鎿嶄綔鏂规硶 *****************************/
+
+ /***************************************************************************************/
+ /***************************** TCP Pack Client 灞炴ц闂柟娉 *****************************/
+ ///
+ /// 璁剧疆鏁版嵁鍖呮渶澶ч暱搴︼紙鏈夋晥鏁版嵁鍖呮渶澶ч暱搴︿笉鑳借秴杩 524287/0x7FFFF 瀛楄妭锛岄粯璁わ細262144/0x40000锛
+ ///
+ ///
+ /// 鏈夋晥鏁版嵁鍖呮渶澶ч暱搴︿笉鑳借秴杩 524287/0x7FFFF 瀛楄妭锛岄粯璁わ細262144/0x40000
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void HP_TcpPackClient_SetMaxPackSize(IntPtr pClient, uint dwMaxPackSize);
+
+ ///
+ /// 璁剧疆鍖呭ご鏍囪瘑锛堟湁鏁堝寘澶存爣璇嗗彇鍊艰寖鍥 0 ~ 8191/0x1FFF锛屽綋鍖呭ご鏍囪瘑涓 0 鏃朵笉鏍¢獙鍖呭ご锛岄粯璁わ細0锛
+ ///
+ ///
+ /// 鏈夋晥鍖呭ご鏍囪瘑鍙栧艰寖鍥 0 ~ 8191/0x1FFF锛屽綋鍖呭ご鏍囪瘑涓 0 鏃朵笉鏍¢獙鍖呭ご锛岄粯璁わ細0
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern void HP_TcpPackClient_SetPackHeaderFlag(IntPtr pClient, ushort usPackHeaderFlag);
+
+ ///
+ /// 鑾峰彇鏁版嵁鍖呮渶澶ч暱搴
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern uint HP_TcpPackClient_GetMaxPackSize(IntPtr pClient);
+
+ ///
+ /// 鑾峰彇鍖呭ご鏍囪瘑
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern ushort HP_TcpPackClient_GetPackHeaderFlag(IntPtr pClient);
+ /***************************************************************************************/
+ /*************************************** 鍏跺畠鏂规硶 ***************************************/
+
+ ///
+ /// 鑾峰彇閿欒鎻忚堪鏂囨湰
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern IntPtr HP_GetSocketErrorDesc(SocketError enCode);
+
+ ///
+ /// 璋冪敤绯荤粺鐨 ::GetLastError() 鏂规硶鑾峰彇绯荤粺閿欒浠g爜
+ ///
+ ///
+ public static int SYS_GetLastError()
+ {
+ return Marshal.GetLastWin32Error();
+ }
+
+ ///
+ /// 璋冪敤绯荤粺鐨 ::WSAGetLastError() 鏂规硶鑾峰彇閫氫俊閿欒浠g爜
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH, SetLastError = true)]
+ public static extern int SYS_WSAGetLastError();
+
+ ///
+ /// 璋冪敤绯荤粺鐨 setsockopt()
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH, SetLastError = true)]
+ public static extern int SYS_SetSocketOption(IntPtr sock, int level, int name, IntPtr val, int len);
+
+ ///
+ /// 璋冪敤绯荤粺鐨 getsockopt()
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH, SetLastError = true)]
+ public static extern int SYS_GetSocketOption(IntPtr sock, int level, int name, IntPtr val, ref int len);
+
+ ///
+ /// 璋冪敤绯荤粺鐨 ioctlsocket()
+ ///
+ ///
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH, SetLastError = true)]
+ public static extern int SYS_IoctlSocket(IntPtr sock, long cmd, IntPtr arg);
+
+ ///
+ /// 璋冪敤绯荤粺鐨 ::WSAIoctl()
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH, SetLastError = true)]
+ public static extern int SYS_WSAIoctl(IntPtr sock, uint dwIoControlCode, IntPtr lpvInBuffer, uint cbInBuffer,
+ IntPtr lpvOutBuffer, uint cbOutBuffer, uint lpcbBytesReturned);
+
+ ///
+ /// 鑾峰彇 SOCKET 鏈湴鍦板潃淇℃伅
+ ///
+ ///
+ ///
+ /// 浼犲叆浼犲嚭鍊,澶у皬鏈濂藉湪222.222.222.222鐨勯暱搴︿互涓
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern bool SYS_GetSocketLocalAddress(IntPtr pSocket, [MarshalAs(UnmanagedType.LPWStr)] StringBuilder lpszAddress, ref int piAddressLen, ref ushort pusPort);
+
+ ///
+ /// 鑾峰彇 SOCKET 杩滅▼鍦板潃淇℃伅
+ ///
+ ///
+ ///
+ /// 浼犲叆浼犲嚭鍊,澶у皬鏈濂藉湪222.222.222.222鐨勯暱搴︿互涓
+ ///
+ ///
+ [DllImport(HPSOCKET_DLL_PATH)]
+ public static extern bool HP_Server_GetRemoteAddress(IntPtr pSocket, [MarshalAs(UnmanagedType.LPWStr)] StringBuilder lpszAddress, ref int piAddressLen, ref ushort pusPort);
+
+
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/TcpAgent.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/TcpAgent.cs
new file mode 100644
index 000000000..6ae64741f
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/TcpAgent.cs
@@ -0,0 +1,1081 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+using System.Runtime.Serialization;
+using System.Runtime.Serialization.Formatters.Binary;
+using System.Linq;
+using System.Text;
+using System.IO;
+
+namespace HPSocketCS
+{
+ public class TcpAgentEvent
+ {
+ public delegate HandleResult OnConnectEventHandler(IntPtr connId /* IntPtr pClient */);
+ public delegate HandleResult OnSendEventHandler(IntPtr connId, byte[] bytes);
+ public delegate HandleResult OnReceiveEventHandler(IntPtr connId, byte[] bytes);
+ public delegate HandleResult OnCloseEventHandler(IntPtr connId, SocketOperation enOperation, int errorCode);
+ public delegate HandleResult OnShutdownEventHandler();
+ public delegate HandleResult OnPrepareConnectEventHandler(IntPtr connId /* IntPtr pClient */, uint socket);
+ }
+ public class TcpAgent
+ {
+ protected IntPtr _pAgent = IntPtr.Zero;
+
+ protected IntPtr pAgent
+ {
+ get
+ {
+ //if (_pClient == IntPtr.Zero)
+ //{
+ // throw new Exception("pClient == 0");
+ //}
+
+ return _pAgent;
+ }
+
+ set
+ {
+ _pAgent = value;
+ }
+ }
+
+
+ protected IntPtr pListener = IntPtr.Zero;
+
+ ///
+ /// 杩炴帴浜嬩欢
+ ///
+ public TcpAgentEvent.OnConnectEventHandler OnConnect;
+ ///
+ /// 鏁版嵁鍙戦佷簨浠
+ ///
+ public TcpAgentEvent.OnSendEventHandler OnSend;
+ ///
+ /// 鍑嗗杩炴帴浜嬩欢
+ ///
+ public TcpAgentEvent.OnPrepareConnectEventHandler OnPrepareConnect;
+ ///
+ /// 鏁版嵁鍒拌揪浜嬩欢
+ ///
+ public TcpAgentEvent.OnReceiveEventHandler OnReceive;
+ ///
+ /// 杩炴帴鍏抽棴浜嬩欢
+ ///
+ public TcpAgentEvent.OnCloseEventHandler OnClose;
+ ///
+ /// 鏈嶅姟鍏抽棴浜嬩欢
+ ///
+ public TcpAgentEvent.OnShutdownEventHandler OnShutdown;
+
+
+ protected bool IsCreate = false;
+
+ public TcpAgent()
+ {
+ CreateListener();
+ }
+
+ ~TcpAgent()
+ {
+ Destroy();
+ }
+
+ ///
+ /// 鍒涘缓socket鐩戝惉&鏈嶅姟缁勪欢
+ ///
+ ///
+ protected virtual bool CreateListener()
+ {
+ if (IsCreate == true || pListener != IntPtr.Zero || pAgent != IntPtr.Zero)
+ {
+ return false;
+ }
+
+ pListener = Sdk.Create_HP_TcpAgentListener();
+ if (pListener == IntPtr.Zero)
+ {
+ return false;
+ }
+
+ pAgent = Sdk.Create_HP_TcpAgent(pListener);
+ if (pAgent == IntPtr.Zero)
+ {
+ return false;
+ }
+
+ IsCreate = true;
+
+ return true;
+ }
+
+ ///
+ /// 缁堟鏈嶅姟骞堕噴鏀捐祫婧
+ ///
+ public virtual void Destroy()
+ {
+ Stop();
+
+ if (pAgent != IntPtr.Zero)
+ {
+ Sdk.Destroy_HP_TcpAgent(pAgent);
+ pAgent = IntPtr.Zero;
+ }
+ if (pListener != IntPtr.Zero)
+ {
+ Sdk.Destroy_HP_TcpAgentListener(pListener);
+ pListener = IntPtr.Zero;
+ }
+
+ IsCreate = false;
+ }
+
+ ///
+ /// 鍚姩閫氳缁勪欢
+ /// 鍚姩瀹屾垚鍚庡彲寮濮嬭繛鎺ヨ繙绋嬫湇鍔″櫒
+ ///
+ /// 缁戝畾鍦板潃
+ /// 鏄惁寮傛
+ ///
+ public bool Start(string address, bool async = true)
+ {
+ if (string.IsNullOrEmpty(address) == true)
+ {
+ throw new Exception("address is null");
+ }
+
+ if (IsCreate == false)
+ {
+ return false;
+ }
+
+ if (IsStarted == true)
+ {
+ return false;
+ }
+
+ SetCallback();
+
+ return Sdk.HP_Agent_Start(pAgent, address, async);
+ }
+
+ ///
+ /// 鍋滄閫氳缁勪欢
+ ///
+ ///
+ public bool Stop()
+ {
+ if (IsStarted == false)
+ {
+ return false;
+ }
+ return Sdk.HP_Agent_Stop(pAgent);
+ }
+
+
+ ///
+ /// 杩炴帴鏈嶅姟鍣紝杩炴帴鎴愬姛鍚 IAgentListener 浼氭帴鏀跺埌 OnConnect() 浜嬩欢
+ ///
+ ///
+ ///
+ ///
+ ///
+ public bool Connect(string address, ushort port, ref IntPtr connId)
+ {
+ return Sdk.HP_Agent_Connect(pAgent, address, port, ref connId);
+ }
+
+ ///
+ /// 鍙戦佹暟鎹
+ ///
+ ///
+ ///
+ ///
+ ///
+ public bool Send(IntPtr connId, byte[] bytes, int size)
+ {
+ return Sdk.HP_Agent_Send(pAgent, connId, bytes, size);
+ }
+
+
+ ///
+ /// 鍙戦佹暟鎹
+ ///
+ ///
+ ///
+ ///
+ ///
+ public bool Send(IntPtr connId, T obj)
+ {
+ byte[] buffer = StructureToByte(obj);
+ return Send(connId, buffer, buffer.Length);
+ }
+
+ ///
+ /// 搴忓垪鍖栧璞″悗鍙戦佹暟鎹,搴忓垪鍖栧璞℃墍灞炵被蹇呴』鏍囪[Serializable]
+ ///
+ ///
+ ///
+ ///
+ ///
+ public bool SendBySerializable(IntPtr connId, object obj)
+ {
+ byte[] buffer = ObjectToBytes(obj);
+ return Send(connId, buffer, buffer.Length);
+ }
+
+ ///
+ /// 鍙戦佹暟鎹
+ ///
+ ///
+ ///
+ ///
+ ///
+ public bool Send(IntPtr connId, IntPtr bufferPtr, int size)
+ {
+ return Sdk.HP_Agent_Send(pAgent, connId, bufferPtr, size);
+ }
+
+ ///
+ /// 鍙戦佹暟鎹
+ ///
+ ///
+ ///
+ /// 閽堝bytes鐨勫亸绉
+ /// 鍙戝澶
+ ///
+ public bool Send(IntPtr connId, byte[] bytes, int offset, int size)
+ {
+ return Sdk.HP_Agent_SendPart(pAgent, connId, bytes, size, offset);
+ }
+
+ ///
+ /// 鍙戦佹暟鎹
+ ///
+ ///
+ ///
+ /// 閽堝bufferPtr鐨勫亸绉
+ /// 鍙戝澶
+ ///
+ public bool Send(IntPtr connId, IntPtr bufferPtr, int offset, int size)
+ {
+ return Sdk.HP_Agent_SendPart(pAgent, connId, bufferPtr, size, offset);
+ }
+
+ ///
+ /// 鍙戦佸缁勬暟鎹
+ /// 鍚戞寚瀹氳繛鎺ュ彂閫佸缁勬暟鎹
+ /// TCP - 椤哄簭鍙戦佹墍鏈夋暟鎹寘
+ ///
+ /// 杩炴帴 ID
+ /// 鍙戦佺紦鍐插尯鏁扮粍
+ /// 鍙戦佺紦鍐插尯鏁扮洰
+ /// TRUE.鎴愬姛,FALSE.澶辫触锛屽彲閫氳繃 SYSGetLastError() 鑾峰彇 Windows 閿欒浠g爜
+ public bool SendPackets(IntPtr connId, WSABUF[] pBuffers, int count)
+ {
+ return Sdk.HP_Agent_SendPackets(pAgent, connId, pBuffers, count);
+ }
+
+ ///
+ /// 鍙戦佸缁勬暟鎹
+ /// 鍚戞寚瀹氳繛鎺ュ彂閫佸缁勬暟鎹
+ /// TCP - 椤哄簭鍙戦佹墍鏈夋暟鎹寘
+ ///
+ /// 杩炴帴 ID
+ /// 鍙戦佺紦鍐插尯鏁扮粍
+ /// 鍙戦佺紦鍐插尯鏁扮洰
+ /// TRUE.鎴愬姛,FALSE.澶辫触锛屽彲閫氳繃 SYSGetLastError() 鑾峰彇 Windows 閿欒浠g爜
+ public bool SendPackets(IntPtr connId, T[] objects)
+ {
+ bool ret = false;
+
+ WSABUF[] buffer = new WSABUF[objects.Length];
+ IntPtr[] ptrs = new IntPtr[buffer.Length];
+ try
+ {
+
+ for (int i = 0; i < objects.Length; i++)
+ {
+ buffer[i].Length = Marshal.SizeOf(typeof(T));
+
+ ptrs[i] = Marshal.AllocHGlobal(buffer[i].Length);
+ Marshal.StructureToPtr(objects[i], ptrs[i], true);
+
+ buffer[i].Buffer = ptrs[i];
+ }
+ ret = SendPackets(connId, buffer, buffer.Length);
+ }
+ catch (Exception ex)
+ {
+ throw ex;
+ }
+ finally
+ {
+ for (int i = 0; i < ptrs.Length; i++)
+ {
+ if (ptrs[i] != IntPtr.Zero)
+ {
+ Marshal.FreeHGlobal(ptrs[i]);
+ }
+ }
+ }
+
+ return ret;
+ }
+
+ ///
+ /// 鍚嶇О锛氬彂閫佸皬鏂囦欢
+ /// 鎻忚堪锛氬悜鎸囧畾杩炴帴鍙戦 4096 KB 浠ヤ笅鐨勫皬鏂囦欢
+ ///
+ ///
+ /// 鏂囦欢璺緞
+ /// 澶撮儴闄勫姞鏁版嵁
+ /// 灏鹃儴闄勫姞鏁版嵁
+ /// TRUE.鎴愬姛,FALSE.澶辫触锛屽彲閫氳繃 SYSGetLastError() 鑾峰彇 Windows 閿欒浠g爜
+ public bool SendSmallFile(IntPtr connId, string filePath, ref WSABUF head, ref WSABUF tail)
+ {
+ return Sdk.HP_TcpAgent_SendSmallFile(pAgent, connId, filePath, ref head, ref tail);
+ }
+
+ ///
+ /// 鍚嶇О锛氬彂閫佸皬鏂囦欢
+ /// 鎻忚堪锛氬悜鎸囧畾杩炴帴鍙戦 4096 KB 浠ヤ笅鐨勫皬鏂囦欢
+ ///
+ ///
+ /// 鏂囦欢璺緞
+ /// 澶撮儴闄勫姞鏁版嵁,鍙互涓簄ull
+ /// 灏鹃儴闄勫姞鏁版嵁,鍙互涓簄ull
+ /// TRUE.鎴愬姛,FALSE.澶辫触锛屽彲閫氳繃 SYSGetLastError() 鑾峰彇 Windows 閿欒浠g爜
+ public bool SendSmallFile(IntPtr connId, string filePath, byte[] head, byte[] tail)
+ {
+ IntPtr pHead = IntPtr.Zero;
+ IntPtr pTail = IntPtr.Zero;
+ WSABUF wsaHead = new WSABUF() { Length = 0, Buffer = pHead };
+ WSABUF wsatail = new WSABUF() { Length = 0, Buffer = pTail };
+ if (head != null)
+ {
+ wsaHead.Length = head.Length;
+ wsaHead.Buffer = Marshal.UnsafeAddrOfPinnedArrayElement(head, 0);
+ }
+
+ if (tail != null)
+ {
+ wsaHead.Length = tail.Length;
+ wsaHead.Buffer = Marshal.UnsafeAddrOfPinnedArrayElement(tail, 0);
+ }
+
+ return SendSmallFile(connId, filePath, ref wsaHead, ref wsatail);
+ }
+
+ ///
+ /// 鍚嶇О锛氬彂閫佸皬鏂囦欢
+ /// 鎻忚堪锛氬悜鎸囧畾杩炴帴鍙戦 4096 KB 浠ヤ笅鐨勫皬鏂囦欢
+ ///
+ ///
+ /// 鏂囦欢璺緞
+ /// 澶撮儴闄勫姞鏁版嵁,鍙互涓簄ull
+ /// 灏鹃儴闄勫姞鏁版嵁,鍙互涓簄ull
+ /// TRUE.鎴愬姛,FALSE.澶辫触锛屽彲閫氳繃 SYSGetLastError() 鑾峰彇 Windows 閿欒浠g爜
+ public bool SendSmallFile(IntPtr connId, string filePath, T1 head, T2 tail)
+ {
+
+ byte[] headBuffer = null;
+ if (head != null)
+ {
+ headBuffer = StructureToByte(head);
+ }
+
+ byte[] tailBuffer = null;
+ if (tail != null)
+ {
+ tailBuffer = StructureToByte(tail);
+ }
+ return SendSmallFile(connId, filePath, headBuffer, tailBuffer);
+ }
+
+ ///
+ /// 鏂紑鏌愪釜杩炴帴
+ ///
+ ///
+ /// 寮哄埗
+ ///
+ public bool Disconnect(IntPtr connId, bool force = true)
+ {
+ return Sdk.HP_Agent_Disconnect(pAgent, connId, force);
+ }
+
+ ///
+ /// 鏂紑瓒呰繃鎸囧畾鏃堕棿鐨勮繛鎺
+ ///
+ /// 姣
+ /// 寮哄埗
+ ///
+ public bool DisconnectLongConnections(uint period, bool force = true)
+ {
+ return Sdk.HP_Agent_DisconnectLongConnections(pAgent, period, force);
+ }
+
+ ///
+ /// 鏂紑瓒呰繃鎸囧畾鏃堕暱鐨勯潤榛樿繛鎺
+ ///
+ /// 姣
+ /// 寮哄埗
+ ///
+ public bool DisconnectSilenceConnections(uint period, bool force = true)
+ {
+ return Sdk.HP_Agent_DisconnectSilenceConnections(pAgent, period, force);
+ }
+
+ ///
+ /// 璁剧疆杩炴帴鐨勯檮鍔犳暟鎹
+ ///
+ ///
+ ///
+ ///
+ public bool SetConnectionExtra(IntPtr connId, object obj)
+ {
+
+ IntPtr ptr = IntPtr.Zero;
+ // 閲婃斁闄勫姞鏁版嵁
+ if (Sdk.HP_Agent_GetConnectionExtra(pAgent, connId, ref ptr) && ptr != IntPtr.Zero)
+ {
+ Marshal.FreeHGlobal(ptr);
+ ptr = IntPtr.Zero;
+ }
+
+ if (obj != null)
+ {
+ // 璁剧疆闄勫姞鏁版嵁
+ ptr = Marshal.AllocHGlobal(Marshal.SizeOf(obj));
+ Marshal.StructureToPtr(obj, ptr, false);
+ }
+ return Sdk.HP_Agent_SetConnectionExtra(pAgent, connId, ptr);
+ }
+
+ ///
+ /// 鑾峰彇闄勫姞鏁版嵁
+ /// 濡傝缃殑鏄釜缁撴瀯浣/绫诲璞,鍙互鐢 Type objA = (Type)Marshal.PtrToStructure(ptr, typeof(Type)) 鑾峰彇
+ /// 鍏朵腑Type鏄粨鏋勪綋/绫诲悕,ptr鏄鏂规硶鐨勪紶鍑哄,鍦ㄨ鏂规硶杩斿洖涓簍rue鐨勬椂鍊欏彲鐢
+ ///
+ ///
+ ///
+ ///
+ public bool GetConnectionExtra(IntPtr connId, ref IntPtr ptr)
+ {
+ return Sdk.HP_Agent_GetConnectionExtra(pAgent, connId, ref ptr) && ptr != IntPtr.Zero;
+ }
+
+ ///
+ /// 鑾峰彇閿欒鐮
+ ///
+ public SocketError ErrorCode
+ {
+ get
+ {
+ return Sdk.HP_Agent_GetLastError(pAgent);
+ }
+ }
+
+ ///
+ /// 鑾峰彇閿欒淇℃伅
+ ///
+ public string ErrorMessage
+ {
+ get
+ {
+ IntPtr ptr = Sdk.HP_Agent_GetLastErrorDesc(pAgent);
+ string desc = Marshal.PtrToStringUni(ptr);
+ return desc;
+ }
+ }
+
+
+ ///
+ /// 鑾峰彇杩炴帴涓湭鍙戝嚭鏁版嵁鐨勯暱搴
+ ///
+ ///
+ ///
+ ///
+ public bool GetPendingDataLength(IntPtr connId, ref int length)
+ {
+ return Sdk.HP_Agent_GetPendingDataLength(pAgent, connId, ref length);
+ }
+
+ // 鏄惁鍚姩
+ public bool IsStarted
+ {
+ get
+ {
+ if (pAgent == IntPtr.Zero)
+ {
+ return false;
+ }
+ return Sdk.HP_Agent_HasStarted(pAgent);
+ }
+ }
+
+ ///
+ /// 鐘舵
+ ///
+ public ServiceState State
+ {
+ get
+ {
+ return Sdk.HP_Agent_GetState(pAgent);
+ }
+ }
+
+ public uint ConnectionCount
+ {
+ get
+ {
+ return Sdk.HP_Agent_GetConnectionCount(pAgent);
+ }
+ }
+
+ ///
+ /// 鑾峰彇鎵鏈夎繛鎺,鏈幏鍙栧埌杩炴帴杩斿洖null
+ ///
+ ///
+ public IntPtr[] GetAllConnectionIDs()
+ {
+ IntPtr[] arr = null;
+ do
+ {
+ uint count = ConnectionCount;
+ if (count == 0)
+ {
+ break;
+ }
+ arr = new IntPtr[count];
+ if (Sdk.HP_Agent_GetAllConnectionIDs(pAgent, arr, ref count))
+ {
+ if (arr.Length > count)
+ {
+ IntPtr[] newArr = new IntPtr[count];
+ Array.Copy(arr, newArr, count);
+ arr = newArr;
+ }
+ break;
+ }
+ } while (true);
+
+ return arr;
+ }
+
+ ///
+ /// 鑾峰彇鏌愪釜杩炴帴鐨勬湰鍦板湴鍧淇℃伅
+ ///
+ ///
+ ///
+ ///
+ public bool GetLocalAddress(IntPtr connId, ref string ip, ref ushort port)
+ {
+ int ipLength = 40;
+
+ StringBuilder sb = new StringBuilder(ipLength);
+
+ bool ret = Sdk.HP_Agent_GetLocalAddress(pAgent, connId, sb, ref ipLength, ref port);
+ if (ret == true)
+ {
+ ip = sb.ToString();
+ }
+ return ret;
+ }
+
+ ///
+ /// 鑾峰彇鏌愪釜杩炴帴鐨勮繙绋嬪湴鍧淇℃伅
+ ///
+ ///
+ public bool GetRemoteAddress(IntPtr connId, ref string ip, ref ushort port)
+ {
+ int ipLength = 40;
+
+ StringBuilder sb = new StringBuilder(ipLength);
+
+ bool ret = Sdk.HP_Agent_GetRemoteAddress(pAgent, connId, sb, ref ipLength, ref port);
+ if (ret == true)
+ {
+ ip = sb.ToString();
+ }
+ return ret;
+ }
+
+ ///
+ /// 鑾峰彇鎸囧畾杩炴帴鐨勮繛鎺ユ椂闀匡紙姣锛
+ ///
+ ///
+ ///
+ ///
+ public bool GetConnectPeriod(IntPtr connId, ref uint period)
+ {
+ return Sdk.HP_Agent_GetConnectPeriod(pAgent, connId, ref period);
+ }
+
+ ///
+ /// 鑾峰彇鏌愪釜杩炴帴闈欓粯鏃堕棿锛堟绉掞級
+ ///
+ ///
+ ///
+ ///
+ public bool GetSilencePeriod(IntPtr connId, ref uint period)
+ {
+ return Sdk.HP_Agent_GetSilencePeriod(pAgent, connId, ref period);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////////////
+
+ ///
+ /// 鑾峰彇鎴栬缃槸鍚﹀惎鐢ㄥ湴鍧閲嶇敤鏈哄埗锛堥粯璁わ細涓嶅惎鐢級
+ ///
+ public bool IsReuseAddress
+ {
+ get
+ {
+ return Sdk.HP_TcpAgent_IsReuseAddress(pAgent);
+ }
+ set
+ {
+ Sdk.HP_TcpAgent_SetReuseAddress(pAgent, value);
+ }
+ }
+
+
+ ///
+ /// 璇诲彇鎴栬缃伐浣滅嚎绋嬫暟閲忥紙閫氬父璁剧疆涓 2 * CPU + 2锛
+ ///
+ public uint WorkerThreadCount
+ {
+ get
+ {
+ return Sdk.HP_Agent_GetWorkerThreadCount(pAgent);
+ }
+ set
+ {
+ Sdk.HP_Agent_SetWorkerThreadCount(pAgent, value);
+ }
+ }
+
+ ///
+ /// 璇诲彇鎴栬缃氫俊鏁版嵁缂撳啿鍖哄ぇ灏忥紙鏍规嵁骞冲潎閫氫俊鏁版嵁鍖呭ぇ灏忚皟鏁磋缃紝閫氬父璁剧疆涓 1024 鐨勫嶆暟锛
+ ///
+ public uint SocketBufferSize
+ {
+ get
+ {
+ return Sdk.HP_TcpAgent_GetSocketBufferSize(pAgent);
+ }
+ set
+ {
+ Sdk.HP_TcpAgent_SetSocketBufferSize(pAgent, value);
+ }
+ }
+
+ ///
+ /// 璇诲彇鎴栬缃 Socket 缂撳瓨瀵硅薄閿佸畾鏃堕棿锛堟绉掞紝鍦ㄩ攣瀹氭湡闂磋 Socket 缂撳瓨瀵硅薄涓嶈兘琚幏鍙栦娇鐢級
+ ///
+ public uint FreeSocketObjLockTime
+ {
+ get
+ {
+ return Sdk.HP_Agent_GetFreeSocketObjLockTime(pAgent);
+ }
+ set
+ {
+ Sdk.HP_Agent_SetFreeSocketObjLockTime(pAgent, value);
+ }
+ }
+
+ ///
+ /// 璇诲彇鎴栬缃 Socket 缂撳瓨姹犲ぇ灏忥紙閫氬父璁剧疆涓哄钩鍧囧苟鍙戣繛鎺ユ暟閲忕殑 1/3 - 1/2锛
+ ///
+ public uint FreeSocketObjPool
+ {
+ get
+ {
+ return Sdk.HP_Agent_GetFreeSocketObjPool(pAgent);
+ }
+ set
+ {
+ Sdk.HP_Agent_SetFreeSocketObjPool(pAgent, value);
+ }
+ }
+
+ ///
+ /// 璇诲彇鎴栬缃唴瀛樺潡缂撳瓨姹犲ぇ灏忥紙閫氬父璁剧疆涓 Socket 缂撳瓨姹犲ぇ灏忕殑 2 - 3 鍊嶏級
+ ///
+ public uint FreeBufferObjPool
+ {
+ get
+ {
+ return Sdk.HP_Agent_GetFreeBufferObjPool(pAgent);
+ }
+ set
+ {
+ Sdk.HP_Agent_SetFreeBufferObjPool(pAgent, value);
+ }
+ }
+
+ ///
+ /// 璇诲彇鎴栬缃 Socket 缂撳瓨姹犲洖鏀堕榾鍊硷紙閫氬父璁剧疆涓 Socket 缂撳瓨姹犲ぇ灏忕殑 3 鍊嶏級
+ ///
+ public uint FreeSocketObjHold
+ {
+ get
+ {
+ return Sdk.HP_Agent_GetFreeSocketObjHold(pAgent);
+ }
+ set
+ {
+ Sdk.HP_Agent_SetFreeSocketObjHold(pAgent, value);
+ }
+ }
+
+ ///
+ /// 璇诲彇鎴栬缃唴瀛樺潡缂撳瓨姹犲洖鏀堕榾鍊硷紙閫氬父璁剧疆涓哄唴瀛樺潡缂撳瓨姹犲ぇ灏忕殑 3 鍊嶏級
+ ///
+ public uint FreeBufferObjHold
+ {
+ get
+ {
+ return Sdk.HP_Agent_GetFreeBufferObjHold(pAgent);
+ }
+ set
+ {
+ Sdk.HP_Agent_SetFreeBufferObjHold(pAgent, value);
+ }
+ }
+
+ ///
+ /// 璇诲彇鎴栬缃績璺冲寘闂撮殧锛堟绉掞紝0 鍒欎笉鍙戦佸績璺冲寘锛夛級
+ ///
+ public uint KeepAliveTime
+ {
+ get
+ {
+ return Sdk.HP_TcpAgent_GetKeepAliveTime(pAgent);
+ }
+ set
+ {
+ Sdk.HP_TcpAgent_SetKeepAliveTime(pAgent, value);
+ }
+ }
+
+ ///
+ /// 璇诲彇鎴栬缃績璺崇‘璁ゅ寘妫娴嬮棿闅旓紙姣锛0 涓嶅彂閫佸績璺冲寘锛屽鏋滆秴杩囪嫢骞叉 [榛樿锛歐inXP 5 娆, Win7 10 娆 妫娴嬩笉鍒板績璺崇‘璁ゅ寘鍒欒涓哄凡鏂嚎锛
+ ///
+ public uint KeepAliveInterval
+ {
+ get
+ {
+ return Sdk.HP_TcpAgent_GetKeepAliveInterval(pAgent);
+ }
+ set
+ {
+ Sdk.HP_TcpAgent_SetKeepAliveInterval(pAgent, value);
+ }
+ }
+
+ ///
+ /// 璇诲彇鎴栬缃槸鍚︽爣璁伴潤榛樻椂闂达紙璁剧疆涓 TRUE 鏃 DisconnectSilenceConnections() 鍜 GetSilencePeriod() 鎵嶆湁鏁堬紝榛樿锛欶ALSE锛
+ ///
+ public bool IsMarkSilence
+ {
+ get
+ {
+ return Sdk.HP_Agent_IsMarkSilence(pAgent);
+ }
+ set
+ {
+ Sdk.HP_Agent_SetMarkSilence(pAgent, value);
+ }
+ }
+
+ ///
+ /// 璇诲彇鎴栬缃暟鎹彂閫佺瓥鐣
+ ///
+ public SendPolicy SendPolicy
+ {
+ get
+ {
+ return Sdk.HP_Agent_GetSendPolicy(pAgent);
+ }
+ set
+ {
+ Sdk.HP_Agent_SetSendPolicy(pAgent, value);
+ }
+ }
+
+ ///
+ /// 鏍规嵁閿欒鐮佽繑鍥為敊璇俊鎭
+ ///
+ ///
+ ///
+ public string GetSocketErrorDesc(SocketError code)
+ {
+ IntPtr ptr = Sdk.HP_GetSocketErrorDesc(code);
+ string desc = Marshal.PtrToStringUni(ptr);
+ return desc;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////////////
+ Sdk.OnPrepareConnect _OnPrepareConnect = null;
+ Sdk.OnConnect _OnConnect = null;
+ Sdk.OnReceive _OnReceive = null;
+ Sdk.OnSend _OnSend = null;
+ Sdk.OnClose _OnClose = null;
+ Sdk.OnShutdown _OnShutdown = null;
+
+ ///
+ /// 璁剧疆鍥炶皟鍑芥暟
+ ///
+ protected virtual void SetCallback()
+ {
+ _OnPrepareConnect = new Sdk.OnPrepareConnect(SDK_OnPrepareConnect);
+ _OnConnect = new Sdk.OnConnect(SDK_OnConnect);
+ _OnSend = new Sdk.OnSend(SDK_OnSend);
+ _OnReceive = new Sdk.OnReceive(SDK_OnReceive);
+ _OnClose = new Sdk.OnClose(SDK_OnClose);
+ _OnShutdown = new Sdk.OnShutdown(SDK_OnShutdown);
+
+ // 璁剧疆 Socket 鐩戝惉鍣ㄥ洖璋冨嚱鏁
+ Sdk.HP_Set_FN_Agent_OnPrepareConnect(pListener, _OnPrepareConnect);
+ Sdk.HP_Set_FN_Agent_OnConnect(pListener, _OnConnect);
+ Sdk.HP_Set_FN_Server_OnSend(pListener, _OnSend);
+ Sdk.HP_Set_FN_Server_OnReceive(pListener, _OnReceive);
+ Sdk.HP_Set_FN_Server_OnClose(pListener, _OnClose);
+ Sdk.HP_Set_FN_Agent_OnShutdown(pListener, _OnShutdown);
+
+ }
+
+ protected virtual HandleResult SDK_OnPrepareConnect(IntPtr connId, uint socket)
+ {
+ if (OnPrepareConnect != null)
+ {
+ return OnPrepareConnect(connId, socket);
+ }
+ return HandleResult.Ignore;
+ }
+
+ protected virtual HandleResult SDK_OnConnect(IntPtr connId)
+ {
+ if (OnConnect != null)
+ {
+ return OnConnect(connId);
+ }
+ return HandleResult.Ignore;
+ }
+
+ protected virtual HandleResult SDK_OnSend(IntPtr connId, IntPtr pData, int length)
+ {
+ if (OnSend != null)
+ {
+ byte[] bytes = new byte[length];
+ Marshal.Copy(pData, bytes, 0, length);
+ return OnSend(connId, bytes);
+ }
+ return HandleResult.Ignore;
+ }
+
+ protected virtual HandleResult SDK_OnReceive(IntPtr connId, IntPtr pData, int length)
+ {
+ if (OnReceive != null)
+ {
+ byte[] bytes = new byte[length];
+ Marshal.Copy(pData, bytes, 0, length);
+ return OnReceive(connId, bytes);
+ }
+ return HandleResult.Ignore;
+ }
+
+ protected virtual HandleResult SDK_OnClose(IntPtr connId, SocketOperation enOperation, int errorCode)
+ {
+ if (OnClose != null)
+ {
+ return OnClose(connId, enOperation, errorCode);
+ }
+ return HandleResult.Ignore;
+ }
+
+ protected virtual HandleResult SDK_OnShutdown()
+ {
+ if (OnShutdown != null)
+ {
+ return OnShutdown();
+ }
+ return HandleResult.Ignore;
+ }
+
+
+ /////////////////////////////////////////////////////////////////////////
+
+ ///
+ /// 鑾峰彇绯荤粺杩斿洖鐨勯敊璇爜
+ ///
+ ///
+ public int SYSGetLastError()
+ {
+ return Sdk.SYS_GetLastError();
+ }
+
+ ///
+ /// 璋冪敤绯荤粺鐨 ::WSAGetLastError() 鏂规硶鑾峰彇閫氫俊閿欒浠g爜
+ ///
+ ///
+ public int SYSWSAGetLastError()
+ {
+ return Sdk.SYS_WSAGetLastError();
+ }
+
+ ///
+ /// 璋冪敤绯荤粺鐨 setsockopt()
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public int SYS_SetSocketOption(IntPtr sock, int level, int name, IntPtr val, int len)
+ {
+ return Sdk.SYS_SetSocketOption(sock, level, name, val, len);
+ }
+
+ ///
+ /// 璋冪敤绯荤粺鐨 getsockopt()
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public int SYSGetSocketOption(IntPtr sock, int level, int name, IntPtr val, ref int len)
+ {
+ return Sdk.SYS_GetSocketOption(sock, level, name, val, ref len);
+ }
+ ///
+ /// 璋冪敤绯荤粺鐨 ioctlsocket()
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public int SYSIoctlSocket(IntPtr sock, long cmd, IntPtr arg)
+ {
+ return Sdk.SYS_IoctlSocket(sock, cmd, arg);
+ }
+
+ ///
+ /// 璋冪敤绯荤粺鐨 ::WSAIoctl()
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public int SYS_WSAIoctl(IntPtr sock, uint dwIoControlCode, IntPtr lpvInBuffer, uint cbInBuffer,
+ IntPtr lpvOutBuffer, uint cbOutBuffer, uint lpcbBytesReturned)
+ {
+ return Sdk.SYS_WSAIoctl(sock, dwIoControlCode, lpvInBuffer, cbInBuffer,
+ lpvOutBuffer, cbOutBuffer, lpcbBytesReturned);
+ }
+
+ ///
+ /// 鐢辩粨鏋勪綋杞崲涓篵yte鏁扮粍
+ ///
+ public byte[] StructureToByte(T structure)
+ {
+ int size = Marshal.SizeOf(typeof(T));
+ byte[] buffer = new byte[size];
+ IntPtr bufferIntPtr = Marshal.AllocHGlobal(size);
+ try
+ {
+ Marshal.StructureToPtr(structure, bufferIntPtr, true);
+ Marshal.Copy(bufferIntPtr, buffer, 0, size);
+ }
+ finally
+ {
+ Marshal.FreeHGlobal(bufferIntPtr);
+ }
+ return buffer;
+ }
+
+ ///
+ /// 鐢眀yte鏁扮粍杞崲涓虹粨鏋勪綋
+ ///
+ public T ByteToStructure(byte[] dataBuffer)
+ {
+ object structure = null;
+ int size = Marshal.SizeOf(typeof(T));
+ IntPtr allocIntPtr = Marshal.AllocHGlobal(size);
+ try
+ {
+ Marshal.Copy(dataBuffer, 0, allocIntPtr, size);
+ structure = Marshal.PtrToStructure(allocIntPtr, typeof(T));
+ }
+ finally
+ {
+ Marshal.FreeHGlobal(allocIntPtr);
+ }
+ return (T)structure;
+ }
+
+ ///
+ /// 瀵硅薄搴忓垪鍖栨垚byte[]
+ ///
+ ///
+ ///
+ public byte[] ObjectToBytes(object obj)
+ {
+ using (MemoryStream ms = new MemoryStream())
+ {
+ IFormatter formatter = new BinaryFormatter();
+ formatter.Serialize(ms, obj);
+ return ms.GetBuffer();
+ }
+ }
+
+ ///
+ /// byte[]搴忓垪鍖栨垚瀵硅薄
+ ///
+ ///
+ ///
+ public object BytesToObject(byte[] bytes)
+ {
+ using (MemoryStream ms = new MemoryStream(bytes))
+ {
+ IFormatter formatter = new BinaryFormatter();
+ return formatter.Deserialize(ms);
+ }
+ }
+
+ ///
+ /// byte[]杞粨鏋勪綋
+ ///
+ ///
+ ///
+ ///
+ public T BytesToStruct(byte[] bytes)
+ {
+ Type strcutType = typeof(T);
+ int size = Marshal.SizeOf(strcutType);
+ IntPtr buffer = Marshal.AllocHGlobal(size);
+ try
+ {
+ Marshal.Copy(bytes, 0, buffer, size);
+ return (T)Marshal.PtrToStructure(buffer, strcutType);
+ }
+ finally
+ {
+ Marshal.FreeHGlobal(buffer);
+ }
+ }
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/TcpClient.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/TcpClient.cs
new file mode 100644
index 000000000..e12ec2ec2
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/TcpClient.cs
@@ -0,0 +1,866 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Runtime.InteropServices;
+using System.IO;
+using System.Runtime.Serialization;
+using System.Runtime.Serialization.Formatters.Binary;
+
+namespace HPSocketCS
+{
+ public class TcpClientEvent
+ {
+ public delegate HandleResult OnPrepareConnectEventHandler(TcpClient sender, uint socket);
+ public delegate HandleResult OnConnectEventHandler(TcpClient sender);
+ public delegate HandleResult OnSendEventHandler(TcpClient sender, byte[] bytes);
+ public delegate HandleResult OnReceiveEventHandler(TcpClient sender, byte[] bytes);
+ public delegate HandleResult OnCloseEventHandler(TcpClient sender, SocketOperation enOperation, int errorCode);
+ }
+
+ public class TcpClient
+ {
+ protected IntPtr _pClient = IntPtr.Zero;
+ protected IntPtr pClient
+ {
+ get
+ {
+ return _pClient;
+ }
+
+ set
+ {
+ _pClient = value;
+ }
+ }
+
+ protected IntPtr pListener = IntPtr.Zero;
+
+ protected bool IsCreate = false;
+
+ /****************************************************/
+ ///
+ /// 鍑嗗杩炴帴浜嗕簨浠
+ ///
+ public event TcpClientEvent.OnPrepareConnectEventHandler OnPrepareConnect;
+ ///
+ /// 杩炴帴浜嬩欢
+ ///
+ public event TcpClientEvent.OnConnectEventHandler OnConnect;
+ ///
+ /// 鏁版嵁鍙戦佷簨浠
+ ///
+ public event TcpClientEvent.OnSendEventHandler OnSend;
+ ///
+ /// 鏁版嵁鍒拌揪浜嬩欢
+ ///
+ public event TcpClientEvent.OnReceiveEventHandler OnReceive;
+ ///
+ /// 杩炴帴鍏抽棴浜嬩欢
+ ///
+ public event TcpClientEvent.OnCloseEventHandler OnClose;
+
+ public TcpClient()
+ {
+ CreateListener();
+ }
+
+ ~TcpClient()
+ {
+ Destroy();
+ }
+
+ ///
+ /// 鍒涘缓socket鐩戝惉&鏈嶅姟缁勪欢
+ ///
+ ///
+ protected virtual bool CreateListener()
+ {
+ if (IsCreate == true || pListener != IntPtr.Zero || pClient != IntPtr.Zero)
+ {
+ return false;
+ }
+
+
+ pListener = Sdk.Create_HP_TcpClientListener();
+ if (pListener == IntPtr.Zero)
+ {
+ return false;
+ }
+
+ pClient = Sdk.Create_HP_TcpClient(pListener);
+ if (pClient == IntPtr.Zero)
+ {
+ return false;
+ }
+
+ IsCreate = true;
+
+ return true;
+ }
+
+ ///
+ /// 缁堟鏈嶅姟骞堕噴鏀捐祫婧
+ ///
+ public virtual void Destroy()
+ {
+ Stop();
+
+ if (pClient != IntPtr.Zero)
+ {
+ Sdk.Destroy_HP_TcpClient(pClient);
+ pClient = IntPtr.Zero;
+ }
+ if (pListener != IntPtr.Zero)
+ {
+ Sdk.Destroy_HP_TcpClientListener(pListener);
+ pListener = IntPtr.Zero;
+ }
+
+ IsCreate = false;
+ }
+
+ ///
+ /// 鍚姩閫氳缁勪欢骞惰繛鎺ュ埌鏈嶅姟鍣
+ ///
+ /// 杩滅▼鍦板潃
+ /// 杩滅▼绔彛
+ /// 鏄惁寮傛
+ ///
+ public bool Connetion(string address, ushort port, bool async = true)
+ {
+ if (string.IsNullOrEmpty(address) == true)
+ {
+ throw new Exception("address is null");
+ }
+ else if (port == 0)
+ {
+ throw new Exception("port is zero");
+ }
+
+ if (IsStarted == true)
+ {
+ return false;
+ }
+
+ this.SetCallback();
+
+ return Sdk.HP_Client_Start(pClient, address, port, async);
+ }
+
+
+ ///
+ /// 鍚姩閫氳缁勪欢骞惰繛鎺ュ埌鏈嶅姟鍣
+ ///
+ /// 杩滅▼鍦板潃
+ /// 杩滅▼绔彛
+ /// 鏈湴缁戝畾鍒板摢涓猧p?,澶歩p涓嬪彲浠ラ夋嫨缁戝畾鍒版寚瀹歩p
+ /// 鏄惁寮傛
+ ///
+ public bool Connetion(string address, ushort port, string bindAddress, bool async = true)
+ {
+ if (string.IsNullOrEmpty(address) == true)
+ {
+ throw new Exception("address is null");
+ }
+ else if (port == 0)
+ {
+ throw new Exception("port is zero");
+ }
+
+ if (IsStarted == true)
+ {
+ return false;
+ }
+
+ this.SetCallback();
+
+ return Sdk.HP_Client_StartWithBindAddress(pClient, address, port, async, bindAddress);
+ }
+
+ ///
+ /// 鍋滄閫氳缁勪欢
+ ///
+ ///
+ public bool Stop()
+ {
+ if (IsStarted == false)
+ {
+ return false;
+ }
+ return Sdk.HP_Client_Stop(pClient);
+ }
+
+ ///
+ /// 鍙戦佹暟鎹
+ ///
+ ///
+ ///
+ ///
+ ///
+ public bool Send(byte[] bytes, int size)
+ {
+ return Sdk.HP_Client_Send(pClient, bytes, size);
+ }
+
+ ///
+ /// 鍙戦佹暟鎹
+ ///
+ ///
+ ///
+ ///
+ ///
+ public bool Send(IntPtr bufferPtr, int size)
+ {
+ return Sdk.HP_Client_Send(pClient, bufferPtr, size);
+ }
+
+
+ ///
+ /// 鍙戦佹暟鎹
+ ///
+ ///
+ ///
+ ///
+ ///
+ public bool Send(T obj)
+ {
+ byte[] buffer = StructureToByte(obj);
+ return Send(buffer, buffer.Length);
+ }
+
+ ///
+ /// 搴忓垪鍖栧璞″悗鍙戦佹暟鎹,搴忓垪鍖栧璞℃墍灞炵被蹇呴』鏍囪[Serializable]
+ ///
+ ///
+ ///
+ ///
+ ///
+ public bool SendBySerializable(object obj)
+ {
+ byte[] buffer = ObjectToBytes(obj);
+ return Send(buffer, buffer.Length);
+ }
+
+ ///
+ /// 鍙戦佹暟鎹
+ ///
+ ///
+ ///
+ /// 閽堝bytes鐨勫亸绉
+ /// 鍙戝澶
+ ///
+ public bool Send(byte[] bytes, int offset, int size)
+ {
+ return Sdk.HP_Client_SendPart(pClient, bytes, size, offset);
+ }
+
+ ///
+ /// 鍙戦佹暟鎹
+ ///
+ ///
+ ///
+ /// 閽堝bufferPtr鐨勫亸绉
+ /// 鍙戝澶
+ ///
+ public bool Send(IntPtr bufferPtr, int offset, int size)
+ {
+ return Sdk.HP_Client_SendPart(pClient, bufferPtr, size, offset);
+ }
+
+ ///
+ /// 鍙戦佸缁勬暟鎹
+ /// 鍚戞寚瀹氳繛鎺ュ彂閫佸缁勬暟鎹
+ /// TCP - 椤哄簭鍙戦佹墍鏈夋暟鎹寘
+ ///
+ /// 杩炴帴 ID
+ /// 鍙戦佺紦鍐插尯鏁扮粍
+ /// 鍙戦佺紦鍐插尯鏁扮洰
+ /// TRUE.鎴愬姛,FALSE.澶辫触锛屽彲閫氳繃 SYSGetLastError() 鑾峰彇 Windows 閿欒浠g爜
+ public bool SendPackets(WSABUF[] buffers, int count)
+ {
+ return Sdk.HP_Client_SendPackets(pClient, buffers, count);
+ }
+
+
+ ///
+ /// 鍙戦佸缁勬暟鎹
+ /// 鍚戞寚瀹氳繛鎺ュ彂閫佸缁勬暟鎹
+ /// TCP - 椤哄簭鍙戦佹墍鏈夋暟鎹寘
+ ///
+ /// 杩炴帴 ID
+ /// 鍙戦佺紦鍐插尯鏁扮粍
+ /// 鍙戦佺紦鍐插尯鏁扮洰
+ /// TRUE.鎴愬姛,FALSE.澶辫触锛屽彲閫氳繃 SYSGetLastError() 鑾峰彇 Windows 閿欒浠g爜
+ public bool SendPackets(T[] objects)
+ {
+ bool ret = false;
+
+ WSABUF[] buffer = new WSABUF[objects.Length];
+ IntPtr[] ptrs = new IntPtr[buffer.Length];
+ try
+ {
+
+ for (int i = 0; i < objects.Length; i++)
+ {
+ buffer[i].Length = Marshal.SizeOf(typeof(T));
+
+ ptrs[i] = Marshal.AllocHGlobal(buffer[i].Length);
+ Marshal.StructureToPtr(objects[i], ptrs[i], true);
+
+ buffer[i].Buffer = ptrs[i];
+ }
+ ret = SendPackets(buffer, buffer.Length);
+ }
+ catch (Exception ex)
+ {
+ throw ex;
+ }
+ finally
+ {
+ for (int i = 0; i < ptrs.Length; i++)
+ {
+ if (ptrs[i] != IntPtr.Zero)
+ {
+ Marshal.FreeHGlobal(ptrs[i]);
+ }
+ }
+ }
+
+ return ret;
+ }
+
+ ///
+ /// 鍚嶇О锛氬彂閫佸皬鏂囦欢
+ /// 鎻忚堪锛氬悜鎸囧畾杩炴帴鍙戦 4096 KB 浠ヤ笅鐨勫皬鏂囦欢
+ ///
+ /// 鏂囦欢璺緞
+ /// 澶撮儴闄勫姞鏁版嵁
+ /// 灏鹃儴闄勫姞鏁版嵁
+ /// TRUE.鎴愬姛,FALSE.澶辫触锛屽彲閫氳繃 SYSGetLastError() 鑾峰彇 Windows 閿欒浠g爜
+ public bool SendSmallFile(string filePath, ref WSABUF head, ref WSABUF tail)
+ {
+ return Sdk.HP_TcpClient_SendSmallFile(pClient, filePath, ref head, ref tail);
+ }
+
+ ///
+ /// 鍚嶇О锛氬彂閫佸皬鏂囦欢
+ /// 鎻忚堪锛氬悜鎸囧畾杩炴帴鍙戦 4096 KB 浠ヤ笅鐨勫皬鏂囦欢
+ ///
+ /// 鏂囦欢璺緞
+ /// 澶撮儴闄勫姞鏁版嵁,鍙互涓簄ull
+ /// 灏鹃儴闄勫姞鏁版嵁,鍙互涓簄ull
+ /// TRUE.鎴愬姛,FALSE.澶辫触锛屽彲閫氳繃 SYSGetLastError() 鑾峰彇 Windows 閿欒浠g爜
+ public bool SendSmallFile(string filePath, byte[] head, byte[] tail)
+ {
+ IntPtr pHead = IntPtr.Zero;
+ IntPtr pTail = IntPtr.Zero;
+ WSABUF wsaHead = new WSABUF() { Length = 0, Buffer = pHead };
+ WSABUF wsatail = new WSABUF() { Length = 0, Buffer = pTail };
+ if (head != null)
+ {
+ wsaHead.Length = head.Length;
+ wsaHead.Buffer = Marshal.UnsafeAddrOfPinnedArrayElement(head, 0);
+ }
+
+ if (tail != null)
+ {
+ wsaHead.Length = tail.Length;
+ wsaHead.Buffer = Marshal.UnsafeAddrOfPinnedArrayElement(tail, 0);
+ }
+
+ return SendSmallFile(filePath, ref wsaHead, ref wsatail);
+ }
+
+ ///
+ /// 鍚嶇О锛氬彂閫佸皬鏂囦欢
+ /// 鎻忚堪锛氬悜鎸囧畾杩炴帴鍙戦 4096 KB 浠ヤ笅鐨勫皬鏂囦欢
+ ///
+ /// 鏂囦欢璺緞
+ /// 澶撮儴闄勫姞鏁版嵁,鍙互涓簄ull
+ /// 灏鹃儴闄勫姞鏁版嵁,鍙互涓簄ull
+ /// TRUE.鎴愬姛,FALSE.澶辫触锛屽彲閫氳繃 SYSGetLastError() 鑾峰彇 Windows 閿欒浠g爜
+ public bool SendSmallFile(string filePath, T1 head, T2 tail)
+ {
+
+ byte[] headBuffer = null;
+ if (head != null)
+ {
+ headBuffer = StructureToByte(head);
+ }
+
+ byte[] tailBuffer = null;
+ if (tail != null)
+ {
+ tailBuffer = StructureToByte(tail);
+ }
+ return SendSmallFile(filePath, headBuffer, tailBuffer);
+ }
+
+ ///
+ /// 鑾峰彇閿欒鐮
+ ///
+ public SocketError ErrorCode
+ {
+ get
+ {
+ return Sdk.HP_Client_GetLastError(pClient);
+ }
+ }
+
+ ///
+ /// 鑾峰彇閿欒淇℃伅
+ ///
+ public string ErrorMessage
+ {
+ get
+ {
+ IntPtr ptr = Sdk.HP_Client_GetLastErrorDesc(pClient);
+ string desc = Marshal.PtrToStringUni(ptr);
+ return desc;
+ }
+ }
+
+ ///
+ ///
+ ///
+ ///
+ ///
+ public bool GetPendingDataLength(ref int length)
+ {
+ return Sdk.HP_Client_GetPendingDataLength(pClient, ref length);
+ }
+
+
+ ///
+ /// 璁剧疆杩炴帴鐨勯檮鍔犳暟鎹
+ ///
+ ///
+ /// 濡傛灉涓簄ull,鍒欎负閲婃斁璁剧疆鐨勬暟鎹
+ ///
+ public void SetExtra(object obj)
+ {
+ // 閲婃斁闄勫姞鏁版嵁
+ IntPtr ptr = GetExtra();
+ if (ptr != IntPtr.Zero)
+ {
+ Marshal.FreeHGlobal(ptr);
+ ptr = IntPtr.Zero;
+ }
+
+ if (obj != null)
+ {
+ // 璁剧疆闄勫姞鏁版嵁
+ ptr = Marshal.AllocHGlobal(Marshal.SizeOf(obj));
+ Marshal.StructureToPtr(obj, ptr, false);
+ }
+ Sdk.HP_Client_SetExtra(pClient, ptr);
+ }
+
+ ///
+ /// 鑾峰彇闄勫姞鏁版嵁
+ /// 濡傝缃殑鏄釜缁撴瀯浣/绫诲璞,鍙互鐢 Type objA = (Type)Marshal.PtrToStructure(ptr, typeof(Type)) 鑾峰彇
+ /// 鍏朵腑Type鏄粨鏋勪綋/绫诲悕,ptr鏄鏂规硶鐨勪紶鍑哄,鍦ㄨ鏂规硶杩斿洖涓簍rue鐨勬椂鍊欏彲鐢
+ ///
+ ///
+ ///
+ ///
+ public IntPtr GetExtra()
+ {
+ return Sdk.HP_Client_GetExtra(pClient);
+ }
+
+ ///
+ /// 鑾峰彇鐩戝惉socket鐨勫湴鍧淇℃伅
+ ///
+ ///
+ ///
+ ///
+ ///
+ public bool GetListenAddress(ref string ip, ref ushort port)
+ {
+ int ipLength = 40;
+
+ StringBuilder sb = new StringBuilder(ipLength);
+
+ bool ret = Sdk.HP_Client_GetLocalAddress(pClient, sb, ref ipLength, ref port);
+ if (ret == true)
+ {
+ ip = sb.ToString();
+ }
+ return ret;
+ }
+
+ ///
+ /// 鏄惁鍚姩
+ ///
+ public bool IsStarted
+ {
+ get
+ {
+ if (pClient == IntPtr.Zero)
+ {
+ return false;
+ }
+ return Sdk.HP_Client_HasStarted(pClient);
+ }
+ }
+
+ ///
+ /// 鐘舵
+ ///
+ public ServiceState State
+ {
+ get
+ {
+ return Sdk.HP_Client_GetState(pClient);
+ }
+
+ }
+
+ ///
+ /// 鑾峰彇璇ョ粍浠跺璞$殑杩炴帴Id
+ ///
+ public IntPtr ConnectionId
+ {
+ get
+ {
+ return Sdk.HP_Client_GetConnectionID(pClient);
+ }
+
+ }
+ ///////////////////////////////////////////////////////////////////////////////////////
+
+ ///
+ /// 璇诲彇鎴栬缃唴瀛樺潡缂撳瓨姹犲ぇ灏忥紙閫氬父璁剧疆涓 -> PUSH 妯″瀷锛5 - 10锛汸ULL 妯″瀷锛10 - 20 锛
+ ///
+ public uint FreeBufferPoolSize
+ {
+ get
+ {
+ return Sdk.HP_Client_GetFreeBufferPoolSize(pClient);
+ }
+ set
+ {
+ Sdk.HP_Client_SetFreeBufferPoolSize(pClient, value);
+ }
+ }
+
+ ///
+ /// 璇诲彇鎴栬缃唴瀛樺潡缂撳瓨姹犲洖鏀堕榾鍊硷紙閫氬父璁剧疆涓哄唴瀛樺潡缂撳瓨姹犲ぇ灏忕殑 3 鍊嶏級
+ ///
+ public uint FreeBufferPoolHold
+ {
+ get
+ {
+ return Sdk.HP_Client_GetFreeBufferPoolHold(pClient);
+ }
+ set
+ {
+ Sdk.HP_Client_SetFreeBufferPoolHold(pClient, value);
+ }
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////////////
+ ///
+ /// 璇诲彇鎴栬缃氫俊鏁版嵁缂撳啿鍖哄ぇ灏忥紙鏍规嵁骞冲潎閫氫俊鏁版嵁鍖呭ぇ灏忚皟鏁磋缃紝閫氬父璁剧疆涓猴細(N * 1024) - sizeof(TBufferObj)锛
+ ///
+ public uint SocketBufferSize
+ {
+ get
+ {
+ return Sdk.HP_TcpClient_GetSocketBufferSize(pClient);
+ }
+ set
+ {
+ Sdk.HP_TcpClient_SetSocketBufferSize(pClient, value);
+ }
+ }
+
+ ///
+ /// 璇诲彇鎴栬缃績璺冲寘闂撮殧锛堟绉掞紝0 鍒欎笉鍙戦佸績璺冲寘锛
+ ///
+ public uint KeepAliveTime
+ {
+ get
+ {
+ return Sdk.HP_TcpClient_GetKeepAliveTime(pClient);
+ }
+ set
+ {
+ Sdk.HP_TcpClient_SetKeepAliveTime(pClient, value);
+ }
+ }
+
+ ///
+ /// 璇诲彇鎴栬缃績璺崇‘璁ゅ寘妫娴嬮棿闅旓紙姣锛0 涓嶅彂閫佸績璺冲寘锛屽鏋滆秴杩囪嫢骞叉 [榛樿锛歐inXP 5 娆, Win7 10 娆 妫娴嬩笉鍒板績璺崇‘璁ゅ寘鍒欒涓哄凡鏂嚎锛
+ ///
+ public uint KeepAliveInterval
+ {
+ get
+ {
+ return Sdk.HP_TcpClient_GetKeepAliveInterval(pClient);
+ }
+ set
+ {
+ Sdk.HP_TcpClient_SetKeepAliveInterval(pClient, value);
+ }
+ }
+
+
+ ///
+ /// 鏍规嵁閿欒鐮佽繑鍥為敊璇俊鎭
+ ///
+ ///
+ ///
+ public string GetSocketErrorDesc(SocketError code)
+ {
+ IntPtr ptr = Sdk.HP_GetSocketErrorDesc(code);
+ string desc = Marshal.PtrToStringUni(ptr);
+ return desc;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////////////
+ Sdk.OnPrepareConnect _OnPrepareConnect = null;
+ Sdk.OnConnect _OnConnect = null;
+ Sdk.OnReceive _OnReceive = null;
+ Sdk.OnSend _OnSend = null;
+ Sdk.OnClose _OnClose = null;
+ ///
+ /// 璁剧疆鍥炶皟鍑芥暟
+ ///
+ protected virtual void SetCallback()
+ {
+ // 璁剧疆 Socket 鐩戝惉鍣ㄥ洖璋冨嚱鏁
+ _OnPrepareConnect = new Sdk.OnPrepareConnect(SDK_OnPrepareConnect);
+ _OnConnect = new Sdk.OnConnect(SDK_OnConnect);
+ _OnSend = new Sdk.OnSend(SDK_OnSend);
+ _OnReceive = new Sdk.OnReceive(SDK_OnReceive);
+ _OnClose = new Sdk.OnClose(SDK_OnClose);
+
+ Sdk.HP_Set_FN_Client_OnPrepareConnect(pListener, _OnPrepareConnect);
+ Sdk.HP_Set_FN_Client_OnConnect(pListener, _OnConnect);
+ Sdk.HP_Set_FN_Client_OnSend(pListener, _OnSend);
+ Sdk.HP_Set_FN_Client_OnReceive(pListener, _OnReceive);
+ Sdk.HP_Set_FN_Client_OnClose(pListener, _OnClose);
+ }
+
+ protected HandleResult SDK_OnPrepareConnect(IntPtr pClient, uint socket)
+ {
+ if (OnPrepareConnect != null)
+ {
+ return OnPrepareConnect(this, socket);
+ }
+ return HandleResult.Ignore;
+ }
+
+ protected HandleResult SDK_OnConnect(IntPtr pClient)
+ {
+ if (OnConnect != null)
+ {
+ return OnConnect(this);
+ }
+ return HandleResult.Ignore;
+ }
+
+ protected HandleResult SDK_OnSend(IntPtr pClient, IntPtr pData, int length)
+ {
+ if (OnSend != null)
+ {
+ byte[] bytes = new byte[length];
+ Marshal.Copy(pData, bytes, 0, length);
+ return OnSend(this, bytes);
+ }
+ return HandleResult.Ignore;
+ }
+
+ protected HandleResult SDK_OnReceive(IntPtr pClient, IntPtr pData, int length)
+ {
+ if (OnReceive != null)
+ {
+ byte[] bytes = new byte[length];
+ Marshal.Copy(pData, bytes, 0, length);
+ return OnReceive(this, bytes);
+ }
+ return HandleResult.Ignore;
+ }
+
+ protected HandleResult SDK_OnClose(IntPtr pClient, SocketOperation enOperation, int errorCode)
+ {
+ if (OnClose != null)
+ {
+ return OnClose(this, enOperation, errorCode);
+ }
+ return HandleResult.Ignore;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+
+ ///
+ /// 鑾峰彇绯荤粺杩斿洖鐨勯敊璇爜
+ ///
+ public int SYSGetLastError()
+ {
+ return Sdk.SYS_GetLastError();
+ }
+
+ ///
+ /// 璋冪敤绯荤粺鐨 ::WSAGetLastError() 鏂规硶鑾峰彇閫氫俊閿欒浠g爜
+ ///
+ public int SYSWSAGetLastError()
+ {
+ return Sdk.SYS_WSAGetLastError();
+ }
+
+ ///
+ /// 璋冪敤绯荤粺鐨 setsockopt()
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public int SYS_SetSocketOption(IntPtr sock, int level, int name, IntPtr val, int len)
+ {
+ return Sdk.SYS_SetSocketOption(sock, level, name, val, len);
+ }
+
+ ///
+ /// 璋冪敤绯荤粺鐨 getsockopt()
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public int SYSGetSocketOption(IntPtr sock, int level, int name, IntPtr val, ref int len)
+ {
+ return Sdk.SYS_GetSocketOption(sock, level, name, val, ref len);
+ }
+ ///
+ /// 璋冪敤绯荤粺鐨 ioctlsocket()
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public int SYSIoctlSocket(IntPtr sock, long cmd, IntPtr arg)
+ {
+ return Sdk.SYS_IoctlSocket(sock, cmd, arg);
+ }
+
+ ///
+ /// 璋冪敤绯荤粺鐨 ::WSAIoctl()
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public int SYS_WSAIoctl(IntPtr sock, uint dwIoControlCode, IntPtr lpvInBuffer, uint cbInBuffer,
+ IntPtr lpvOutBuffer, uint cbOutBuffer, uint lpcbBytesReturned)
+ {
+ return Sdk.SYS_WSAIoctl(sock, dwIoControlCode, lpvInBuffer, cbInBuffer,
+ lpvOutBuffer, cbOutBuffer, lpcbBytesReturned);
+ }
+
+ ///
+ /// 鐢辩粨鏋勪綋杞崲涓篵yte鏁扮粍
+ ///
+ public byte[] StructureToByte(T structure)
+ {
+ int size = Marshal.SizeOf(typeof(T));
+ byte[] buffer = new byte[size];
+ IntPtr bufferIntPtr = Marshal.AllocHGlobal(size);
+ try
+ {
+ Marshal.StructureToPtr(structure, bufferIntPtr, true);
+ Marshal.Copy(bufferIntPtr, buffer, 0, size);
+ }
+ finally
+ {
+ Marshal.FreeHGlobal(bufferIntPtr);
+ }
+ return buffer;
+ }
+
+ ///
+ /// 鐢眀yte鏁扮粍杞崲涓虹粨鏋勪綋
+ ///
+ public T ByteToStructure(byte[] dataBuffer)
+ {
+ object structure = null;
+ int size = Marshal.SizeOf(typeof(T));
+ IntPtr allocIntPtr = Marshal.AllocHGlobal(size);
+ try
+ {
+ Marshal.Copy(dataBuffer, 0, allocIntPtr, size);
+ structure = Marshal.PtrToStructure(allocIntPtr, typeof(T));
+ }
+ finally
+ {
+ Marshal.FreeHGlobal(allocIntPtr);
+ }
+ return (T)structure;
+ }
+
+ ///
+ /// 瀵硅薄搴忓垪鍖栨垚byte[]
+ ///
+ ///
+ ///
+ public byte[] ObjectToBytes(object obj)
+ {
+ using (MemoryStream ms = new MemoryStream())
+ {
+ IFormatter formatter = new BinaryFormatter();
+ formatter.Serialize(ms, obj);
+ return ms.GetBuffer();
+ }
+ }
+
+ ///
+ /// byte[]搴忓垪鍖栨垚瀵硅薄
+ ///
+ ///
+ ///
+ public object BytesToObject(byte[] bytes)
+ {
+ using (MemoryStream ms = new MemoryStream(bytes))
+ {
+ IFormatter formatter = new BinaryFormatter();
+ return formatter.Deserialize(ms);
+ }
+ }
+
+ ///
+ /// byte[]杞粨鏋勪綋
+ ///
+ ///
+ ///
+ ///
+ public T BytesToStruct(byte[] bytes)
+ {
+ Type strcutType = typeof(T);
+ int size = Marshal.SizeOf(strcutType);
+ IntPtr buffer = Marshal.AllocHGlobal(size);
+ try
+ {
+ Marshal.Copy(bytes, 0, buffer, size);
+ return (T)Marshal.PtrToStructure(buffer, strcutType);
+ }
+ finally
+ {
+ Marshal.FreeHGlobal(buffer);
+ }
+ }
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/TcpPackAgent.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/TcpPackAgent.cs
new file mode 100644
index 000000000..6cebf9111
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/TcpPackAgent.cs
@@ -0,0 +1,93 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HPSocketCS
+{
+ public class TcpPackAgent : TcpAgent
+ {
+ ///
+ /// 鍒涘缓socket鐩戝惉&鏈嶅姟缁勪欢
+ ///
+ ///
+ protected override bool CreateListener()
+ {
+ if (IsCreate == true || pListener != IntPtr.Zero || pAgent != IntPtr.Zero)
+ {
+ return false;
+ }
+
+ pListener = Sdk.Create_HP_TcpAgentListener();
+ if (pListener == IntPtr.Zero)
+ {
+ return false;
+ }
+
+ pAgent = Sdk.Create_HP_TcpPackAgent(pListener);
+ if (pAgent == IntPtr.Zero)
+ {
+ return false;
+ }
+
+ IsCreate = true;
+
+ return true;
+ }
+
+ ///
+ /// 缁堟鏈嶅姟骞堕噴鏀捐祫婧
+ ///
+ public override void Destroy()
+ {
+ Stop();
+
+ if (pAgent != IntPtr.Zero)
+ {
+ Sdk.Destroy_HP_TcpPackAgent(pAgent);
+ pAgent = IntPtr.Zero;
+ }
+ if (pListener != IntPtr.Zero)
+ {
+ Sdk.Destroy_HP_TcpAgentListener(pListener);
+ pListener = IntPtr.Zero;
+ }
+
+ IsCreate = false;
+ }
+
+ ///
+ /// 璇诲彇鎴栬缃暟鎹寘鏈澶ч暱搴
+ /// 鏈夋晥鏁版嵁鍖呮渶澶ч暱搴︿笉鑳借秴杩 524287/0x7FFFF 瀛楄妭锛岄粯璁わ細262144/0x40000
+ ///
+ public uint MaxPackSize
+ {
+ get
+ {
+ return Sdk.HP_TcpPackAgent_GetMaxPackSize(pAgent);
+ }
+ set
+ {
+ Sdk.HP_TcpPackAgent_SetMaxPackSize(pAgent, value);
+ }
+ }
+
+ ///
+ /// 璇诲彇鎴栬缃寘澶存爣璇
+ /// 鏈夋晥鍖呭ご鏍囪瘑鍙栧艰寖鍥 0 ~ 8191/0x1FFF锛屽綋鍖呭ご鏍囪瘑涓 0 鏃朵笉鏍¢獙鍖呭ご锛岄粯璁わ細0
+ ///
+ public ushort PackHeaderFlag
+ {
+ get
+ {
+ return Sdk.HP_TcpPackAgent_GetPackHeaderFlag(pAgent);
+ }
+ set
+ {
+ Sdk.HP_TcpPackAgent_SetPackHeaderFlag(pAgent, value);
+ }
+ }
+
+
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/TcpPackClient.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/TcpPackClient.cs
new file mode 100644
index 000000000..3d4ddbbe4
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/TcpPackClient.cs
@@ -0,0 +1,94 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HPSocketCS
+{
+ public class TcpPackClient : TcpClient
+ {
+
+ ///
+ /// 鍒涘缓socket鐩戝惉&鏈嶅姟缁勪欢
+ ///
+ ///
+ protected override bool CreateListener()
+ {
+ if (IsCreate == true || pListener != IntPtr.Zero || pClient != IntPtr.Zero)
+ {
+ return false;
+ }
+
+ pListener = Sdk.Create_HP_TcpClientListener();
+ if (pListener == IntPtr.Zero)
+ {
+ return false;
+ }
+
+ pClient = Sdk.Create_HP_TcpPackClient (pListener);
+ if (pClient == IntPtr.Zero)
+ {
+ return false;
+ }
+
+ IsCreate = true;
+
+ return true;
+ }
+
+ ///
+ /// 缁堟鏈嶅姟骞堕噴鏀捐祫婧
+ ///
+ public override void Destroy()
+ {
+ Stop();
+
+ if (pClient != IntPtr.Zero)
+ {
+ Sdk.Destroy_HP_TcpPackClient(pClient);
+ pClient = IntPtr.Zero;
+ }
+ if (pListener != IntPtr.Zero)
+ {
+ Sdk.Destroy_HP_TcpClientListener(pListener);
+ pListener = IntPtr.Zero;
+ }
+
+ IsCreate = false;
+ }
+
+ ///
+ /// 璇诲彇鎴栬缃暟鎹寘鏈澶ч暱搴
+ /// 鏈夋晥鏁版嵁鍖呮渶澶ч暱搴︿笉鑳借秴杩 524287/0x7FFFF 瀛楄妭锛岄粯璁わ細262144/0x40000
+ ///
+ public uint MaxPackSize
+ {
+ get
+ {
+ return Sdk.HP_TcpPackClient_GetMaxPackSize(pClient);
+ }
+ set
+ {
+ Sdk.HP_TcpPackClient_SetMaxPackSize(pClient, value);
+ }
+ }
+
+ ///
+ /// 璇诲彇鎴栬缃寘澶存爣璇
+ /// 鏈夋晥鍖呭ご鏍囪瘑鍙栧艰寖鍥 0 ~ 8191/0x1FFF锛屽綋鍖呭ご鏍囪瘑涓 0 鏃朵笉鏍¢獙鍖呭ご锛岄粯璁わ細0
+ ///
+ public ushort PackHeaderFlag
+ {
+ get
+ {
+ return Sdk.HP_TcpPackClient_GetPackHeaderFlag(pClient);
+ }
+ set
+ {
+ Sdk.HP_TcpPackClient_SetPackHeaderFlag(pClient, value);
+ }
+ }
+
+
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/TcpPackServer.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/TcpPackServer.cs
new file mode 100644
index 000000000..d33c37e45
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/TcpPackServer.cs
@@ -0,0 +1,94 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HPSocketCS
+{
+ public class TcpPackServer : TcpServer
+ {
+
+ ///
+ /// 鍒涘缓socket鐩戝惉&鏈嶅姟缁勪欢
+ ///
+ ///
+ protected override bool CreateListener()
+ {
+ if (IsCreate == true || pListener != IntPtr.Zero || pServer != IntPtr.Zero)
+ {
+ return false;
+ }
+
+ pListener = Sdk.Create_HP_TcpServerListener();
+ if (pListener == IntPtr.Zero)
+ {
+ return false;
+ }
+
+ pServer = Sdk.Create_HP_TcpPackServer(pListener);
+ if (pServer == IntPtr.Zero)
+ {
+ return false;
+ }
+
+ IsCreate = true;
+
+ return true;
+ }
+
+ ///
+ /// 缁堟鏈嶅姟骞堕噴鏀捐祫婧
+ ///
+ public override void Destroy()
+ {
+ Stop();
+
+ if (pServer != IntPtr.Zero)
+ {
+ Sdk.Destroy_HP_TcpPackServer(pServer);
+ pServer = IntPtr.Zero;
+ }
+ if (pListener != IntPtr.Zero)
+ {
+ Sdk.Destroy_HP_TcpServerListener(pListener);
+ pListener = IntPtr.Zero;
+ }
+
+ IsCreate = false;
+ }
+
+ ///
+ /// 璇诲彇鎴栬缃暟鎹寘鏈澶ч暱搴
+ /// 鏈夋晥鏁版嵁鍖呮渶澶ч暱搴︿笉鑳借秴杩 4194303/0x3FFFFF 瀛楄妭锛岄粯璁わ細262144/0x40000
+ ///
+ public uint MaxPackSize
+ {
+ get
+ {
+ return Sdk.HP_TcpPackServer_GetMaxPackSize(pServer);
+ }
+ set
+ {
+ Sdk.HP_TcpPackServer_SetMaxPackSize(pServer, value );
+ }
+ }
+
+ ///
+ /// 璇诲彇鎴栬缃寘澶存爣璇
+ /// 鏈夋晥鍖呭ご鏍囪瘑鍙栧艰寖鍥 0 ~ 1023/0x3FF锛屽綋鍖呭ご鏍囪瘑涓 0 鏃朵笉鏍¢獙鍖呭ご锛岄粯璁わ細0
+ ///
+ public ushort PackHeaderFlag
+ {
+ get
+ {
+ return Sdk.HP_TcpPackServer_GetPackHeaderFlag(pServer);
+ }
+ set
+ {
+ Sdk.HP_TcpPackServer_SetPackHeaderFlag(pServer, value);
+ }
+ }
+
+
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/TcpPullAgent.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/TcpPullAgent.cs
new file mode 100644
index 000000000..624da07a3
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/TcpPullAgent.cs
@@ -0,0 +1,123 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HPSocketCS
+{
+ public class TcpPullAgentEvent
+ {
+ public delegate HandleResult OnReceiveEventHandler(IntPtr connId, int length);
+ }
+ public class TcpPullAgent : TcpAgent
+ {
+ protected new TcpPullAgentEvent.OnReceiveEventHandler OnReceive;
+
+
+
+ ///
+ /// 鍒涘缓socket鐩戝惉&鏈嶅姟缁勪欢
+ ///
+ ///
+ protected override bool CreateListener()
+ {
+ if (IsCreate == true || pListener != IntPtr.Zero || pAgent != IntPtr.Zero)
+ {
+ return false;
+ }
+
+ pListener = Sdk.Create_HP_TcpPullAgentListener();
+ if (pListener == IntPtr.Zero)
+ {
+ return false;
+ }
+
+ pAgent = Sdk.Create_HP_TcpPullAgent(pListener);
+ if (pAgent == IntPtr.Zero)
+ {
+ return false;
+ }
+
+ IsCreate = true;
+
+ return true;
+ }
+
+ ///
+ /// 鎶撳彇鏁版嵁
+ /// 鐢ㄦ埛閫氳繃璇ユ柟娉曚粠 Socket 缁勪欢涓姄鍙栨暟鎹
+ ///
+ ///
+ ///
+ ///
+ ///
+ public FetchResult Fetch(IntPtr connId, IntPtr pBuffer, int size)
+ {
+ return Sdk.HP_TcpPullAgent_Fetch(pAgent, connId, pBuffer, size);
+ }
+
+ ///
+ /// 鎶撳彇鏁版嵁
+ /// 鐢ㄦ埛閫氳繃璇ユ柟娉曚粠 Socket 缁勪欢涓姄鍙栨暟鎹
+ ///
+ ///
+ ///
+ ///
+ ///
+ public FetchResult Peek(IntPtr connId, IntPtr pBuffer, int size)
+ {
+ return Sdk.HP_TcpPullAgent_Peek(pAgent, connId, pBuffer, size);
+ }
+
+ Sdk.OnPullReceive _OnReceive = null;
+
+ ///
+ /// 璁剧疆鍥炶皟鍑芥暟
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ protected override void SetCallback()
+ {
+ _OnReceive = new Sdk.OnPullReceive(SDK_OnReceive);
+
+ // 璁剧疆 Socket 鐩戝惉鍣ㄥ洖璋冨嚱鏁
+ Sdk.HP_Set_FN_Agent_OnPullReceive(pListener, _OnReceive);
+ base.SetCallback();
+ }
+
+ protected virtual HandleResult SDK_OnReceive(IntPtr connId, int length)
+ {
+ if (OnReceive != null)
+ {
+ return OnReceive(connId, length);
+ }
+ return HandleResult.Ignore;
+ }
+
+ ///
+ /// 缁堟鏈嶅姟骞堕噴鏀捐祫婧
+ ///
+ public override void Destroy()
+ {
+ Stop();
+
+ if (pAgent != IntPtr.Zero)
+ {
+ Sdk.Destroy_HP_TcpPullAgent(pAgent);
+ pAgent = IntPtr.Zero;
+ }
+ if (pListener != IntPtr.Zero)
+ {
+ Sdk.Destroy_HP_TcpPullAgentListener(pListener);
+ pListener = IntPtr.Zero;
+ }
+
+ IsCreate = false;
+ }
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/TcpPullClient.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/TcpPullClient.cs
new file mode 100644
index 000000000..91b176f00
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/TcpPullClient.cs
@@ -0,0 +1,122 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HPSocketCS
+{
+ public class TcpPullClientEvent
+ {
+
+ public delegate HandleResult OnReceiveEventHandler(TcpPullClient sender, int length);
+ }
+
+ public class TcpPullClient : TcpClient
+ {
+ ///
+ /// 鏁版嵁鍒拌揪浜嬩欢
+ ///
+ public new event TcpPullClientEvent.OnReceiveEventHandler OnReceive;
+
+
+ ///
+ /// 鍒涘缓socket鐩戝惉&鏈嶅姟缁勪欢
+ ///
+ ///
+ protected override bool CreateListener()
+ {
+ if (IsCreate == true || pListener != IntPtr.Zero || pClient != IntPtr.Zero)
+ {
+ return false;
+ }
+
+ pListener = Sdk.Create_HP_TcpPullClientListener();
+ if (pListener == IntPtr.Zero)
+ {
+ return false;
+ }
+
+ pClient = Sdk.Create_HP_TcpPullClient(pListener);
+ if (pClient == IntPtr.Zero)
+ {
+ return false;
+ }
+
+ IsCreate = true;
+
+ return true;
+ }
+
+
+ ///
+ /// 鎶撳彇鏁版嵁
+ /// 鐢ㄦ埛閫氳繃璇ユ柟娉曚粠 Socket 缁勪欢涓姄鍙栨暟鎹
+ ///
+ ///
+ ///
+ ///
+ ///
+ public FetchResult Fetch(IntPtr pBuffer, int size)
+ {
+ return Sdk.HP_TcpPullClient_Fetch(pClient, pBuffer, size);
+ }
+
+ ///
+ /// 鎶撳彇鏁版嵁
+ /// 鐢ㄦ埛閫氳繃璇ユ柟娉曚粠 Socket 缁勪欢涓姄鍙栨暟鎹
+ ///
+ ///
+ ///
+ ///
+ ///
+ public FetchResult Peek(IntPtr pBuffer, int size)
+ {
+ return Sdk.HP_TcpPullClient_Peek(pClient, pBuffer, size);
+ }
+
+
+ Sdk.OnPullReceive _OnReceive = null;
+
+ ///
+ /// 璁剧疆鍥炶皟鍑芥暟
+ ///
+ protected override void SetCallback()
+ {
+ _OnReceive = new Sdk.OnPullReceive(SDK_OnReceive);
+ Sdk.HP_Set_FN_Client_OnPullReceive(pListener, _OnReceive);
+ base.SetCallback();
+ }
+
+
+ protected HandleResult SDK_OnReceive(IntPtr pClient, int length)
+ {
+ if (OnReceive != null)
+ {
+ return OnReceive(this, length);
+ }
+
+ return HandleResult.Ignore;
+ }
+
+ ///
+ /// 缁堟鏈嶅姟骞堕噴鏀捐祫婧
+ ///
+ public override void Destroy()
+ {
+ Stop();
+
+ if (pClient != IntPtr.Zero)
+ {
+ Sdk.Destroy_HP_TcpPullClient(pClient);
+ pClient = IntPtr.Zero;
+ }
+ if (pListener != IntPtr.Zero)
+ {
+ Sdk.Destroy_HP_TcpPullClientListener(pListener);
+ pListener = IntPtr.Zero;
+ }
+
+ IsCreate = false;
+ }
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/TcpPullServer.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/TcpPullServer.cs
new file mode 100644
index 000000000..62fb61e2d
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/TcpPullServer.cs
@@ -0,0 +1,116 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Runtime.InteropServices;
+
+namespace HPSocketCS
+{
+ public class TcpPullServerEvent
+ {
+ public delegate HandleResult OnReceiveEventHandler(IntPtr connId, int length);
+ }
+
+ public class TcpPullServer : TcpServer
+ {
+
+ ///
+ /// 鏁版嵁鍒拌揪浜嬩欢
+ ///
+ public new event TcpPullServerEvent.OnReceiveEventHandler OnReceive;
+
+
+ ///
+ /// 鍒涘缓socket鐩戝惉&鏈嶅姟缁勪欢
+ ///
+ ///
+ protected override bool CreateListener()
+ {
+ if (IsCreate == true || pListener != IntPtr.Zero || pServer != IntPtr.Zero)
+ {
+ return false;
+ }
+
+ pListener = Sdk.Create_HP_TcpPullServerListener();
+ if (pListener == IntPtr.Zero)
+ {
+ return false;
+ }
+
+ pServer = Sdk.Create_HP_TcpPullServer(pListener);
+ if (pServer == IntPtr.Zero)
+ {
+ return false;
+ }
+
+ IsCreate = true;
+
+ return true;
+ }
+
+ Sdk.OnPullReceive _OnReceive = null;
+
+ protected override void SetCallback()
+ {
+ _OnReceive = new Sdk.OnPullReceive(SDK_OnReceive);
+ Sdk.HP_Set_FN_Server_OnPullReceive(pListener, _OnReceive);
+ base.SetCallback();
+ }
+
+ protected HandleResult SDK_OnReceive(IntPtr connId, int length)
+ {
+ if (OnReceive != null)
+ {
+ return OnReceive(connId, length);
+ }
+ return HandleResult.Ignore;
+ }
+
+ ///
+ /// 鎶撳彇鏁版嵁
+ /// 鐢ㄦ埛閫氳繃璇ユ柟娉曚粠 Socket 缁勪欢涓姄鍙栨暟鎹
+ ///
+ ///
+ ///
+ ///
+ ///
+ public FetchResult Fetch(IntPtr connId, IntPtr pBuffer, int size)
+ {
+ return Sdk.HP_TcpPullServer_Fetch(pServer, connId, pBuffer, size);
+ }
+
+ ///
+ /// 鎶撳彇鏁版嵁
+ /// 鐢ㄦ埛閫氳繃璇ユ柟娉曚粠 Socket 缁勪欢涓姄鍙栨暟鎹
+ ///
+ ///
+ ///
+ ///
+ ///
+ public FetchResult Peek(IntPtr connId, IntPtr pBuffer, int size)
+ {
+ return Sdk.HP_TcpPullServer_Peek(pServer, connId, pBuffer, size);
+ }
+
+
+ ///
+ /// 缁堟鏈嶅姟骞堕噴鏀捐祫婧
+ ///
+ public override void Destroy()
+ {
+ Stop();
+
+ if (pServer != IntPtr.Zero)
+ {
+ Sdk.Destroy_HP_TcpPullServer(pServer);
+ pServer = IntPtr.Zero;
+ }
+ if (pListener != IntPtr.Zero)
+ {
+ Sdk.Destroy_HP_TcpPullServerListener(pListener);
+ pListener = IntPtr.Zero;
+ }
+ IsCreate = false;
+ }
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/TcpServer.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/TcpServer.cs
new file mode 100644
index 000000000..f6f8a134b
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/TcpServer.cs
@@ -0,0 +1,1116 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Runtime.InteropServices;
+
+using System.IO;
+using System.Runtime.Serialization.Formatters.Binary;
+using System.Runtime.Serialization;
+
+namespace HPSocketCS
+{
+ public class TcpServerEvent
+ {
+ public delegate HandleResult OnSendEventHandler(IntPtr connId, byte[] bytes);
+ public delegate HandleResult OnReceiveEventHandler(IntPtr connId, byte[] bytes);
+ public delegate HandleResult OnCloseEventHandler(IntPtr connId, SocketOperation enOperation, int errorCode);
+ public delegate HandleResult OnShutdownEventHandler();
+ public delegate HandleResult OnPrepareListenEventHandler(IntPtr soListen);
+ public delegate HandleResult OnAcceptEventHandler(IntPtr connId, IntPtr pClient);
+ }
+
+ public class TcpServer
+ {
+ protected IntPtr _pServer = IntPtr.Zero;
+ protected IntPtr pServer
+ {
+ get
+ {
+ return _pServer;
+ }
+
+ set
+ {
+ _pServer = value;
+ }
+ }
+
+ protected IntPtr pListener = IntPtr.Zero;
+
+
+ ///
+ /// 鏈嶅姟鍣╥p
+ ///
+ public string IpAddress { get; set; }
+
+ ///
+ /// 鏈嶅姟鍣ㄧ鍙
+ ///
+ public ushort Port { get; set; }
+
+ ///
+ /// 杩炴帴鍒拌揪浜嬩欢
+ ///
+ public event TcpServerEvent.OnAcceptEventHandler OnAccept;
+ ///
+ /// 鏁版嵁鍖呭彂閫佷簨浠
+ ///
+ public event TcpServerEvent.OnSendEventHandler OnSend;
+ ///
+ /// 鍑嗗鐩戝惉浜嗕簨浠
+ ///
+ public event TcpServerEvent.OnPrepareListenEventHandler OnPrepareListen;
+ ///
+ /// 鏁版嵁鍒拌揪浜嬩欢
+ ///
+ public event TcpServerEvent.OnReceiveEventHandler OnReceive;
+ ///
+ /// 杩炴帴鍏抽棴浜嬩欢
+ ///
+ public event TcpServerEvent.OnCloseEventHandler OnClose;
+ ///
+ /// 鏈嶅姟鍣ㄥ叧闂簨浠
+ ///
+ public event TcpServerEvent.OnShutdownEventHandler OnShutdown;
+
+ protected bool IsCreate = false;
+
+ ///
+ /// tcpserver鏋勯
+ ///
+ public TcpServer()
+ {
+ CreateListener();
+ }
+
+ ~TcpServer()
+ {
+ Destroy();
+ }
+
+ ///
+ /// 鍒涘缓socket鐩戝惉&鏈嶅姟缁勪欢
+ ///
+ /// 鏄惁浣跨敤tcpserver绫婚粯璁ゅ洖璋冨嚱鏁
+ ///
+ protected virtual bool CreateListener()
+ {
+ if (IsCreate == true || pListener != IntPtr.Zero || pServer != IntPtr.Zero)
+ {
+ return false;
+ }
+
+ pListener = Sdk.Create_HP_TcpServerListener();
+ if (pListener == IntPtr.Zero)
+ {
+ return false;
+ }
+ pServer = Sdk.Create_HP_TcpServer(pListener);
+ if (pServer == IntPtr.Zero)
+ {
+ return false;
+ }
+
+ IsCreate = true;
+
+ return true;
+ }
+
+ ///
+ /// 缁堟鏈嶅姟骞堕噴鏀捐祫婧
+ ///
+ public virtual void Destroy()
+ {
+ Stop();
+
+ if (pServer != IntPtr.Zero)
+ {
+ Sdk.Destroy_HP_TcpServer(pServer);
+ pServer = IntPtr.Zero;
+ }
+ if (pListener != IntPtr.Zero)
+ {
+ Sdk.Destroy_HP_TcpServerListener(pListener);
+ pListener = IntPtr.Zero;
+ }
+
+ IsCreate = false;
+ }
+
+
+ ///
+ /// 鍚姩鏈嶅姟
+ ///
+ ///
+ ///
+ ///
+ public bool Start()
+ {
+ if (IsCreate == false)
+ {
+ return false;
+ }
+ if (IsStarted == true)
+ {
+ return false;
+ }
+
+ SetCallback();
+
+ return Sdk.HP_Server_Start(pServer, IpAddress, Port);
+ }
+
+ ///
+ /// 鍋滄鏈嶅姟
+ ///
+ ///
+ public bool Stop()
+ {
+ if (IsStarted == false)
+ {
+ return false;
+ }
+
+ return Sdk.HP_Server_Stop(pServer);
+ }
+
+ ///
+ /// 鍙戦佹暟鎹
+ ///
+ ///
+ ///
+ ///
+ ///
+ public bool Send(IntPtr connId, byte[] bytes, int size)
+ {
+ return Sdk.HP_Server_Send(pServer, connId, bytes, size);
+ }
+
+ ///
+ /// 鍙戦佹暟鎹
+ ///
+ ///
+ ///
+ ///
+ ///
+ public bool Send(IntPtr connId, IntPtr bufferPtr, int size)
+ {
+ return Sdk.HP_Server_Send(pServer, connId, bufferPtr, size);
+ }
+
+
+ ///
+ /// 鍙戦佹暟鎹
+ ///
+ ///
+ ///
+ /// 閽堝bytes鐨勫亸绉
+ /// 鍙戝澶
+ ///
+ public bool Send(IntPtr connId, byte[] bytes, int offset, int size)
+ {
+ return Sdk.HP_Server_SendPart(pServer, connId, bytes, size, offset);
+ }
+
+ ///
+ /// 鍙戦佹暟鎹
+ ///
+ ///
+ ///
+ /// 閽堝bufferPtr鐨勫亸绉
+ /// 鍙戝澶
+ ///
+ public bool Send(IntPtr connId, IntPtr bufferPtr, int offset, int size)
+ {
+ return Sdk.HP_Server_SendPart(pServer, connId, bufferPtr, size, offset);
+ }
+
+ ///
+ /// 鍙戦佹暟鎹
+ ///
+ ///
+ ///
+ ///
+ ///
+ public bool Send(IntPtr connId, T obj)
+ {
+ byte[] buffer = StructureToByte(obj);
+ return Send(connId, buffer, buffer.Length);
+ }
+
+ ///
+ /// 搴忓垪鍖栧璞″悗鍙戦佹暟鎹,搴忓垪鍖栧璞℃墍灞炵被蹇呴』鏍囪[Serializable]
+ ///
+ ///
+ ///
+ ///
+ ///
+ public bool SendBySerializable(IntPtr connId, object obj)
+ {
+ byte[] buffer = ObjectToBytes(obj);
+ return Send(connId, buffer, buffer.Length);
+ }
+
+ ///
+ /// 鍙戦佸缁勬暟鎹
+ /// 鍚戞寚瀹氳繛鎺ュ彂閫佸缁勬暟鎹
+ /// TCP - 椤哄簭鍙戦佹墍鏈夋暟鎹寘
+ ///
+ /// 杩炴帴 ID
+ /// 鍙戦佺紦鍐插尯鏁扮粍
+ /// 鍙戦佺紦鍐插尯鏁扮洰
+ /// TRUE.鎴愬姛,FALSE.澶辫触锛屽彲閫氳繃 SYSGetLastError() 鑾峰彇 Windows 閿欒浠g爜
+ public bool SendPackets(IntPtr connId, WSABUF[] pBuffers, int count)
+ {
+ return Sdk.HP_Server_SendPackets(pServer, connId, pBuffers, count);
+ }
+
+ ///
+ /// 鍙戦佸缁勬暟鎹
+ /// 鍚戞寚瀹氳繛鎺ュ彂閫佸缁勬暟鎹
+ /// TCP - 椤哄簭鍙戦佹墍鏈夋暟鎹寘
+ ///
+ /// 杩炴帴 ID
+ /// 鍙戦佺紦鍐插尯鏁扮粍
+ /// 鍙戦佺紦鍐插尯鏁扮洰
+ /// TRUE.鎴愬姛,FALSE.澶辫触锛屽彲閫氳繃 SYSGetLastError() 鑾峰彇 Windows 閿欒浠g爜
+ public bool SendPackets(IntPtr connId, T[] objects)
+ {
+ bool ret = false;
+
+ WSABUF[] buffer = new WSABUF[objects.Length];
+ IntPtr[] ptrs = new IntPtr[buffer.Length];
+ try
+ {
+
+ for (int i = 0; i < objects.Length; i++)
+ {
+ buffer[i].Length = Marshal.SizeOf(typeof(T));
+
+ ptrs[i] = Marshal.AllocHGlobal(buffer[i].Length);
+ Marshal.StructureToPtr(objects[i], ptrs[i], true);
+
+ buffer[i].Buffer = ptrs[i];
+ }
+ ret = SendPackets(connId, buffer, buffer.Length);
+ }
+ catch (Exception ex)
+ {
+ throw ex;
+ }
+ finally
+ {
+ for (int i = 0; i < ptrs.Length; i++)
+ {
+ if (ptrs[i] != IntPtr.Zero)
+ {
+ Marshal.FreeHGlobal(ptrs[i]);
+ }
+ }
+ }
+
+ return ret;
+ }
+
+ ///
+ /// 鍚嶇О锛氬彂閫佸皬鏂囦欢
+ /// 鎻忚堪锛氬悜鎸囧畾杩炴帴鍙戦 4096 KB 浠ヤ笅鐨勫皬鏂囦欢
+ ///
+ ///
+ /// 鏂囦欢璺緞
+ /// 澶撮儴闄勫姞鏁版嵁
+ /// 灏鹃儴闄勫姞鏁版嵁
+ /// TRUE.鎴愬姛,FALSE.澶辫触锛屽彲閫氳繃 SYSGetLastError() 鑾峰彇 Windows 閿欒浠g爜
+ public bool SendSmallFile(IntPtr connId, string filePath, ref WSABUF head, ref WSABUF tail)
+ {
+ return Sdk.HP_TcpServer_SendSmallFile(pServer, connId, filePath, ref head, ref tail);
+ }
+
+ ///
+ /// 鍚嶇О锛氬彂閫佸皬鏂囦欢
+ /// 鎻忚堪锛氬悜鎸囧畾杩炴帴鍙戦 4096 KB 浠ヤ笅鐨勫皬鏂囦欢
+ ///
+ ///
+ /// 鏂囦欢璺緞
+ /// 澶撮儴闄勫姞鏁版嵁,鍙互涓簄ull
+ /// 灏鹃儴闄勫姞鏁版嵁,鍙互涓簄ull
+ /// TRUE.鎴愬姛,FALSE.澶辫触锛屽彲閫氳繃 SYSGetLastError() 鑾峰彇 Windows 閿欒浠g爜
+ public bool SendSmallFile(IntPtr connId, string filePath, byte[] head, byte[] tail)
+ {
+ IntPtr pHead = IntPtr.Zero;
+ IntPtr pTail = IntPtr.Zero;
+ WSABUF wsaHead = new WSABUF() { Length = 0, Buffer = pHead };
+ WSABUF wsatail = new WSABUF() { Length = 0, Buffer = pTail };
+ if (head != null)
+ {
+ wsaHead.Length = head.Length;
+ wsaHead.Buffer = Marshal.UnsafeAddrOfPinnedArrayElement(head, 0);
+ }
+
+ if (tail != null)
+ {
+ wsaHead.Length = tail.Length;
+ wsaHead.Buffer = Marshal.UnsafeAddrOfPinnedArrayElement(tail, 0);
+ }
+
+ return SendSmallFile(connId, filePath, ref wsaHead, ref wsatail);
+ }
+
+ ///
+ /// 鍚嶇О锛氬彂閫佸皬鏂囦欢
+ /// 鎻忚堪锛氬悜鎸囧畾杩炴帴鍙戦 4096 KB 浠ヤ笅鐨勫皬鏂囦欢
+ ///
+ ///
+ /// 鏂囦欢璺緞
+ /// 澶撮儴闄勫姞鏁版嵁,鍙互涓簄ull
+ /// 灏鹃儴闄勫姞鏁版嵁,鍙互涓簄ull
+ /// TRUE.鎴愬姛,FALSE.澶辫触锛屽彲閫氳繃 SYSGetLastError() 鑾峰彇 Windows 閿欒浠g爜
+ public bool SendSmallFile(IntPtr connId, string filePath, T1 head, T2 tail)
+ {
+
+ byte[] headBuffer = null;
+ if (head != null)
+ {
+ headBuffer = StructureToByte(head);
+ }
+
+ byte[] tailBuffer = null;
+ if (tail != null)
+ {
+ tailBuffer = StructureToByte(tail);
+ }
+ return SendSmallFile(connId, filePath, headBuffer, tailBuffer);
+ }
+
+ ///
+ /// 鏂紑涓庢煇涓鎴风殑杩炴帴
+ ///
+ ///
+ /// 鏄惁寮哄埗鏂紑
+ ///
+ public bool Disconnect(IntPtr connId, bool force = true)
+ {
+ return Sdk.HP_Server_Disconnect(pServer, connId, force);
+ }
+
+ ///
+ /// 鏂紑瓒呰繃鎸囧畾鏃堕棿鐨勮繛鎺
+ ///
+ /// 姣
+ /// 寮哄埗
+ ///
+ public bool DisconnectLongConnections(uint period, bool force = true)
+ {
+ return Sdk.HP_Server_DisconnectLongConnections(pServer, period, force);
+ }
+
+ ///
+ /// 鏂紑瓒呰繃鎸囧畾鏃堕暱鐨勯潤榛樿繛鎺
+ ///
+ /// 姣
+ /// 寮哄埗
+ ///
+ public bool DisconnectSilenceConnections(uint period, bool force = true)
+ {
+ return Sdk.HP_Server_DisconnectSilenceConnections(pServer, period, force);
+ }
+
+ ///
+ /// 鑾峰彇鏌愪釜杩炴帴鐨勬湰鍦板湴鍧淇℃伅
+ ///
+ ///
+ ///
+ ///
+ ///
+ public bool GetLocalAddress(IntPtr connId, ref string ip, ref ushort port)
+ {
+ int ipLength = 40;
+
+ StringBuilder sb = new StringBuilder(ipLength);
+
+ bool ret = Sdk.HP_Server_GetLocalAddress(pServer, connId, sb, ref ipLength, ref port) && ipLength > 0;
+ if (ret == true)
+ {
+ ip = sb.ToString();
+ }
+
+ return ret;
+ }
+
+ ///
+ /// 鑾峰彇鏌愪釜杩炴帴鐨勮繙绋嬪湴鍧淇℃伅
+ ///
+ ///
+ ///
+ ///
+ ///
+ public bool GetRemoteAddress(IntPtr connId, ref string ip, ref ushort port)
+ {
+ int ipLength = 40;
+
+ StringBuilder sb = new StringBuilder(ipLength);
+
+ bool ret = Sdk.HP_Server_GetRemoteAddress(pServer, connId, sb, ref ipLength, ref port) && ipLength > 0;
+ if (ret == true)
+ {
+ ip = sb.ToString();
+ }
+
+ return ret;
+ }
+
+ ///
+ /// 鑾峰彇杩炴帴涓湭鍙戝嚭鏁版嵁鐨勯暱搴
+ ///
+ ///
+ ///
+ ///
+ public bool GetPendingDataLength(IntPtr connId, ref int length)
+ {
+ return Sdk.HP_Server_GetPendingDataLength(pServer, connId, ref length);
+ }
+
+ ///
+ /// 璁剧疆杩炴帴鐨勯檮鍔犳暟鎹
+ ///
+ ///
+ /// 濡傛灉涓簄ull,鍒欎负閲婃斁璁剧疆鐨勬暟鎹
+ ///
+ public bool SetConnectionExtra(IntPtr connId, object obj)
+ {
+
+ IntPtr ptr = IntPtr.Zero;
+ // 閲婃斁闄勫姞鏁版嵁
+ if (Sdk.HP_Server_GetConnectionExtra(pServer, connId, ref ptr) && ptr != IntPtr.Zero)
+ {
+ Marshal.FreeHGlobal(ptr);
+ ptr = IntPtr.Zero;
+ }
+
+ if (obj != null)
+ {
+ // 璁剧疆闄勫姞鏁版嵁
+ ptr = Marshal.AllocHGlobal(Marshal.SizeOf(obj));
+ Marshal.StructureToPtr(obj, ptr, false);
+ }
+
+ return Sdk.HP_Server_SetConnectionExtra(pServer, connId, ptr);
+ }
+
+ ///
+ /// 鑾峰彇闄勫姞鏁版嵁
+ /// 濡傝缃殑鏄釜缁撴瀯浣/绫诲璞,鍙互鐢 Type objA = (Type)Marshal.PtrToStructure(ptr, typeof(Type)) 鑾峰彇
+ /// 鍏朵腑Type鏄粨鏋勪綋/绫诲悕,ptr鏄鏂规硶鐨勪紶鍑哄,鍦ㄨ鏂规硶杩斿洖涓簍rue鐨勬椂鍊欏彲鐢
+ ///
+ ///
+ ///
+ ///
+ public bool GetConnectionExtra(IntPtr connId, ref IntPtr ptr)
+ {
+ return Sdk.HP_Server_GetConnectionExtra(pServer, connId, ref ptr) && ptr != IntPtr.Zero;
+ }
+
+ // 鏄惁鍚姩
+ public bool IsStarted
+ {
+ get
+ {
+ if (pServer == IntPtr.Zero)
+ {
+ return false;
+ }
+ return Sdk.HP_Server_HasStarted(pServer);
+ }
+ }
+
+ ///
+ /// 鐘舵
+ ///
+ public ServiceState State
+ {
+ get
+ {
+ return Sdk.HP_Server_GetState(pServer);
+ }
+
+ }
+
+ ///
+ /// 杩炴帴鏁
+ ///
+ public uint ConnectionCount
+ {
+ get
+ {
+ return Sdk.HP_Server_GetConnectionCount(pServer);
+ }
+
+ }
+
+ ///
+ /// 鑾峰彇鎵鏈夎繛鎺,鏈幏鍙栧埌杩炴帴杩斿洖null
+ ///
+ ///
+ public IntPtr[] GetAllConnectionIDs()
+ {
+ IntPtr[] arr = null;
+ do
+ {
+ uint count = ConnectionCount;
+ if (count == 0)
+ {
+ break;
+ }
+ arr = new IntPtr[count];
+ if (Sdk.HP_Server_GetAllConnectionIDs(pServer, arr, ref count))
+ {
+ if (arr.Length > count)
+ {
+ IntPtr[] newArr = new IntPtr[count];
+ Array.Copy(arr, newArr, count);
+ arr = newArr;
+ }
+ break;
+ }
+ } while (true);
+
+ return arr;
+ }
+
+ ///
+ /// 鑾峰彇鐩戝惉socket鐨勫湴鍧淇℃伅
+ ///
+ ///
+ ///
+ ///
+ public bool GetListenAddress(ref string ip, ref ushort port)
+ {
+ int ipLength = 40;
+
+ StringBuilder sb = new StringBuilder(ipLength);
+
+ bool ret = Sdk.HP_Server_GetListenAddress(pServer, sb, ref ipLength, ref port);
+ if (ret == true)
+ {
+ ip = sb.ToString();
+ }
+ return ret;
+ }
+
+
+ ///
+ /// 鑾峰彇鎸囧畾杩炴帴鐨勮繛鎺ユ椂闀匡紙姣锛
+ ///
+ ///
+ ///
+ ///
+ public bool GetConnectPeriod(IntPtr connId, ref uint period)
+ {
+ return Sdk.HP_Server_GetConnectPeriod(pServer, connId, ref period);
+ }
+
+ ///
+ /// 鑾峰彇鏌愪釜杩炴帴闈欓粯鏃堕棿锛堟绉掞級
+ ///
+ ///
+ ///
+ ///
+ public bool GetSilencePeriod(IntPtr connId, ref uint period)
+ {
+ return Sdk.HP_Server_GetSilencePeriod(pServer, connId, ref period);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////////////
+
+ ///
+ /// 璇诲彇鎴栬缃伐浣滅嚎绋嬫暟閲忥紙閫氬父璁剧疆涓 2 * CPU + 2锛
+ ///
+ public uint WorkerThreadCount
+ {
+ get
+ {
+ return Sdk.HP_Server_GetWorkerThreadCount(pServer);
+ }
+ set
+ {
+ Sdk.HP_Server_SetWorkerThreadCount(pServer, value);
+ }
+ }
+
+ ///
+ /// 璇诲彇鎴栬缃 Accept 棰勬姇閫掓暟閲忥紙鏍规嵁璐熻浇璋冩暣璁剧疆锛孉ccept 棰勬姇閫掓暟閲忚秺澶у垯鏀寔鐨勫苟鍙戣繛鎺ヨ姹傝秺澶氾級
+ ///
+ public uint AcceptSocketCount
+ {
+ get
+ {
+ return Sdk.HP_TcpServer_GetAcceptSocketCount(pServer);
+ }
+ set
+ {
+ Sdk.HP_TcpServer_SetAcceptSocketCount(pServer, value);
+ }
+ }
+
+ ///
+ /// 璇诲彇鎴栬缃氫俊鏁版嵁缂撳啿鍖哄ぇ灏忥紙鏍规嵁骞冲潎閫氫俊鏁版嵁鍖呭ぇ灏忚皟鏁磋缃紝閫氬父璁剧疆涓 1024 鐨勫嶆暟锛
+ ///
+ public uint SocketBufferSize
+ {
+ get
+ {
+ return Sdk.HP_TcpServer_GetSocketBufferSize(pServer);
+ }
+ set
+ {
+ Sdk.HP_TcpServer_SetSocketBufferSize(pServer, value);
+ }
+ }
+
+ ///
+ /// 璇诲彇鎴栬缃洃鍚 Socket 鐨勭瓑鍊欓槦鍒楀ぇ灏忥紙鏍规嵁骞跺彂杩炴帴鏁伴噺璋冩暣璁剧疆锛
+ ///
+ public uint SocketListenQueue
+ {
+ get
+ {
+ return Sdk.HP_TcpServer_GetSocketListenQueue(pServer);
+ }
+ set
+ {
+ Sdk.HP_TcpServer_SetSocketListenQueue(pServer, value);
+ }
+ }
+
+ ///
+ /// 璇诲彇鎴栬缃 Socket 缂撳瓨瀵硅薄閿佸畾鏃堕棿锛堟绉掞紝鍦ㄩ攣瀹氭湡闂磋 Socket 缂撳瓨瀵硅薄涓嶈兘琚幏鍙栦娇鐢級
+ ///
+ public uint FreeSocketObjLockTime
+ {
+ get
+ {
+ return Sdk.HP_Server_GetFreeSocketObjLockTime(pServer);
+ }
+ set
+ {
+ Sdk.HP_Server_SetFreeSocketObjLockTime(pServer, value);
+ }
+ }
+
+ ///
+ /// 璇诲彇鎴栬缃 Socket 缂撳瓨姹犲ぇ灏忥紙閫氬父璁剧疆涓哄钩鍧囧苟鍙戣繛鎺ユ暟閲忕殑 1/3 - 1/2锛
+ ///
+ public uint FreeSocketObjPool
+ {
+ get
+ {
+ return Sdk.HP_Server_GetFreeSocketObjPool(pServer);
+ }
+ set
+ {
+ Sdk.HP_Server_SetFreeSocketObjPool(pServer, value);
+ }
+ }
+
+ ///
+ /// 璇诲彇鎴栬缃唴瀛樺潡缂撳瓨姹犲ぇ灏忥紙閫氬父璁剧疆涓 Socket 缂撳瓨姹犲ぇ灏忕殑 2 - 3 鍊嶏級
+ ///
+ public uint FreeBufferObjPool
+ {
+ get
+ {
+ return Sdk.HP_Server_GetFreeBufferObjPool(pServer);
+ }
+ set
+ {
+ Sdk.HP_Server_SetFreeBufferObjPool(pServer, value);
+ }
+ }
+
+ ///
+ /// 璇诲彇鎴栬缃唴瀛樺潡缂撳瓨姹犲ぇ灏忥紙閫氬父璁剧疆涓 Socket 缂撳瓨姹犲ぇ灏忕殑 2 - 3 鍊嶏級
+ ///
+ public uint FreeSocketObjHold
+ {
+ get
+ {
+ return Sdk.HP_Server_GetFreeSocketObjHold(pServer);
+ }
+ set
+ {
+ Sdk.HP_Server_SetFreeSocketObjHold(pServer, value);
+ }
+ }
+
+ ///
+ /// 璇诲彇鎴栬缃唴瀛樺潡缂撳瓨姹犲洖鏀堕榾鍊硷紙閫氬父璁剧疆涓哄唴瀛樺潡缂撳瓨姹犲ぇ灏忕殑 3 鍊嶏級
+ ///
+ public uint FreeBufferObjHold
+ {
+ get
+ {
+ return Sdk.HP_Server_GetFreeBufferObjHold(pServer);
+ }
+ set
+ {
+ Sdk.HP_Server_SetFreeBufferObjHold(pServer, value);
+ }
+ }
+
+ ///
+ /// 璇诲彇鎴栬缃績璺冲寘闂撮殧锛堟绉掞紝0 鍒欎笉鍙戦佸績璺冲寘锛
+ ///
+ public uint KeepAliveTime
+ {
+ get
+ {
+ return Sdk.HP_TcpServer_GetKeepAliveTime(pServer);
+ }
+ set
+ {
+ Sdk.HP_TcpServer_SetKeepAliveTime(pServer, value);
+ }
+ }
+
+ ///
+ /// 璇诲彇鎴栬缃績璺崇‘璁ゅ寘妫娴嬮棿闅旓紙姣锛0 涓嶅彂閫佸績璺冲寘锛屽鏋滆秴杩囪嫢骞叉 [榛樿锛歐inXP 5 娆, Win7 10 娆 妫娴嬩笉鍒板績璺崇‘璁ゅ寘鍒欒涓哄凡鏂嚎锛
+ ///
+ public uint KeepAliveInterval
+ {
+ get
+ {
+ return Sdk.HP_TcpServer_GetKeepAliveInterval(pServer);
+ }
+ set
+ {
+ Sdk.HP_TcpServer_SetKeepAliveInterval(pServer, value);
+ }
+ }
+
+ ///
+ /// 璇诲彇鎴栬缃槸鍚︽爣璁伴潤榛樻椂闂达紙璁剧疆涓 TRUE 鏃 DisconnectSilenceConnections() 鍜 GetSilencePeriod() 鎵嶆湁鏁堬紝榛樿锛欶ALSE锛
+ ///
+ public bool MarkSilence
+ {
+ get
+ {
+ return Sdk.HP_Server_IsMarkSilence(pServer);
+ }
+ set
+ {
+ Sdk.HP_Server_SetMarkSilence(pServer, value);
+ }
+ }
+
+ ///
+ /// 鑾峰彇鎴栬缃暟鎹彂閫佺瓥鐣
+ ///
+ public SendPolicy SendPolicy
+ {
+ get
+ {
+ return Sdk.HP_Server_GetSendPolicy(pServer);
+ }
+ set
+ {
+ Sdk.HP_Server_SetSendPolicy(pServer, value);
+ }
+ }
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////
+
+ ///
+ /// 鑾峰彇绯荤粺杩斿洖鐨勯敊璇爜
+ ///
+ public int SYSGetLastError()
+ {
+ return Sdk.SYS_GetLastError();
+ }
+
+ ///
+ /// 璋冪敤绯荤粺鐨 ::WSAGetLastError() 鏂规硶鑾峰彇閫氫俊閿欒浠g爜
+ ///
+ public int SYSWSAGetLastError()
+ {
+ return Sdk.SYS_WSAGetLastError();
+ }
+
+ ///
+ /// 鑾峰彇閿欒鐮
+ ///
+ public SocketError ErrorCode
+ {
+ get
+ {
+ return Sdk.HP_Server_GetLastError(pServer);
+ }
+ }
+
+ ///
+ /// 鑾峰彇閿欒淇℃伅
+ ///
+ public string ErrorMessage
+ {
+ get
+ {
+ IntPtr ptr = Sdk.HP_Server_GetLastErrorDesc(pServer);
+ string desc = Marshal.PtrToStringUni(ptr);
+ return desc;
+ }
+ }
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////
+ Sdk.OnPrepareListen _OnPrepareListen = null;
+ Sdk.OnAccept _OnAccept = null;
+ Sdk.OnReceive _OnReceive = null;
+ Sdk.OnSend _OnSend = null;
+ Sdk.OnClose _OnClose = null;
+ Sdk.OnShutdown _OnShutdown = null;
+
+ protected virtual void SetCallback()
+ {
+ _OnPrepareListen = new Sdk.OnPrepareListen(SDK_OnPrepareListen);
+ _OnAccept = new Sdk.OnAccept(SDK_OnAccept);
+ _OnSend = new Sdk.OnSend(SDK_OnSend);
+ _OnReceive = new Sdk.OnReceive(SDK_OnReceive);
+ _OnClose = new Sdk.OnClose(SDK_OnClose);
+ _OnShutdown = new Sdk.OnShutdown(SDK_OnShutdown);
+
+ Sdk.HP_Set_FN_Server_OnPrepareListen(pListener, _OnPrepareListen);
+ Sdk.HP_Set_FN_Server_OnAccept(pListener, _OnAccept);
+ Sdk.HP_Set_FN_Server_OnSend(pListener, _OnSend);
+ Sdk.HP_Set_FN_Server_OnReceive(pListener, _OnReceive);
+ Sdk.HP_Set_FN_Server_OnClose(pListener, _OnClose);
+ Sdk.HP_Set_FN_Server_OnShutdown(pListener, _OnShutdown);
+ }
+
+
+ protected HandleResult SDK_OnPrepareListen(IntPtr soListen)
+ {
+ if (OnPrepareListen != null)
+ {
+ return OnPrepareListen(soListen);
+ }
+ return HandleResult.Ignore;
+ }
+
+ protected HandleResult SDK_OnAccept(IntPtr connId, IntPtr pClient)
+ {
+ if (OnAccept != null)
+ {
+ return OnAccept(connId, pClient);
+ }
+
+ return HandleResult.Ignore;
+ }
+
+ protected HandleResult SDK_OnSend(IntPtr connId, IntPtr pData, int length)
+ {
+ if (OnSend != null)
+ {
+ byte[] bytes = new byte[length];
+ Marshal.Copy(pData, bytes, 0, length);
+ return OnSend(connId, bytes);
+ }
+ return HandleResult.Ignore;
+ }
+
+ protected HandleResult SDK_OnReceive(IntPtr connId, IntPtr pData, int length)
+ {
+ if (OnReceive != null)
+ {
+ byte[] bytes = new byte[length];
+ Marshal.Copy(pData, bytes, 0, length);
+ return OnReceive(connId, bytes);
+ }
+ return HandleResult.Ignore;
+ }
+
+ protected HandleResult SDK_OnClose(IntPtr connId, SocketOperation enOperation, int errorCode)
+ {
+ if (OnClose != null)
+ {
+ return OnClose(connId, enOperation, errorCode);
+ }
+ return HandleResult.Ignore;
+ }
+
+ protected HandleResult SDK_OnShutdown()
+ {
+ if (OnShutdown != null)
+ {
+ return OnShutdown();
+ }
+ return HandleResult.Ignore;
+ }
+
+
+ /////////////////////////////////////////////////////////////////////////
+
+ ///
+ /// 鏍规嵁閿欒鐮佽繑鍥為敊璇俊鎭
+ ///
+ ///
+ ///
+ public string GetSocketErrorDesc(SocketError code)
+ {
+ IntPtr ptr = Sdk.HP_GetSocketErrorDesc(code);
+ string desc = Marshal.PtrToStringUni(ptr);
+ return desc;
+ }
+
+
+ ///
+ /// 璋冪敤绯荤粺鐨 setsockopt()
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public int SYS_SetSocketOption(IntPtr sock, int level, int name, IntPtr val, int len)
+ {
+ return Sdk.SYS_SetSocketOption(sock, level, name, val, len);
+ }
+
+ ///
+ /// 璋冪敤绯荤粺鐨 getsockopt()
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public int SYSGetSocketOption(IntPtr sock, int level, int name, IntPtr val, ref int len)
+ {
+ return Sdk.SYS_GetSocketOption(sock, level, name, val, ref len);
+ }
+ ///
+ /// 璋冪敤绯荤粺鐨 ioctlsocket()
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public int SYSIoctlSocket(IntPtr sock, long cmd, IntPtr arg)
+ {
+ return Sdk.SYS_IoctlSocket(sock, cmd, arg);
+ }
+
+ ///
+ /// 璋冪敤绯荤粺鐨 ::WSAIoctl()
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public int SYS_WSAIoctl(IntPtr sock, uint dwIoControlCode, IntPtr lpvInBuffer, uint cbInBuffer,
+ IntPtr lpvOutBuffer, uint cbOutBuffer, uint lpcbBytesReturned)
+ {
+ return Sdk.SYS_WSAIoctl(sock, dwIoControlCode, lpvInBuffer, cbInBuffer,
+ lpvOutBuffer, cbOutBuffer, lpcbBytesReturned);
+ }
+
+ ///
+ /// 鐢辩粨鏋勪綋杞崲涓篵yte鏁扮粍
+ ///
+ public byte[] StructureToByte(T structure)
+ {
+ int size = Marshal.SizeOf(typeof(T));
+ byte[] buffer = new byte[size];
+ IntPtr bufferIntPtr = Marshal.AllocHGlobal(size);
+ try
+ {
+ Marshal.StructureToPtr(structure, bufferIntPtr, true);
+ Marshal.Copy(bufferIntPtr, buffer, 0, size);
+ }
+ finally
+ {
+ Marshal.FreeHGlobal(bufferIntPtr);
+ }
+ return buffer;
+ }
+
+ ///
+ /// 鐢眀yte鏁扮粍杞崲涓虹粨鏋勪綋
+ ///
+ public T ByteToStructure(byte[] dataBuffer)
+ {
+ object structure = null;
+ int size = Marshal.SizeOf(typeof(T));
+ IntPtr allocIntPtr = Marshal.AllocHGlobal(size);
+ try
+ {
+ Marshal.Copy(dataBuffer, 0, allocIntPtr, size);
+ structure = Marshal.PtrToStructure(allocIntPtr, typeof(T));
+ }
+ finally
+ {
+ Marshal.FreeHGlobal(allocIntPtr);
+ }
+ return (T)structure;
+ }
+
+ ///
+ /// 瀵硅薄搴忓垪鍖栨垚byte[]
+ ///
+ ///
+ ///
+ public byte[] ObjectToBytes(object obj)
+ {
+ using (MemoryStream ms = new MemoryStream())
+ {
+ IFormatter formatter = new BinaryFormatter();
+ formatter.Serialize(ms, obj);
+ return ms.GetBuffer();
+ }
+ }
+
+ ///
+ /// byte[]搴忓垪鍖栨垚瀵硅薄
+ ///
+ ///
+ ///
+ public object BytesToObject(byte[] bytes)
+ {
+ using (MemoryStream ms = new MemoryStream(bytes))
+ {
+ IFormatter formatter = new BinaryFormatter();
+ return formatter.Deserialize(ms);
+ }
+ }
+ ///
+ /// byte[]杞粨鏋勪綋
+ ///
+ ///
+ ///
+ ///
+ public T BytesToStruct(byte[] bytes)
+ {
+ Type strcutType = typeof(T);
+ int size = Marshal.SizeOf(strcutType);
+ IntPtr buffer = Marshal.AllocHGlobal(size);
+ try
+ {
+ Marshal.Copy(bytes, 0, buffer, size);
+ return (T)Marshal.PtrToStructure(buffer, strcutType);
+ }
+ finally
+ {
+ Marshal.FreeHGlobal(buffer);
+ }
+ }
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache
new file mode 100644
index 000000000..07d14c57c
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/obj/Debug/HPSocketCS.csproj.FileListAbsolute.txt b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/obj/Debug/HPSocketCS.csproj.FileListAbsolute.txt
new file mode 100644
index 000000000..76a8945a4
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/obj/Debug/HPSocketCS.csproj.FileListAbsolute.txt
@@ -0,0 +1,4 @@
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\bin\x86\Debug\HPSocketCS.dll
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\bin\x86\Debug\HPSocketCS.pdb
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\HPSocketCS\obj\Debug\HPSocketCS.dll
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\HPSocketCS\obj\Debug\HPSocketCS.pdb
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/obj/Debug/HPSocketCS.dll b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/obj/Debug/HPSocketCS.dll
new file mode 100644
index 000000000..72317150e
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/obj/Debug/HPSocketCS.dll differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/obj/Release/DesignTimeResolveAssemblyReferencesInput.cache b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/obj/Release/DesignTimeResolveAssemblyReferencesInput.cache
new file mode 100644
index 000000000..78345feaf
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/obj/Release/DesignTimeResolveAssemblyReferencesInput.cache differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/obj/Release/HPSocketCS.csproj.FileListAbsolute.txt b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/obj/Release/HPSocketCS.csproj.FileListAbsolute.txt
new file mode 100644
index 000000000..c70dddc70
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/obj/Release/HPSocketCS.csproj.FileListAbsolute.txt
@@ -0,0 +1,4 @@
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\bin\x86\Release\HPSocketCS.dll
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\bin\x86\Release\HPSocketCS.pdb
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\HPSocketCS\obj\Release\HPSocketCS.dll
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\HPSocketCS\obj\Release\HPSocketCS.pdb
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/obj/Release/HPSocketCS.dll b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/obj/Release/HPSocketCS.dll
new file mode 100644
index 000000000..76adccd6c
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/obj/Release/HPSocketCS.dll differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/obj/x64/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/obj/x64/Debug/DesignTimeResolveAssemblyReferencesInput.cache
new file mode 100644
index 000000000..af104cb94
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/obj/x64/Debug/DesignTimeResolveAssemblyReferencesInput.cache differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/obj/x64/Debug/HPSocketCS.csproj.FileListAbsolute.txt b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/obj/x64/Debug/HPSocketCS.csproj.FileListAbsolute.txt
new file mode 100644
index 000000000..fad9888bc
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/obj/x64/Debug/HPSocketCS.csproj.FileListAbsolute.txt
@@ -0,0 +1,4 @@
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\bin\x64\Debug\HPSocketCS.dll
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\bin\x64\Debug\HPSocketCS.pdb
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\HPSocketCS\obj\x64\Debug\HPSocketCS.dll
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\HPSocketCS\obj\x64\Debug\HPSocketCS.pdb
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/obj/x64/Debug/HPSocketCS.dll b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/obj/x64/Debug/HPSocketCS.dll
new file mode 100644
index 000000000..f19364069
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/obj/x64/Debug/HPSocketCS.dll differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/obj/x64/Release/DesignTimeResolveAssemblyReferencesInput.cache b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/obj/x64/Release/DesignTimeResolveAssemblyReferencesInput.cache
new file mode 100644
index 000000000..9247a1120
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/obj/x64/Release/DesignTimeResolveAssemblyReferencesInput.cache differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/obj/x64/Release/HPSocketCS.csproj.FileListAbsolute.txt b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/obj/x64/Release/HPSocketCS.csproj.FileListAbsolute.txt
new file mode 100644
index 000000000..9e77be770
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/obj/x64/Release/HPSocketCS.csproj.FileListAbsolute.txt
@@ -0,0 +1,5 @@
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\bin\x64\Release\HPSocketCS.dll
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\bin\x64\Release\HPSocketCS.pdb
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\HPSocketCS\obj\x64\Release\HPSocketCS.csprojResolveAssemblyReference.cache
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\HPSocketCS\obj\x64\Release\HPSocketCS.dll
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\HPSocketCS\obj\x64\Release\HPSocketCS.pdb
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/obj/x64/Release/HPSocketCS.csprojResolveAssemblyReference.cache b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/obj/x64/Release/HPSocketCS.csprojResolveAssemblyReference.cache
new file mode 100644
index 000000000..3de0bd2b3
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/obj/x64/Release/HPSocketCS.csprojResolveAssemblyReference.cache differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/obj/x64/Release/HPSocketCS.dll b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/obj/x64/Release/HPSocketCS.dll
new file mode 100644
index 000000000..a8d3a36e4
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/HPSocketCS/obj/x64/Release/HPSocketCS.dll differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLClient/Program.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLClient/Program.cs
new file mode 100644
index 000000000..59a54816e
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLClient/Program.cs
@@ -0,0 +1,21 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Windows.Forms;
+
+namespace SSLClientNS
+{
+ static class Program
+ {
+ ///
+ /// 搴旂敤绋嬪簭鐨勪富鍏ュ彛鐐广
+ ///
+ [STAThread]
+ static void Main()
+ {
+ Application.EnableVisualStyles();
+ Application.SetCompatibleTextRenderingDefault(false);
+ Application.Run(new frmClient());
+ }
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLClient/Properties/AssemblyInfo.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLClient/Properties/AssemblyInfo.cs
new file mode 100644
index 000000000..347b39f6d
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLClient/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+锘縰sing System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 鏈夊叧绋嬪簭闆嗙殑甯歌淇℃伅閫氳繃浠ヤ笅
+// 鐗规ч泦鎺у埗銆傛洿鏀硅繖浜涚壒鎬у煎彲淇敼
+// 涓庣▼搴忛泦鍏宠仈鐨勪俊鎭
+[assembly: AssemblyTitle("Client")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Client")]
+[assembly: AssemblyCopyright("Copyright 漏 2014")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 灏 ComVisible 璁剧疆涓 false 浣挎绋嬪簭闆嗕腑鐨勭被鍨
+// 瀵 COM 缁勪欢涓嶅彲瑙併傚鏋滈渶瑕佷粠 COM 璁块棶姝ょ▼搴忛泦涓殑绫诲瀷锛
+// 鍒欏皢璇ョ被鍨嬩笂鐨 ComVisible 鐗规ц缃负 true銆
+[assembly: ComVisible(false)]
+
+// 濡傛灉姝ら」鐩悜 COM 鍏紑锛屽垯涓嬪垪 GUID 鐢ㄤ簬绫诲瀷搴撶殑 ID
+[assembly: Guid("0b4a498a-774e-4250-bf80-a05682b557fb")]
+
+// 绋嬪簭闆嗙殑鐗堟湰淇℃伅鐢变笅闈㈠洓涓肩粍鎴:
+//
+// 涓荤増鏈
+// 娆$増鏈
+// 鍐呴儴鐗堟湰鍙
+// 淇鍙
+//
+// 鍙互鎸囧畾鎵鏈夎繖浜涘硷紝涔熷彲浠ヤ娇鐢ㄢ滃唴閮ㄧ増鏈彿鈥濆拰鈥滀慨璁㈠彿鈥濈殑榛樿鍊硷紝
+// 鏂规硶鏄寜濡備笅鎵绀轰娇鐢ㄢ*鈥:
+
+[assembly: AssemblyVersion("3.5.2")]
+[assembly: AssemblyFileVersion("3.5.2")]
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLClient/Properties/Resources.Designer.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLClient/Properties/Resources.Designer.cs
new file mode 100644
index 000000000..7ea34929a
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLClient/Properties/Resources.Designer.cs
@@ -0,0 +1,63 @@
+锘//------------------------------------------------------------------------------
+//
+// 姝や唬鐮佺敱宸ュ叿鐢熸垚銆
+// 杩愯鏃剁増鏈:4.0.30319.42000
+//
+// 瀵规鏂囦欢鐨勬洿鏀瑰彲鑳戒細瀵艰嚧涓嶆纭殑琛屼负锛屽苟涓斿鏋
+// 閲嶆柊鐢熸垚浠g爜锛岃繖浜涙洿鏀瑰皢浼氫涪澶便
+//
+//------------------------------------------------------------------------------
+
+namespace SSLClientNS.Properties {
+ using System;
+
+
+ ///
+ /// 涓涓己绫诲瀷鐨勮祫婧愮被锛岀敤浜庢煡鎵炬湰鍦板寲鐨勫瓧绗︿覆绛夈
+ ///
+ // 姝ょ被鏄敱 StronglyTypedResourceBuilder
+ // 绫婚氳繃绫讳技浜 ResGen 鎴 Visual Studio 鐨勫伐鍏疯嚜鍔ㄧ敓鎴愮殑銆
+ // 鑻ヨ娣诲姞鎴栫Щ闄ゆ垚鍛橈紝璇风紪杈 .ResX 鏂囦欢锛岀劧鍚庨噸鏂拌繍琛 ResGen
+ // (浠 /str 浣滀负鍛戒护閫夐」)锛屾垨閲嶆柊鐢熸垚 VS 椤圭洰銆
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ internal class Resources {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources() {
+ }
+
+ ///
+ /// 杩斿洖姝ょ被浣跨敤鐨勭紦瀛樼殑 ResourceManager 瀹炰緥銆
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager {
+ get {
+ if (object.ReferenceEquals(resourceMan, null)) {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("SSLClientNS.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// 浣跨敤姝ゅ己绫诲瀷璧勬簮绫伙紝涓烘墍鏈夎祫婧愭煡鎵
+ /// 閲嶅啓褰撳墠绾跨▼鐨 CurrentUICulture 灞炴с
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLClient/Properties/Resources.resx b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLClient/Properties/Resources.resx
new file mode 100644
index 000000000..af7dbebba
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLClient/Properties/Resources.resx
@@ -0,0 +1,117 @@
+锘
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLClient/Properties/Settings.Designer.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLClient/Properties/Settings.Designer.cs
new file mode 100644
index 000000000..40c1b1885
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLClient/Properties/Settings.Designer.cs
@@ -0,0 +1,26 @@
+锘//------------------------------------------------------------------------------
+//
+// 姝や唬鐮佺敱宸ュ叿鐢熸垚銆
+// 杩愯鏃剁増鏈:4.0.30319.42000
+//
+// 瀵规鏂囦欢鐨勬洿鏀瑰彲鑳戒細瀵艰嚧涓嶆纭殑琛屼负锛屽苟涓斿鏋
+// 閲嶆柊鐢熸垚浠g爜锛岃繖浜涙洿鏀瑰皢浼氫涪澶便
+//
+//------------------------------------------------------------------------------
+
+namespace SSLClientNS.Properties {
+
+
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0")]
+ internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+
+ private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+ public static Settings Default {
+ get {
+ return defaultInstance;
+ }
+ }
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLClient/Properties/Settings.settings b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLClient/Properties/Settings.settings
new file mode 100644
index 000000000..39645652a
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLClient/Properties/Settings.settings
@@ -0,0 +1,7 @@
+锘
+
+
+
+
+
+
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLClient/SSLClient.csproj b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLClient/SSLClient.csproj
new file mode 100644
index 000000000..6f6a047e3
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLClient/SSLClient.csproj
@@ -0,0 +1,127 @@
+锘
+
+
+ Debug
+ x86
+ 8.0.30703
+ 2.0
+ {90562CEB-1B6C-43AF-80A2-386A4323A4EF}
+ WinExe
+ Properties
+ SSLClientNS
+ SSLClient
+ v4.0
+ Client
+ 512
+
+
+ x86
+ true
+ full
+ false
+ ..\bin\x86\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ x86
+ pdbonly
+ true
+ ..\bin\x86\Release\
+ TRACE
+ prompt
+ 4
+ false
+
+
+ true
+ ..\bin\x64\Debug\
+ DEBUG;TRACE
+ full
+ x64
+ ..\bin\Debug\TcpClient.exe.CodeAnalysisLog.xml
+ true
+ GlobalSuppressions.cs
+ prompt
+ MinimumRecommendedRules.ruleset
+ ;D:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets
+ true
+ ;D:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules
+ true
+
+
+ ..\bin\x64\Release\
+ TRACE
+ true
+ pdbonly
+ x64
+ ..\bin\Release\TcpClient.exe.CodeAnalysisLog.xml
+ true
+ GlobalSuppressions.cs
+ prompt
+ MinimumRecommendedRules.ruleset
+ ;D:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets
+ true
+ ;D:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Form
+
+
+ frmClient.cs
+
+
+
+
+ frmClient.cs
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+ Designer
+
+
+ True
+ Resources.resx
+ True
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
+ True
+ Settings.settings
+ True
+
+
+
+
+ {DFA935E2-CF37-4E26-B697-D7F3DEE19DD8}
+ HPSocketCS
+
+
+
+
+
\ No newline at end of file
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLClient/frmClient.Designer.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLClient/frmClient.Designer.cs
new file mode 100644
index 000000000..63fa488b8
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLClient/frmClient.Designer.cs
@@ -0,0 +1,205 @@
+锘縩amespace SSLClientNS
+{
+ partial class frmClient
+ {
+ ///
+ /// 蹇呴渶鐨勮璁″櫒鍙橀噺銆
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// 娓呯悊鎵鏈夋鍦ㄤ娇鐢ㄧ殑璧勬簮銆
+ ///
+ /// 濡傛灉搴旈噴鏀炬墭绠¤祫婧愶紝涓 true锛涘惁鍒欎负 false銆
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows 绐椾綋璁捐鍣ㄧ敓鎴愮殑浠g爜
+
+ ///
+ /// 璁捐鍣ㄦ敮鎸佹墍闇鐨勬柟娉 - 涓嶈
+ /// 浣跨敤浠g爜缂栬緫鍣ㄤ慨鏀规鏂规硶鐨勫唴瀹广
+ ///
+ private void InitializeComponent()
+ {
+ this.groupBox1 = new System.Windows.Forms.GroupBox();
+ this.cbxAsyncConn = new System.Windows.Forms.CheckBox();
+ this.txtPort = new System.Windows.Forms.TextBox();
+ this.txtIpAddress = new System.Windows.Forms.TextBox();
+ this.btnStop = new System.Windows.Forms.Button();
+ this.btnStart = new System.Windows.Forms.Button();
+ this.lbxMsg = new System.Windows.Forms.ListBox();
+ this.txtSend = new System.Windows.Forms.TextBox();
+ this.btnSend = new System.Windows.Forms.Button();
+ this.btnSendFile = new System.Windows.Forms.Button();
+ this.btnSendSerializableObject = new System.Windows.Forms.Button();
+ this.groupBox1.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // groupBox1
+ //
+ this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.groupBox1.Controls.Add(this.cbxAsyncConn);
+ this.groupBox1.Controls.Add(this.txtPort);
+ this.groupBox1.Controls.Add(this.txtIpAddress);
+ this.groupBox1.Controls.Add(this.btnStop);
+ this.groupBox1.Controls.Add(this.btnStart);
+ this.groupBox1.Location = new System.Drawing.Point(12, 2);
+ this.groupBox1.Name = "groupBox1";
+ this.groupBox1.Size = new System.Drawing.Size(464, 47);
+ this.groupBox1.TabIndex = 11;
+ this.groupBox1.TabStop = false;
+ //
+ // cbxAsyncConn
+ //
+ this.cbxAsyncConn.AutoSize = true;
+ this.cbxAsyncConn.Checked = true;
+ this.cbxAsyncConn.CheckState = System.Windows.Forms.CheckState.Checked;
+ this.cbxAsyncConn.Location = new System.Drawing.Point(134, 20);
+ this.cbxAsyncConn.Name = "cbxAsyncConn";
+ this.cbxAsyncConn.Size = new System.Drawing.Size(84, 16);
+ this.cbxAsyncConn.TabIndex = 13;
+ this.cbxAsyncConn.Text = "Async Conn";
+ this.cbxAsyncConn.UseVisualStyleBackColor = true;
+ //
+ // txtPort
+ //
+ this.txtPort.Location = new System.Drawing.Point(88, 18);
+ this.txtPort.Name = "txtPort";
+ this.txtPort.Size = new System.Drawing.Size(40, 21);
+ this.txtPort.TabIndex = 12;
+ this.txtPort.Text = "5555";
+ //
+ // txtIpAddress
+ //
+ this.txtIpAddress.Location = new System.Drawing.Point(11, 18);
+ this.txtIpAddress.Name = "txtIpAddress";
+ this.txtIpAddress.Size = new System.Drawing.Size(71, 21);
+ this.txtIpAddress.TabIndex = 11;
+ this.txtIpAddress.Text = "127.0.0.1";
+ //
+ // btnStop
+ //
+ this.btnStop.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnStop.Location = new System.Drawing.Point(407, 15);
+ this.btnStop.Name = "btnStop";
+ this.btnStop.Size = new System.Drawing.Size(47, 26);
+ this.btnStop.TabIndex = 10;
+ this.btnStop.Text = "Stop";
+ this.btnStop.UseVisualStyleBackColor = true;
+ this.btnStop.Click += new System.EventHandler(this.btnStop_Click);
+ //
+ // btnStart
+ //
+ this.btnStart.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnStart.Location = new System.Drawing.Point(354, 15);
+ this.btnStart.Name = "btnStart";
+ this.btnStart.Size = new System.Drawing.Size(47, 26);
+ this.btnStart.TabIndex = 9;
+ this.btnStart.Text = "Start";
+ this.btnStart.UseVisualStyleBackColor = true;
+ this.btnStart.Click += new System.EventHandler(this.btnStart_Click);
+ //
+ // lbxMsg
+ //
+ this.lbxMsg.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.lbxMsg.FormattingEnabled = true;
+ this.lbxMsg.ItemHeight = 12;
+ this.lbxMsg.Location = new System.Drawing.Point(12, 63);
+ this.lbxMsg.Name = "lbxMsg";
+ this.lbxMsg.Size = new System.Drawing.Size(465, 244);
+ this.lbxMsg.TabIndex = 10;
+ this.lbxMsg.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.lbxMsg_KeyPress);
+ //
+ // txtSend
+ //
+ this.txtSend.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.txtSend.Location = new System.Drawing.Point(11, 321);
+ this.txtSend.Name = "txtSend";
+ this.txtSend.Size = new System.Drawing.Size(413, 21);
+ this.txtSend.TabIndex = 12;
+ this.txtSend.Text = "text to be sent";
+ //
+ // btnSend
+ //
+ this.btnSend.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnSend.Location = new System.Drawing.Point(430, 317);
+ this.btnSend.Name = "btnSend";
+ this.btnSend.Size = new System.Drawing.Size(47, 26);
+ this.btnSend.TabIndex = 13;
+ this.btnSend.Text = "Send";
+ this.btnSend.UseVisualStyleBackColor = true;
+ this.btnSend.Click += new System.EventHandler(this.btnSend_Click);
+ //
+ // btnSendFile
+ //
+ this.btnSendFile.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnSendFile.Location = new System.Drawing.Point(206, 348);
+ this.btnSendFile.Name = "btnSendFile";
+ this.btnSendFile.Size = new System.Drawing.Size(75, 26);
+ this.btnSendFile.TabIndex = 14;
+ this.btnSendFile.Text = "Send file";
+ this.btnSendFile.UseVisualStyleBackColor = true;
+ this.btnSendFile.Click += new System.EventHandler(this.btnSendFile_Click);
+ //
+ // btnSendSerializableObject
+ //
+ this.btnSendSerializableObject.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnSendSerializableObject.Location = new System.Drawing.Point(313, 348);
+ this.btnSendSerializableObject.Name = "btnSendSerializableObject";
+ this.btnSendSerializableObject.Size = new System.Drawing.Size(163, 26);
+ this.btnSendSerializableObject.TabIndex = 15;
+ this.btnSendSerializableObject.Text = "Send serializable object";
+ this.btnSendSerializableObject.UseVisualStyleBackColor = true;
+ this.btnSendSerializableObject.Click += new System.EventHandler(this.btnSendSerializableObject_Click);
+ //
+ // frmClient
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(485, 378);
+ this.Controls.Add(this.btnSendSerializableObject);
+ this.Controls.Add(this.btnSendFile);
+ this.Controls.Add(this.btnSend);
+ this.Controls.Add(this.txtSend);
+ this.Controls.Add(this.groupBox1);
+ this.Controls.Add(this.lbxMsg);
+ this.Name = "frmClient";
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
+ this.Text = "Echo-SSLClient [ \'C\' - clear list box ]";
+ this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.frmClient_FormClosed);
+ this.Load += new System.EventHandler(this.frmClient_Load);
+ this.groupBox1.ResumeLayout(false);
+ this.groupBox1.PerformLayout();
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.GroupBox groupBox1;
+ private System.Windows.Forms.TextBox txtPort;
+ private System.Windows.Forms.TextBox txtIpAddress;
+ private System.Windows.Forms.Button btnStop;
+ private System.Windows.Forms.Button btnStart;
+ private System.Windows.Forms.ListBox lbxMsg;
+ private System.Windows.Forms.CheckBox cbxAsyncConn;
+ private System.Windows.Forms.TextBox txtSend;
+ private System.Windows.Forms.Button btnSend;
+ private System.Windows.Forms.Button btnSendFile;
+ private System.Windows.Forms.Button btnSendSerializableObject;
+
+ }
+}
+
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLClient/frmClient.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLClient/frmClient.cs
new file mode 100644
index 000000000..5ac1ba5f5
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLClient/frmClient.cs
@@ -0,0 +1,558 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using HPSocketCS;
+using System.Runtime.InteropServices;
+using System.IO;
+using System.Threading;
+
+namespace SSLClientNS
+{
+ public enum AppState
+ {
+ Starting, Started, Stoping, Stoped, Error
+ }
+
+ public enum StudentType
+ {
+ None, Array, List, Single,
+ }
+
+ public partial class frmClient : Form
+ {
+ private AppState appState = AppState.Stoped;
+
+ private delegate void ConnectUpdateUiDelegate();
+ private delegate void SetAppStateDelegate(AppState state);
+ private delegate void ShowMsg(string msg);
+ private ShowMsg AddMsgDelegate;
+ HPSocketCS.SSLClient client = null;
+
+ bool isSendFile = false;
+ StudentType studentType = StudentType.None;
+ public frmClient()
+ {
+ InitializeComponent();
+ }
+
+ private void frmClient_Load(object sender, EventArgs e)
+ {
+ try
+ {
+ client = new HPSocketCS.SSLClient();
+ client.VerifyMode = SSLVerifyMode.Peer | SSLVerifyMode.FailIfNoPeerCert;
+ client.CAPemCertFileOrPath = "ssl-cert\\ca.crt";
+ client.PemCertFile = "ssl-cert\\server.cer";
+ client.PemKeyFile = "ssl-cert\\server.key";
+ client.KeyPasswod = "123456";
+
+ // 鍔犱釜濮旀墭鏄剧ずmsg,鍥犱负on绯诲垪閮芥槸鍦ㄥ伐浣滅嚎绋嬩腑璋冪敤鐨,ui涓嶅厑璁哥洿鎺ユ搷浣
+ AddMsgDelegate = new ShowMsg(AddMsg);
+
+ // 璁剧疆client浜嬩欢
+ client.OnPrepareConnect += new TcpClientEvent.OnPrepareConnectEventHandler(OnPrepareConnect);
+ client.OnConnect += new TcpClientEvent.OnConnectEventHandler(OnConnect);
+ client.OnSend += new TcpClientEvent.OnSendEventHandler(OnSend);
+ client.OnReceive += new TcpClientEvent.OnReceiveEventHandler(OnReceive);
+ client.OnClose += new TcpClientEvent.OnCloseEventHandler(OnClose);
+
+ client.OnHandShake += new SSLClientEvent.OnHandShakeEventHandler(OnHandShake);
+
+ SetAppState(AppState.Stoped);
+ }
+ catch (Exception ex)
+ {
+ SetAppState(AppState.Error);
+ AddMsg(ex.Message);
+ }
+ }
+
+ private void btnStart_Click(object sender, EventArgs e)
+ {
+ try
+ {
+ String ip = this.txtIpAddress.Text.Trim();
+ ushort port = ushort.Parse(this.txtPort.Text.Trim());
+
+ // 鍐欏湪杩欎釜浣嶇疆鏄笂闈㈠彲鑳戒細寮傚父
+ SetAppState(AppState.Starting);
+
+ AddMsg(string.Format("$Client Starting ... -> ({0}:{1})", ip, port));
+
+ if (client.Connetion(ip, port, this.cbxAsyncConn.Checked))
+ {
+ if (cbxAsyncConn.Checked == false)
+ {
+ SetAppState(AppState.Started);
+ }
+
+ AddMsg(string.Format("$Client Start OK -> ({0}:{1})", ip, port));
+ }
+ else
+ {
+ SetAppState(AppState.Stoped);
+ throw new Exception(string.Format("$Client Start Error -> {0}({1})", client.ErrorMessage, client.ErrorCode));
+ }
+ }
+ catch (Exception ex)
+ {
+ AddMsg(ex.Message);
+ }
+ }
+
+ private void btnStop_Click(object sender, EventArgs e)
+ {
+
+ // 鍋滄鏈嶅姟
+ AddMsg("$Server Stop");
+ if (client.Stop())
+ {
+ SetAppState(AppState.Stoped);
+ }
+ else
+ {
+ AddMsg(string.Format("$Stop Error -> {0}({1})", client.ErrorMessage, client.ErrorCode));
+ }
+ }
+
+ private void btnSend_Click(object sender, EventArgs e)
+ {
+ try
+ {
+ string send = this.txtSend.Text;
+ if (send.Length == 0)
+ {
+ return;
+ }
+
+ byte[] bytes = Encoding.Default.GetBytes(send);
+ IntPtr connId = client.ConnectionId;
+
+ // 鍙戦
+ if (client.Send(bytes, bytes.Length))
+ {
+ AddMsg(string.Format("$ ({0}) Send OK --> {1}", connId, send));
+ }
+ else
+ {
+ AddMsg(string.Format("$ ({0}) Send Fail --> {1} ({2})", connId, send, bytes.Length));
+ }
+
+ }
+ catch (Exception ex)
+ {
+ AddMsg(string.Format("$ Send Fail --> msg ({0})", ex.Message));
+ }
+
+ }
+
+ private void btnSendSerializableObject_Click(object sender, EventArgs e)
+ {
+ try
+ {
+ // 娉: 瀵硅薄搴忓垪鍖栧彂閫佹暟鎹緝澶
+
+ if (studentType != StudentType.None)
+ {
+ // 姝e湪鎵ц
+ throw new Exception("being implemented");
+ }
+
+
+
+ IntPtr connId = client.ConnectionId;
+
+ Thread thread = new Thread(new ThreadStart(delegate()
+ {
+ Student[] students = new Student[2];
+ students[0] = new Student();
+ students[0].Id = 1;
+ students[0].Name = "寮犱笁";
+ students[0].Sex = Sex.Female;
+ students[1] = new Student();
+ students[1].Id = 2;
+ students[1].Name = "鏉庡洓";
+ students[1].Sex = Sex.Male;
+
+ // 鍙戦佹暟缁勫璞
+ studentType = StudentType.Array;
+ if (client.SendBySerializable(students))
+ {
+ AddMsg(string.Format("$ ({0}) Send OK --> {1}", connId, "Student[]"));
+ }
+ else
+ {
+ AddMsg(string.Format("$ ({0}) Send Fail --> {1}", connId, "Student[]"));
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////
+
+ // 鏀瑰彉鎬у埆
+ students[0].Sex = Sex.Transsexual;
+
+ List stuList = new List();
+ stuList.Add(students[0]);
+ stuList.Add(students[1]);
+
+ // 闃叉绮樺寘,寤惰繜2绉掑彂閫佷笅涓缁勬暟鎹
+ AddMsg(" *** 2 seconds after sending ...");
+ Thread.Sleep(2000);
+
+ // 鍙戦乴ist瀵硅薄
+ studentType = StudentType.List;
+ if (client.SendBySerializable(stuList))
+ {
+ AddMsg(string.Format("$ ({0}) Send OK --> {1}", connId, "List"));
+ }
+ else
+ {
+ AddMsg(string.Format("$ ({0}) Send Fail --> {1}", connId, "List"));
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////
+
+ // 闃叉绮樺寘,寤惰繜2绉掑彂閫佷笅涓缁勬暟鎹
+ AddMsg(" *** 2 seconds after sending ...");
+ Thread.Sleep(2000);
+
+ // 鏀瑰彉鎬у埆
+ students[0].Sex = Sex.Unknown;
+
+ // 鍙戦佸崟涓鍛樹俊鎭
+ studentType = StudentType.Single;
+ if (client.SendBySerializable(students[0]))
+ {
+ AddMsg(string.Format("$ ({0}) Send OK --> {1}", connId, "Student"));
+ }
+ else
+ {
+ AddMsg(string.Format("$ ({0}) Send Fail --> {1}", connId, "Student"));
+ }
+
+ }));
+ thread.Start();
+ }
+ catch (Exception ex)
+ {
+ studentType = StudentType.None;
+ AddMsg(string.Format("$ Send Fail --> msg ({0})", ex.Message));
+ }
+ }
+
+ private void lbxMsg_KeyPress(object sender, KeyPressEventArgs e)
+ {
+
+ // 娓呯悊listbox
+ if (e.KeyChar == 'c' || e.KeyChar == 'C')
+ {
+ this.lbxMsg.Items.Clear();
+ }
+ }
+
+ void ConnectUpdateUi()
+ {
+ if (this.cbxAsyncConn.Checked == true)
+ {
+ SetAppState(AppState.Started);
+ }
+ }
+
+
+ private bool SendFileToServer(string filePath)
+ {
+ FileInfo fi = new FileInfo(filePath);
+ if (fi.Length > 4096 * 1024)
+ {
+ throw new Exception("琚彂閫佹枃浠跺ぇ灏忎笉鑳借秴杩4096KB銆");
+ }
+ else if (fi.Length == 0)
+ {
+ throw new Exception("鏂囦欢澶у皬涓嶈兘涓0銆");
+ }
+
+ // 澶撮檮鍔犳暟鎹
+ MyFileInfo myFile = new MyFileInfo()
+ {
+ FilePath = filePath,
+ FileSize = fi.Length,
+ };
+
+ // 鍙戦佹枃浠舵爣璁,鐢ㄦ潵鍦╫nrecv閲屽垽鏂槸鍚︽枃浠跺洖鍖
+ isSendFile = true;
+
+ // 涓嶉檮鍔犲熬鏁版嵁
+ bool ret = client.SendSmallFile(filePath, myFile, null);
+ if (ret == false)
+ {
+ isSendFile = false;
+ int error = client.SYSGetLastError();
+ AddMsg(string.Format(" > [SendSmallFile] errorCode:{0}", error));
+ }
+
+ return ret;
+ }
+
+ HandleResult OnPrepareConnect(TcpClient sender, uint socket)
+ {
+ return HandleResult.Ok;
+ }
+
+ HandleResult OnConnect(TcpClient sender)
+ {
+ // 宸茶繛鎺 鍒拌揪涓娆
+
+ // 濡傛灉鏄紓姝ヨ仈鎺,鏇存柊鐣岄潰鐘舵
+ this.Invoke(new ConnectUpdateUiDelegate(ConnectUpdateUi));
+
+ AddMsg(string.Format(" > [{0},OnConnect]", sender.ConnectionId));
+
+ return HandleResult.Ok;
+ }
+
+ HandleResult OnSend(TcpClient sender, byte[] bytes)
+ {
+ // 瀹㈡埛绔彂鏁版嵁浜
+ AddMsg(string.Format(" > [{0},OnSend] -> ({1} bytes)", sender.ConnectionId, bytes.Length));
+
+ return HandleResult.Ok;
+ }
+
+ HandleResult OnReceive(TcpClient sender, byte[] bytes)
+ {
+ // 鏁版嵁鍒拌揪浜
+ if (isSendFile == true)
+ {
+ // 濡傛灉鍙戦佷簡鏂囦欢,骞舵帴鏀跺埌浜嗚繑鍥炴暟鎹
+ isSendFile = false;
+ MyFileInfo myFile = client.BytesToStruct(bytes);
+ int objSize = Marshal.SizeOf(myFile);
+ // 鍥犱负娌℃湁闄勫姞灏炬暟鎹,鎵浠ュぇ灏忓彲浠ョ敤length - objSize
+ byte[] contentBytes = new byte[bytes.Length - objSize];
+ Array.ConstrainedCopy(bytes, objSize, contentBytes, 0, contentBytes.Length);
+
+ string txt = Encoding.Default.GetString(contentBytes);
+ string msg = string.Empty;
+ if (txt.Length > 100)
+ {
+ msg = txt.Substring(0, 100) + "......";
+ }
+ else
+ {
+ msg = txt;
+ }
+
+ AddMsg(string.Format(" > [{0},OnReceive] -> FileInfo(Path:\"{1}\",Size:{2})", sender.ConnectionId, myFile.FilePath, myFile.FileSize));
+ AddMsg(string.Format(" > [{0},OnReceive] -> FileContent(\"{1}\")", sender.ConnectionId, msg));
+ }
+ else if (studentType != StudentType.None)
+ {
+ switch (studentType)
+ {
+ case StudentType.Array:
+ Student[] students = sender.BytesToObject(bytes) as Student[];
+ foreach (var stu in students)
+ {
+ AddMsg(string.Format(" > [{0},OnReceive] -> Student({1},{2},{3})", sender.ConnectionId, stu.Id, stu.Name, stu.GetSexString()));
+ }
+ break;
+ case StudentType.List:
+ List stuList = sender.BytesToObject(bytes) as List;
+ foreach (var stu in stuList)
+ {
+ AddMsg(string.Format(" > [{0},OnReceive] -> Student({1},{2},{3})", sender.ConnectionId, stu.Id, stu.Name, stu.GetSexString()));
+ }
+ break;
+ case StudentType.Single:
+ Student student = sender.BytesToObject(bytes) as Student;
+ AddMsg(string.Format(" > [{0},OnReceive] -> Student({1},{2},{3})", sender.ConnectionId, student.Id, student.Name, student.GetSexString()));
+ studentType = StudentType.None;
+ break;
+ }
+ }
+ else
+ {
+ AddMsg(string.Format(" > [{0},OnReceive] -> ({1} bytes)", sender.ConnectionId, bytes.Length));
+ }
+
+ return HandleResult.Ok;
+ }
+
+ HandleResult OnClose(TcpClient sender, SocketOperation enOperation, int errorCode)
+ {
+ if(errorCode == 0)
+ // 杩炴帴鍏抽棴浜
+ AddMsg(string.Format(" > [{0},OnClose]", sender.ConnectionId));
+ else
+ // 鍑洪敊浜
+ AddMsg(string.Format(" > [{0},OnError] -> OP:{1},CODE:{2}", sender.ConnectionId, enOperation, errorCode));
+
+ // 閫氱煡鐣岄潰,鍙鐞嗕簡杩炴帴閿欒,涔熸病杩涜鏄笉鏄繛鎺ラ敊璇殑鍒ゆ柇,鎵浠ユ湁閿欒灏变細璁剧疆鐣岄潰
+ // 鐢熶骇鐜璇疯嚜宸辨帶鍒
+ this.Invoke(new SetAppStateDelegate(SetAppState), AppState.Stoped);
+
+ return HandleResult.Ok;
+ }
+
+ HandleResult OnHandShake(TcpClient sender)
+ {
+ // ssl鎻℃墜浜
+ AddMsg(string.Format(" > [{0},OnHandShake])", sender.ConnectionId));
+
+ return HandleResult.Ok;
+ }
+
+ ///
+ /// 璁剧疆绋嬪簭鐘舵
+ ///
+ ///
+ void SetAppState(AppState state)
+ {
+ appState = state;
+ this.btnStart.Enabled = (appState == AppState.Stoped);
+ this.btnStop.Enabled = (appState == AppState.Started);
+ this.txtIpAddress.Enabled = (appState == AppState.Stoped);
+ this.txtPort.Enabled = (appState == AppState.Stoped);
+ this.cbxAsyncConn.Enabled = (appState == AppState.Stoped);
+ this.btnSend.Enabled = (appState == AppState.Started);
+ this.btnSendFile.Enabled = (appState == AppState.Started);
+ this.btnSendSerializableObject.Enabled = (appState == AppState.Started);
+ }
+
+ ///
+ /// 寰listbox鍔犱竴鏉¢」鐩
+ ///
+ ///
+ void AddMsg(string msg)
+ {
+ if (this.lbxMsg.InvokeRequired)
+ {
+ // 寰堝竻鐨勮皟鑷繁
+ this.lbxMsg.Invoke(AddMsgDelegate, msg);
+ }
+ else
+ {
+ if (this.lbxMsg.Items.Count > 100)
+ {
+ this.lbxMsg.Items.RemoveAt(0);
+ }
+ this.lbxMsg.Items.Add(msg);
+ this.lbxMsg.TopIndex = this.lbxMsg.Items.Count - (int)(this.lbxMsg.Height / this.lbxMsg.ItemHeight);
+ }
+ }
+
+ private void frmClient_FormClosed(object sender, FormClosedEventArgs e)
+ {
+ client.Destroy();
+ }
+
+
+
+ private void btnSendFile_Click(object sender, EventArgs e)
+ {
+ try
+ {
+
+ OpenFileDialog ofd = new OpenFileDialog();
+ // ofd.InitialDirectory = "c:\\" ;
+ //ofd.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
+ ofd.Filter = "txt files (*.txt)|*.txt";
+ ofd.RestoreDirectory = true;
+ ofd.CheckFileExists = true;
+ ofd.CheckPathExists = true;
+ if (ofd.ShowDialog() == DialogResult.OK)
+ {
+ SendFileToServer(ofd.FileName);
+ }
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show(ex.Message);
+
+ }
+ }
+
+ }
+
+ [StructLayout(LayoutKind.Sequential, Pack = 1)]
+ public struct MyFileInfo
+ {
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 255)]
+ public string FilePath;
+ public long FileSize;
+ }
+
+ ///
+ /// 瀛﹀憳鎬у埆
+ ///
+ public enum Sex
+ {
+ ///
+ /// 鐢
+ ///
+ Male = 1,
+
+ ///
+ /// 濂
+ ///
+ Female = 2,
+
+ ///
+ /// 鍙樻т汉
+ ///
+ Transsexual = 3,
+
+ ///
+ /// 鏈煡
+ ///
+ Unknown = 4,
+
+ }
+
+ ///
+ /// 瀛﹀憳绫
+ ///
+ [Serializable]
+ public class Student
+ {
+ ///
+ /// 缂栧彿
+ ///
+ public int Id { get; set; }
+
+ ///
+ /// 濮撳悕
+ ///
+ public string Name { get; set; }
+
+ ///
+ /// 鎬у埆
+ ///
+ public Sex Sex { get; set; }
+
+ public string GetSexString()
+ {
+ string sex = string.Empty;
+ switch (Sex)
+ {
+ case Sex.Male:
+ sex = "鐢";
+ break;
+ case Sex.Female:
+ sex = "濂";
+ break;
+ case Sex.Transsexual:
+ sex = "鍙樻т汉";
+ break;
+ default:
+ sex = "鏈煡";
+ break;
+ }
+ return sex;
+ }
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLClient/frmClient.resx b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLClient/frmClient.resx
new file mode 100644
index 000000000..1af7de150
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLClient/frmClient.resx
@@ -0,0 +1,120 @@
+锘
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLClient/obj/x64/Release/DesignTimeResolveAssemblyReferencesInput.cache b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLClient/obj/x64/Release/DesignTimeResolveAssemblyReferencesInput.cache
new file mode 100644
index 000000000..6da8e4584
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLClient/obj/x64/Release/DesignTimeResolveAssemblyReferencesInput.cache differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLClient/obj/x64/Release/SSLClient.csproj.FileListAbsolute.txt b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLClient/obj/x64/Release/SSLClient.csproj.FileListAbsolute.txt
new file mode 100644
index 000000000..9900fc408
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLClient/obj/x64/Release/SSLClient.csproj.FileListAbsolute.txt
@@ -0,0 +1,7 @@
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\bin\x64\Release\SSLClient.exe
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\bin\x64\Release\SSLClient.pdb
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\SSLClient\obj\x64\Release\SSLClientNS.frmClient.resources
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\SSLClient\obj\x64\Release\SSLClientNS.Properties.Resources.resources
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\SSLClient\obj\x64\Release\SSLClient.csproj.GenerateResource.Cache
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\SSLClient\obj\x64\Release\SSLClient.exe
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\SSLClient\obj\x64\Release\SSLClient.pdb
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLClient/obj/x64/Release/SSLClient.csproj.GenerateResource.Cache b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLClient/obj/x64/Release/SSLClient.csproj.GenerateResource.Cache
new file mode 100644
index 000000000..468891cb1
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLClient/obj/x64/Release/SSLClient.csproj.GenerateResource.Cache differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLClient/obj/x64/Release/SSLClient.exe b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLClient/obj/x64/Release/SSLClient.exe
new file mode 100644
index 000000000..74e288dc7
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLClient/obj/x64/Release/SSLClient.exe differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLClient/obj/x64/Release/SSLClientNS.Properties.Resources.resources b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLClient/obj/x64/Release/SSLClientNS.Properties.Resources.resources
new file mode 100644
index 000000000..6c05a9776
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLClient/obj/x64/Release/SSLClientNS.Properties.Resources.resources differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLClient/obj/x64/Release/SSLClientNS.frmClient.resources b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLClient/obj/x64/Release/SSLClientNS.frmClient.resources
new file mode 100644
index 000000000..6c05a9776
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLClient/obj/x64/Release/SSLClientNS.frmClient.resources differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLClient/obj/x64/Release/TempPE/Properties.Resources.Designer.cs.dll b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLClient/obj/x64/Release/TempPE/Properties.Resources.Designer.cs.dll
new file mode 100644
index 000000000..12081cf68
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLClient/obj/x64/Release/TempPE/Properties.Resources.Designer.cs.dll differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLClient/obj/x86/Release/DesignTimeResolveAssemblyReferencesInput.cache b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLClient/obj/x86/Release/DesignTimeResolveAssemblyReferencesInput.cache
new file mode 100644
index 000000000..ef55adbae
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLClient/obj/x86/Release/DesignTimeResolveAssemblyReferencesInput.cache differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLClient/obj/x86/Release/SSLClient.csproj.FileListAbsolute.txt b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLClient/obj/x86/Release/SSLClient.csproj.FileListAbsolute.txt
new file mode 100644
index 000000000..adf6201bb
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLClient/obj/x86/Release/SSLClient.csproj.FileListAbsolute.txt
@@ -0,0 +1,7 @@
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\bin\x86\Release\SSLClient.exe
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\bin\x86\Release\SSLClient.pdb
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\SSLClient\obj\x86\Release\SSLClientNS.frmClient.resources
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\SSLClient\obj\x86\Release\SSLClientNS.Properties.Resources.resources
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\SSLClient\obj\x86\Release\SSLClient.csproj.GenerateResource.Cache
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\SSLClient\obj\x86\Release\SSLClient.exe
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\SSLClient\obj\x86\Release\SSLClient.pdb
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLClient/obj/x86/Release/SSLClient.csproj.GenerateResource.Cache b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLClient/obj/x86/Release/SSLClient.csproj.GenerateResource.Cache
new file mode 100644
index 000000000..468891cb1
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLClient/obj/x86/Release/SSLClient.csproj.GenerateResource.Cache differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLClient/obj/x86/Release/SSLClient.exe b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLClient/obj/x86/Release/SSLClient.exe
new file mode 100644
index 000000000..cb12540c2
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLClient/obj/x86/Release/SSLClient.exe differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLClient/obj/x86/Release/SSLClientNS.Properties.Resources.resources b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLClient/obj/x86/Release/SSLClientNS.Properties.Resources.resources
new file mode 100644
index 000000000..6c05a9776
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLClient/obj/x86/Release/SSLClientNS.Properties.Resources.resources differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLClient/obj/x86/Release/SSLClientNS.frmClient.resources b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLClient/obj/x86/Release/SSLClientNS.frmClient.resources
new file mode 100644
index 000000000..6c05a9776
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLClient/obj/x86/Release/SSLClientNS.frmClient.resources differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackClient/Program.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackClient/Program.cs
new file mode 100644
index 000000000..351c9835c
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackClient/Program.cs
@@ -0,0 +1,21 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Windows.Forms;
+
+namespace SSLPackClientNS
+{
+ static class Program
+ {
+ ///
+ /// 搴旂敤绋嬪簭鐨勪富鍏ュ彛鐐广
+ ///
+ [STAThread]
+ static void Main()
+ {
+ Application.EnableVisualStyles();
+ Application.SetCompatibleTextRenderingDefault(false);
+ Application.Run(new frmClient());
+ }
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackClient/Properties/AssemblyInfo.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackClient/Properties/AssemblyInfo.cs
new file mode 100644
index 000000000..347b39f6d
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackClient/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+锘縰sing System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 鏈夊叧绋嬪簭闆嗙殑甯歌淇℃伅閫氳繃浠ヤ笅
+// 鐗规ч泦鎺у埗銆傛洿鏀硅繖浜涚壒鎬у煎彲淇敼
+// 涓庣▼搴忛泦鍏宠仈鐨勪俊鎭
+[assembly: AssemblyTitle("Client")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Client")]
+[assembly: AssemblyCopyright("Copyright 漏 2014")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 灏 ComVisible 璁剧疆涓 false 浣挎绋嬪簭闆嗕腑鐨勭被鍨
+// 瀵 COM 缁勪欢涓嶅彲瑙併傚鏋滈渶瑕佷粠 COM 璁块棶姝ょ▼搴忛泦涓殑绫诲瀷锛
+// 鍒欏皢璇ョ被鍨嬩笂鐨 ComVisible 鐗规ц缃负 true銆
+[assembly: ComVisible(false)]
+
+// 濡傛灉姝ら」鐩悜 COM 鍏紑锛屽垯涓嬪垪 GUID 鐢ㄤ簬绫诲瀷搴撶殑 ID
+[assembly: Guid("0b4a498a-774e-4250-bf80-a05682b557fb")]
+
+// 绋嬪簭闆嗙殑鐗堟湰淇℃伅鐢变笅闈㈠洓涓肩粍鎴:
+//
+// 涓荤増鏈
+// 娆$増鏈
+// 鍐呴儴鐗堟湰鍙
+// 淇鍙
+//
+// 鍙互鎸囧畾鎵鏈夎繖浜涘硷紝涔熷彲浠ヤ娇鐢ㄢ滃唴閮ㄧ増鏈彿鈥濆拰鈥滀慨璁㈠彿鈥濈殑榛樿鍊硷紝
+// 鏂规硶鏄寜濡備笅鎵绀轰娇鐢ㄢ*鈥:
+
+[assembly: AssemblyVersion("3.5.2")]
+[assembly: AssemblyFileVersion("3.5.2")]
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackClient/Properties/Resources.Designer.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackClient/Properties/Resources.Designer.cs
new file mode 100644
index 000000000..d4a79ad64
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackClient/Properties/Resources.Designer.cs
@@ -0,0 +1,63 @@
+锘//------------------------------------------------------------------------------
+//
+// 姝や唬鐮佺敱宸ュ叿鐢熸垚銆
+// 杩愯鏃剁増鏈:4.0.30319.42000
+//
+// 瀵规鏂囦欢鐨勬洿鏀瑰彲鑳戒細瀵艰嚧涓嶆纭殑琛屼负锛屽苟涓斿鏋
+// 閲嶆柊鐢熸垚浠g爜锛岃繖浜涙洿鏀瑰皢浼氫涪澶便
+//
+//------------------------------------------------------------------------------
+
+namespace SSLPackClientNS.Properties {
+ using System;
+
+
+ ///
+ /// 涓涓己绫诲瀷鐨勮祫婧愮被锛岀敤浜庢煡鎵炬湰鍦板寲鐨勫瓧绗︿覆绛夈
+ ///
+ // 姝ょ被鏄敱 StronglyTypedResourceBuilder
+ // 绫婚氳繃绫讳技浜 ResGen 鎴 Visual Studio 鐨勫伐鍏疯嚜鍔ㄧ敓鎴愮殑銆
+ // 鑻ヨ娣诲姞鎴栫Щ闄ゆ垚鍛橈紝璇风紪杈 .ResX 鏂囦欢锛岀劧鍚庨噸鏂拌繍琛 ResGen
+ // (浠 /str 浣滀负鍛戒护閫夐」)锛屾垨閲嶆柊鐢熸垚 VS 椤圭洰銆
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ internal class Resources {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources() {
+ }
+
+ ///
+ /// 杩斿洖姝ょ被浣跨敤鐨勭紦瀛樼殑 ResourceManager 瀹炰緥銆
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager {
+ get {
+ if (object.ReferenceEquals(resourceMan, null)) {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("SSLPackClientNS.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// 浣跨敤姝ゅ己绫诲瀷璧勬簮绫伙紝涓烘墍鏈夎祫婧愭煡鎵
+ /// 閲嶅啓褰撳墠绾跨▼鐨 CurrentUICulture 灞炴с
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackClient/Properties/Resources.resx b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackClient/Properties/Resources.resx
new file mode 100644
index 000000000..af7dbebba
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackClient/Properties/Resources.resx
@@ -0,0 +1,117 @@
+锘
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackClient/Properties/Settings.Designer.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackClient/Properties/Settings.Designer.cs
new file mode 100644
index 000000000..e6b6edfce
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackClient/Properties/Settings.Designer.cs
@@ -0,0 +1,26 @@
+锘//------------------------------------------------------------------------------
+//
+// 姝や唬鐮佺敱宸ュ叿鐢熸垚銆
+// 杩愯鏃剁増鏈:4.0.30319.42000
+//
+// 瀵规鏂囦欢鐨勬洿鏀瑰彲鑳戒細瀵艰嚧涓嶆纭殑琛屼负锛屽苟涓斿鏋
+// 閲嶆柊鐢熸垚浠g爜锛岃繖浜涙洿鏀瑰皢浼氫涪澶便
+//
+//------------------------------------------------------------------------------
+
+namespace SSLPackClientNS.Properties {
+
+
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0")]
+ internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+
+ private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+ public static Settings Default {
+ get {
+ return defaultInstance;
+ }
+ }
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackClient/Properties/Settings.settings b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackClient/Properties/Settings.settings
new file mode 100644
index 000000000..39645652a
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackClient/Properties/Settings.settings
@@ -0,0 +1,7 @@
+锘
+
+
+
+
+
+
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackClient/SSLPackClient.csproj b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackClient/SSLPackClient.csproj
new file mode 100644
index 000000000..5c2aa5251
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackClient/SSLPackClient.csproj
@@ -0,0 +1,127 @@
+锘
+
+
+ Debug
+ x86
+ 8.0.30703
+ 2.0
+ {54B8F93E-C7A6-463E-8DCD-2BDD94EF9D90}
+ WinExe
+ Properties
+ SSLPackClientNS
+ SSLPackClient
+ v4.0
+ Client
+ 512
+
+
+ x86
+ true
+ full
+ false
+ ..\bin\x86\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ x86
+ pdbonly
+ true
+ ..\bin\x86\Release\
+ TRACE
+ prompt
+ 4
+ false
+
+
+ true
+ ..\bin\x64\Debug\
+ DEBUG;TRACE
+ full
+ x64
+ ..\bin\Debug\TcpClient.exe.CodeAnalysisLog.xml
+ true
+ GlobalSuppressions.cs
+ prompt
+ MinimumRecommendedRules.ruleset
+ ;D:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets
+ true
+ ;D:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules
+ true
+
+
+ ..\bin\x64\Release\
+ TRACE
+ true
+ pdbonly
+ x64
+ ..\bin\Release\TcpClient.exe.CodeAnalysisLog.xml
+ true
+ GlobalSuppressions.cs
+ prompt
+ MinimumRecommendedRules.ruleset
+ ;D:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets
+ true
+ ;D:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Form
+
+
+ frmClient.cs
+
+
+
+
+ frmClient.cs
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+ Designer
+
+
+ True
+ Resources.resx
+ True
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
+ True
+ Settings.settings
+ True
+
+
+
+
+ {DFA935E2-CF37-4E26-B697-D7F3DEE19DD8}
+ HPSocketCS
+
+
+
+
+
\ No newline at end of file
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackClient/frmClient.Designer.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackClient/frmClient.Designer.cs
new file mode 100644
index 000000000..b59ca4fb1
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackClient/frmClient.Designer.cs
@@ -0,0 +1,177 @@
+锘縩amespace SSLPackClientNS
+{
+ partial class frmClient
+ {
+ ///
+ /// 蹇呴渶鐨勮璁″櫒鍙橀噺銆
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// 娓呯悊鎵鏈夋鍦ㄤ娇鐢ㄧ殑璧勬簮銆
+ ///
+ /// 濡傛灉搴旈噴鏀炬墭绠¤祫婧愶紝涓 true锛涘惁鍒欎负 false銆
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows 绐椾綋璁捐鍣ㄧ敓鎴愮殑浠g爜
+
+ ///
+ /// 璁捐鍣ㄦ敮鎸佹墍闇鐨勬柟娉 - 涓嶈
+ /// 浣跨敤浠g爜缂栬緫鍣ㄤ慨鏀规鏂规硶鐨勫唴瀹广
+ ///
+ private void InitializeComponent()
+ {
+ this.groupBox1 = new System.Windows.Forms.GroupBox();
+ this.cbxAsyncConn = new System.Windows.Forms.CheckBox();
+ this.txtPort = new System.Windows.Forms.TextBox();
+ this.txtIpAddress = new System.Windows.Forms.TextBox();
+ this.btnStop = new System.Windows.Forms.Button();
+ this.btnStart = new System.Windows.Forms.Button();
+ this.lbxMsg = new System.Windows.Forms.ListBox();
+ this.txtSend = new System.Windows.Forms.TextBox();
+ this.btnSend = new System.Windows.Forms.Button();
+ this.groupBox1.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // groupBox1
+ //
+ this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.groupBox1.Controls.Add(this.cbxAsyncConn);
+ this.groupBox1.Controls.Add(this.txtPort);
+ this.groupBox1.Controls.Add(this.txtIpAddress);
+ this.groupBox1.Controls.Add(this.btnStop);
+ this.groupBox1.Controls.Add(this.btnStart);
+ this.groupBox1.Location = new System.Drawing.Point(12, 2);
+ this.groupBox1.Name = "groupBox1";
+ this.groupBox1.Size = new System.Drawing.Size(464, 47);
+ this.groupBox1.TabIndex = 11;
+ this.groupBox1.TabStop = false;
+ //
+ // cbxAsyncConn
+ //
+ this.cbxAsyncConn.AutoSize = true;
+ this.cbxAsyncConn.Checked = true;
+ this.cbxAsyncConn.CheckState = System.Windows.Forms.CheckState.Checked;
+ this.cbxAsyncConn.Location = new System.Drawing.Point(134, 20);
+ this.cbxAsyncConn.Name = "cbxAsyncConn";
+ this.cbxAsyncConn.Size = new System.Drawing.Size(84, 16);
+ this.cbxAsyncConn.TabIndex = 13;
+ this.cbxAsyncConn.Text = "Async Conn";
+ this.cbxAsyncConn.UseVisualStyleBackColor = true;
+ //
+ // txtPort
+ //
+ this.txtPort.Location = new System.Drawing.Point(88, 18);
+ this.txtPort.Name = "txtPort";
+ this.txtPort.Size = new System.Drawing.Size(40, 21);
+ this.txtPort.TabIndex = 12;
+ this.txtPort.Text = "5555";
+ //
+ // txtIpAddress
+ //
+ this.txtIpAddress.Location = new System.Drawing.Point(11, 18);
+ this.txtIpAddress.Name = "txtIpAddress";
+ this.txtIpAddress.Size = new System.Drawing.Size(71, 21);
+ this.txtIpAddress.TabIndex = 11;
+ this.txtIpAddress.Text = "127.0.0.1";
+ //
+ // btnStop
+ //
+ this.btnStop.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnStop.Location = new System.Drawing.Point(407, 15);
+ this.btnStop.Name = "btnStop";
+ this.btnStop.Size = new System.Drawing.Size(47, 26);
+ this.btnStop.TabIndex = 10;
+ this.btnStop.Text = "Stop";
+ this.btnStop.UseVisualStyleBackColor = true;
+ this.btnStop.Click += new System.EventHandler(this.btnStop_Click);
+ //
+ // btnStart
+ //
+ this.btnStart.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnStart.Location = new System.Drawing.Point(354, 15);
+ this.btnStart.Name = "btnStart";
+ this.btnStart.Size = new System.Drawing.Size(47, 26);
+ this.btnStart.TabIndex = 9;
+ this.btnStart.Text = "Start";
+ this.btnStart.UseVisualStyleBackColor = true;
+ this.btnStart.Click += new System.EventHandler(this.btnStart_Click);
+ //
+ // lbxMsg
+ //
+ this.lbxMsg.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.lbxMsg.FormattingEnabled = true;
+ this.lbxMsg.ItemHeight = 12;
+ this.lbxMsg.Location = new System.Drawing.Point(12, 59);
+ this.lbxMsg.Name = "lbxMsg";
+ this.lbxMsg.Size = new System.Drawing.Size(465, 256);
+ this.lbxMsg.TabIndex = 10;
+ this.lbxMsg.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.lbxMsg_KeyPress);
+ //
+ // txtSend
+ //
+ this.txtSend.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.txtSend.Location = new System.Drawing.Point(12, 327);
+ this.txtSend.Name = "txtSend";
+ this.txtSend.Size = new System.Drawing.Size(413, 21);
+ this.txtSend.TabIndex = 12;
+ this.txtSend.Text = "text to be sent";
+ //
+ // btnSend
+ //
+ this.btnSend.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnSend.Location = new System.Drawing.Point(431, 323);
+ this.btnSend.Name = "btnSend";
+ this.btnSend.Size = new System.Drawing.Size(47, 26);
+ this.btnSend.TabIndex = 13;
+ this.btnSend.Text = "Send";
+ this.btnSend.UseVisualStyleBackColor = true;
+ this.btnSend.Click += new System.EventHandler(this.btnSend_Click);
+ //
+ // frmClient
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(485, 355);
+ this.Controls.Add(this.btnSend);
+ this.Controls.Add(this.txtSend);
+ this.Controls.Add(this.groupBox1);
+ this.Controls.Add(this.lbxMsg);
+ this.Name = "frmClient";
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
+ this.Text = "Echo-SSLPackClient [ \'C\' - clear list box ]";
+ this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.frmClient_FormClosed);
+ this.Load += new System.EventHandler(this.frmClient_Load);
+ this.groupBox1.ResumeLayout(false);
+ this.groupBox1.PerformLayout();
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.GroupBox groupBox1;
+ private System.Windows.Forms.TextBox txtPort;
+ private System.Windows.Forms.TextBox txtIpAddress;
+ private System.Windows.Forms.Button btnStop;
+ private System.Windows.Forms.Button btnStart;
+ private System.Windows.Forms.ListBox lbxMsg;
+ private System.Windows.Forms.CheckBox cbxAsyncConn;
+ private System.Windows.Forms.TextBox txtSend;
+ private System.Windows.Forms.Button btnSend;
+
+ }
+}
+
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackClient/frmClient.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackClient/frmClient.cs
new file mode 100644
index 000000000..61f51b6ce
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackClient/frmClient.cs
@@ -0,0 +1,273 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using HPSocketCS;
+using System.Runtime.InteropServices;
+using System.IO;
+using System.Threading;
+
+namespace SSLPackClientNS
+{
+ public enum AppState
+ {
+ Starting, Started, Stoping, Stoped, Error
+ }
+
+ public enum StudentType
+ {
+ None, Array, List, Single,
+ }
+
+ public partial class frmClient : Form
+ {
+ private AppState appState = AppState.Stoped;
+
+ private delegate void ConnectUpdateUiDelegate();
+ private delegate void SetAppStateDelegate(AppState state);
+ private delegate void ShowMsg(string msg);
+ private ShowMsg AddMsgDelegate;
+
+ // 涓ょ鏋勯犳柟寮,绗竴绉
+ //HPSocketCS.SSLPackClient client = null;
+ // 涓ょ鏋勯犳柟寮,绗簩绉
+ HPSocketCS.SSLPackClient client = new HPSocketCS.SSLPackClient(SSLVerifyMode.Peer | SSLVerifyMode.FailIfNoPeerCert, "ssl-cert\\server.cer", "ssl-cert\\server.key", "123456", "ssl-cert\\ca.crt");
+
+ public frmClient()
+ {
+ InitializeComponent();
+ }
+
+ private void frmClient_Load(object sender, EventArgs e)
+ {
+ try
+ {
+ // 鍔犱釜濮旀墭鏄剧ずmsg,鍥犱负on绯诲垪閮芥槸鍦ㄥ伐浣滅嚎绋嬩腑璋冪敤鐨,ui涓嶅厑璁哥洿鎺ユ搷浣
+ AddMsgDelegate = new ShowMsg(AddMsg);
+
+ // 璁剧疆client浜嬩欢
+ client.OnPrepareConnect += new TcpClientEvent.OnPrepareConnectEventHandler(OnPrepareConnect);
+ client.OnConnect += new TcpClientEvent.OnConnectEventHandler(OnConnect);
+ client.OnSend += new TcpClientEvent.OnSendEventHandler(OnSend);
+ client.OnReceive += new TcpClientEvent.OnReceiveEventHandler(OnReceive);
+ client.OnClose += new TcpClientEvent.OnCloseEventHandler(OnClose);
+
+ client.OnHandShake += new SSLClientEvent.OnHandShakeEventHandler(OnHandShake);
+
+ // 璁剧疆鍖呭ご鏍囪瘑,涓庡绔缃繚璇佷竴鑷存
+ client.PackHeaderFlag = 0xff;
+ // 璁剧疆鏈澶у皝鍖呭ぇ灏
+ client.MaxPackSize = 0x1000;
+
+ SetAppState(AppState.Stoped);
+ }
+ catch (Exception ex)
+ {
+ SetAppState(AppState.Error);
+ AddMsg(ex.Message);
+ }
+ }
+
+ private void btnStart_Click(object sender, EventArgs e)
+ {
+ try
+ {
+ String ip = this.txtIpAddress.Text.Trim();
+ ushort port = ushort.Parse(this.txtPort.Text.Trim());
+
+ // 鍐欏湪杩欎釜浣嶇疆鏄笂闈㈠彲鑳戒細寮傚父
+ SetAppState(AppState.Starting);
+
+ AddMsg(string.Format("$Client Starting ... -> ({0}:{1})", ip, port));
+
+ if (client.Connetion(ip, port, this.cbxAsyncConn.Checked))
+ {
+ if (cbxAsyncConn.Checked == false)
+ {
+ SetAppState(AppState.Started);
+ }
+
+ AddMsg(string.Format("$Client Start OK -> ({0}:{1})", ip, port));
+ }
+ else
+ {
+ SetAppState(AppState.Stoped);
+ throw new Exception(string.Format("$Client Start Error -> {0}({1})", client.ErrorMessage, client.ErrorCode));
+ }
+ }
+ catch (Exception ex)
+ {
+ AddMsg(ex.Message);
+ }
+ }
+
+ private void btnStop_Click(object sender, EventArgs e)
+ {
+
+ // 鍋滄鏈嶅姟
+ AddMsg("$Server Stop");
+ if (client.Stop())
+ {
+ SetAppState(AppState.Stoped);
+ }
+ else
+ {
+ AddMsg(string.Format("$Stop Error -> {0}({1})", client.ErrorMessage, client.ErrorCode));
+ }
+ }
+
+ private void btnSend_Click(object sender, EventArgs e)
+ {
+ try
+ {
+ string send = this.txtSend.Text;
+ if (send.Length == 0)
+ {
+ return;
+ }
+
+ byte[] bytes = Encoding.Default.GetBytes(send);
+ IntPtr connId = client.ConnectionId;
+
+ // 鍙戦
+ if (client.Send(bytes, bytes.Length))
+ {
+ AddMsg(string.Format("$ ({0}) Send OK --> {1}", connId, send));
+ }
+ else
+ {
+ AddMsg(string.Format("$ ({0}) Send Fail --> {1} ({2})", connId, send, bytes.Length));
+ }
+
+ }
+ catch (Exception ex)
+ {
+ AddMsg(string.Format("$ Send Fail --> msg ({0})", ex.Message));
+ }
+
+ }
+
+ private void lbxMsg_KeyPress(object sender, KeyPressEventArgs e)
+ {
+
+ // 娓呯悊listbox
+ if (e.KeyChar == 'c' || e.KeyChar == 'C')
+ {
+ this.lbxMsg.Items.Clear();
+ }
+ }
+
+ void ConnectUpdateUi()
+ {
+ if (this.cbxAsyncConn.Checked == true)
+ {
+ SetAppState(AppState.Started);
+ }
+ }
+
+ HandleResult OnPrepareConnect(TcpClient sender, uint socket)
+ {
+ return HandleResult.Ok;
+ }
+
+ HandleResult OnConnect(TcpClient sender)
+ {
+ // 宸茶繛鎺 鍒拌揪涓娆
+
+ // 濡傛灉鏄紓姝ヨ仈鎺,鏇存柊鐣岄潰鐘舵
+ this.Invoke(new ConnectUpdateUiDelegate(ConnectUpdateUi));
+
+ AddMsg(string.Format(" > [{0},OnConnect]", sender.ConnectionId));
+
+ return HandleResult.Ok;
+ }
+
+ HandleResult OnSend(TcpClient sender, byte[] bytes)
+ {
+ // 瀹㈡埛绔彂鏁版嵁浜
+ AddMsg(string.Format(" > [{0},OnSend] -> ({1} bytes)", sender.ConnectionId, bytes.Length));
+
+ return HandleResult.Ok;
+ }
+
+ HandleResult OnReceive(TcpClient sender, byte[] bytes)
+ {
+ // 鏁版嵁鍒拌揪浜
+
+ AddMsg(string.Format(" > [{0},OnReceive] -> ({1} bytes)", sender.ConnectionId, bytes.Length));
+
+ return HandleResult.Ok;
+ }
+
+ HandleResult OnClose(TcpClient sender, SocketOperation enOperation, int errorCode)
+ {
+ if (errorCode == 0)
+ // 杩炴帴鍏抽棴浜
+ AddMsg(string.Format(" > [{0},OnClose]", sender.ConnectionId));
+ else
+ // 鍑洪敊浜
+ AddMsg(string.Format(" > [{0},OnError] -> OP:{1},CODE:{2}", sender.ConnectionId, enOperation, errorCode));
+
+ // 閫氱煡鐣岄潰,鍙鐞嗕簡杩炴帴閿欒,涔熸病杩涜鏄笉鏄繛鎺ラ敊璇殑鍒ゆ柇,鎵浠ユ湁閿欒灏变細璁剧疆鐣岄潰
+ // 鐢熶骇鐜璇疯嚜宸辨帶鍒
+ this.Invoke(new SetAppStateDelegate(SetAppState), AppState.Stoped);
+
+ return HandleResult.Ok;
+ }
+
+
+ HandleResult OnHandShake(TcpClient client)
+ {
+ // ssl鎻℃墜浜
+ AddMsg(string.Format(" > [{0},OnHandShake])", client.ConnectionId));
+
+ return HandleResult.Ok;
+ }
+ ///
+ /// 璁剧疆绋嬪簭鐘舵
+ ///
+ ///
+ void SetAppState(AppState state)
+ {
+ appState = state;
+ this.btnStart.Enabled = (appState == AppState.Stoped);
+ this.btnStop.Enabled = (appState == AppState.Started);
+ this.txtIpAddress.Enabled = (appState == AppState.Stoped);
+ this.txtPort.Enabled = (appState == AppState.Stoped);
+ this.cbxAsyncConn.Enabled = (appState == AppState.Stoped);
+ this.btnSend.Enabled = (appState == AppState.Started);
+ }
+
+ ///
+ /// 寰listbox鍔犱竴鏉¢」鐩
+ ///
+ ///
+ void AddMsg(string msg)
+ {
+ if (this.lbxMsg.InvokeRequired)
+ {
+ // 寰堝竻鐨勮皟鑷繁
+ this.lbxMsg.Invoke(AddMsgDelegate, msg);
+ }
+ else
+ {
+ if (this.lbxMsg.Items.Count > 100)
+ {
+ this.lbxMsg.Items.RemoveAt(0);
+ }
+ this.lbxMsg.Items.Add(msg);
+ this.lbxMsg.TopIndex = this.lbxMsg.Items.Count - (int)(this.lbxMsg.Height / this.lbxMsg.ItemHeight);
+ }
+ }
+
+ private void frmClient_FormClosed(object sender, FormClosedEventArgs e)
+ {
+ client.Destroy();
+ }
+
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackClient/frmClient.resx b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackClient/frmClient.resx
new file mode 100644
index 000000000..1af7de150
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackClient/frmClient.resx
@@ -0,0 +1,120 @@
+锘
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackClient/obj/x64/Release/DesignTimeResolveAssemblyReferencesInput.cache b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackClient/obj/x64/Release/DesignTimeResolveAssemblyReferencesInput.cache
new file mode 100644
index 000000000..f935e7e30
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackClient/obj/x64/Release/DesignTimeResolveAssemblyReferencesInput.cache differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackClient/obj/x64/Release/SSLPackClient.csproj.FileListAbsolute.txt b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackClient/obj/x64/Release/SSLPackClient.csproj.FileListAbsolute.txt
new file mode 100644
index 000000000..c86bd8069
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackClient/obj/x64/Release/SSLPackClient.csproj.FileListAbsolute.txt
@@ -0,0 +1,7 @@
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\bin\x64\Release\SSLPackClient.exe
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\bin\x64\Release\SSLPackClient.pdb
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\SSLPackClient\obj\x64\Release\SSLPackClientNS.frmClient.resources
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\SSLPackClient\obj\x64\Release\SSLPackClientNS.Properties.Resources.resources
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\SSLPackClient\obj\x64\Release\SSLPackClient.csproj.GenerateResource.Cache
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\SSLPackClient\obj\x64\Release\SSLPackClient.exe
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\SSLPackClient\obj\x64\Release\SSLPackClient.pdb
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackClient/obj/x64/Release/SSLPackClient.csproj.GenerateResource.Cache b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackClient/obj/x64/Release/SSLPackClient.csproj.GenerateResource.Cache
new file mode 100644
index 000000000..193f72af1
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackClient/obj/x64/Release/SSLPackClient.csproj.GenerateResource.Cache differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackClient/obj/x64/Release/SSLPackClient.exe b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackClient/obj/x64/Release/SSLPackClient.exe
new file mode 100644
index 000000000..fb176ac98
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackClient/obj/x64/Release/SSLPackClient.exe differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackClient/obj/x64/Release/SSLPackClientNS.Properties.Resources.resources b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackClient/obj/x64/Release/SSLPackClientNS.Properties.Resources.resources
new file mode 100644
index 000000000..6c05a9776
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackClient/obj/x64/Release/SSLPackClientNS.Properties.Resources.resources differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackClient/obj/x64/Release/SSLPackClientNS.frmClient.resources b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackClient/obj/x64/Release/SSLPackClientNS.frmClient.resources
new file mode 100644
index 000000000..6c05a9776
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackClient/obj/x64/Release/SSLPackClientNS.frmClient.resources differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackClient/obj/x64/Release/TempPE/Properties.Resources.Designer.cs.dll b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackClient/obj/x64/Release/TempPE/Properties.Resources.Designer.cs.dll
new file mode 100644
index 000000000..12eb153e8
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackClient/obj/x64/Release/TempPE/Properties.Resources.Designer.cs.dll differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackClient/obj/x86/Release/DesignTimeResolveAssemblyReferencesInput.cache b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackClient/obj/x86/Release/DesignTimeResolveAssemblyReferencesInput.cache
new file mode 100644
index 000000000..1da60aa0c
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackClient/obj/x86/Release/DesignTimeResolveAssemblyReferencesInput.cache differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackClient/obj/x86/Release/SSLPackClient.csproj.FileListAbsolute.txt b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackClient/obj/x86/Release/SSLPackClient.csproj.FileListAbsolute.txt
new file mode 100644
index 000000000..4d5def211
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackClient/obj/x86/Release/SSLPackClient.csproj.FileListAbsolute.txt
@@ -0,0 +1,7 @@
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\bin\x86\Release\SSLPackClient.exe
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\bin\x86\Release\SSLPackClient.pdb
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\SSLPackClient\obj\x86\Release\SSLPackClientNS.frmClient.resources
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\SSLPackClient\obj\x86\Release\SSLPackClientNS.Properties.Resources.resources
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\SSLPackClient\obj\x86\Release\SSLPackClient.csproj.GenerateResource.Cache
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\SSLPackClient\obj\x86\Release\SSLPackClient.exe
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\SSLPackClient\obj\x86\Release\SSLPackClient.pdb
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackClient/obj/x86/Release/SSLPackClient.csproj.GenerateResource.Cache b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackClient/obj/x86/Release/SSLPackClient.csproj.GenerateResource.Cache
new file mode 100644
index 000000000..193f72af1
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackClient/obj/x86/Release/SSLPackClient.csproj.GenerateResource.Cache differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackClient/obj/x86/Release/SSLPackClient.exe b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackClient/obj/x86/Release/SSLPackClient.exe
new file mode 100644
index 000000000..e214e2486
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackClient/obj/x86/Release/SSLPackClient.exe differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackClient/obj/x86/Release/SSLPackClientNS.Properties.Resources.resources b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackClient/obj/x86/Release/SSLPackClientNS.Properties.Resources.resources
new file mode 100644
index 000000000..6c05a9776
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackClient/obj/x86/Release/SSLPackClientNS.Properties.Resources.resources differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackClient/obj/x86/Release/SSLPackClientNS.frmClient.resources b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackClient/obj/x86/Release/SSLPackClientNS.frmClient.resources
new file mode 100644
index 000000000..6c05a9776
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackClient/obj/x86/Release/SSLPackClientNS.frmClient.resources differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackServer/Program.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackServer/Program.cs
new file mode 100644
index 000000000..b5c85b07b
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackServer/Program.cs
@@ -0,0 +1,21 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Windows.Forms;
+
+namespace SSLPackServerNS
+{
+ static class Program
+ {
+ ///
+ /// 搴旂敤绋嬪簭鐨勪富鍏ュ彛鐐广
+ ///
+ [STAThread]
+ static void Main()
+ {
+ Application.EnableVisualStyles();
+ Application.SetCompatibleTextRenderingDefault(false);
+ Application.Run(new frmServer());
+ }
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackServer/Properties/AssemblyInfo.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackServer/Properties/AssemblyInfo.cs
new file mode 100644
index 000000000..4b7bccb2d
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackServer/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+锘縰sing System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 鏈夊叧绋嬪簭闆嗙殑甯歌淇℃伅閫氳繃浠ヤ笅
+// 鐗规ч泦鎺у埗銆傛洿鏀硅繖浜涚壒鎬у煎彲淇敼
+// 涓庣▼搴忛泦鍏宠仈鐨勪俊鎭
+[assembly: AssemblyTitle("Server")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Server")]
+[assembly: AssemblyCopyright("Copyright 漏 2014")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 灏 ComVisible 璁剧疆涓 false 浣挎绋嬪簭闆嗕腑鐨勭被鍨
+// 瀵 COM 缁勪欢涓嶅彲瑙併傚鏋滈渶瑕佷粠 COM 璁块棶姝ょ▼搴忛泦涓殑绫诲瀷锛
+// 鍒欏皢璇ョ被鍨嬩笂鐨 ComVisible 鐗规ц缃负 true銆
+[assembly: ComVisible(false)]
+
+// 濡傛灉姝ら」鐩悜 COM 鍏紑锛屽垯涓嬪垪 GUID 鐢ㄤ簬绫诲瀷搴撶殑 ID
+[assembly: Guid("a8f79261-fd62-4f4b-aed5-01bf44660ad1")]
+
+// 绋嬪簭闆嗙殑鐗堟湰淇℃伅鐢变笅闈㈠洓涓肩粍鎴:
+//
+// 涓荤増鏈
+// 娆$増鏈
+// 鍐呴儴鐗堟湰鍙
+// 淇鍙
+//
+// 鍙互鎸囧畾鎵鏈夎繖浜涘硷紝涔熷彲浠ヤ娇鐢ㄢ滃唴閮ㄧ増鏈彿鈥濆拰鈥滀慨璁㈠彿鈥濈殑榛樿鍊硷紝
+// 鏂规硶鏄寜濡備笅鎵绀轰娇鐢ㄢ*鈥:
+
+[assembly: AssemblyVersion("3.5.2")]
+[assembly: AssemblyFileVersion("3.5.2")]
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackServer/Properties/Resources.Designer.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackServer/Properties/Resources.Designer.cs
new file mode 100644
index 000000000..026676730
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackServer/Properties/Resources.Designer.cs
@@ -0,0 +1,63 @@
+锘//------------------------------------------------------------------------------
+//
+// 姝や唬鐮佺敱宸ュ叿鐢熸垚銆
+// 杩愯鏃剁増鏈:4.0.30319.42000
+//
+// 瀵规鏂囦欢鐨勬洿鏀瑰彲鑳戒細瀵艰嚧涓嶆纭殑琛屼负锛屽苟涓斿鏋
+// 閲嶆柊鐢熸垚浠g爜锛岃繖浜涙洿鏀瑰皢浼氫涪澶便
+//
+//------------------------------------------------------------------------------
+
+namespace SSLPackServerNS.Properties {
+ using System;
+
+
+ ///
+ /// 涓涓己绫诲瀷鐨勮祫婧愮被锛岀敤浜庢煡鎵炬湰鍦板寲鐨勫瓧绗︿覆绛夈
+ ///
+ // 姝ょ被鏄敱 StronglyTypedResourceBuilder
+ // 绫婚氳繃绫讳技浜 ResGen 鎴 Visual Studio 鐨勫伐鍏疯嚜鍔ㄧ敓鎴愮殑銆
+ // 鑻ヨ娣诲姞鎴栫Щ闄ゆ垚鍛橈紝璇风紪杈 .ResX 鏂囦欢锛岀劧鍚庨噸鏂拌繍琛 ResGen
+ // (浠 /str 浣滀负鍛戒护閫夐」)锛屾垨閲嶆柊鐢熸垚 VS 椤圭洰銆
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ internal class Resources {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources() {
+ }
+
+ ///
+ /// 杩斿洖姝ょ被浣跨敤鐨勭紦瀛樼殑 ResourceManager 瀹炰緥銆
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager {
+ get {
+ if (object.ReferenceEquals(resourceMan, null)) {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("SSLPackServerNS.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// 浣跨敤姝ゅ己绫诲瀷璧勬簮绫伙紝涓烘墍鏈夎祫婧愭煡鎵
+ /// 閲嶅啓褰撳墠绾跨▼鐨 CurrentUICulture 灞炴с
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackServer/Properties/Resources.resx b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackServer/Properties/Resources.resx
new file mode 100644
index 000000000..af7dbebba
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackServer/Properties/Resources.resx
@@ -0,0 +1,117 @@
+锘
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackServer/Properties/Settings.Designer.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackServer/Properties/Settings.Designer.cs
new file mode 100644
index 000000000..7865ccd31
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackServer/Properties/Settings.Designer.cs
@@ -0,0 +1,26 @@
+锘//------------------------------------------------------------------------------
+//
+// 姝や唬鐮佺敱宸ュ叿鐢熸垚銆
+// 杩愯鏃剁増鏈:4.0.30319.42000
+//
+// 瀵规鏂囦欢鐨勬洿鏀瑰彲鑳戒細瀵艰嚧涓嶆纭殑琛屼负锛屽苟涓斿鏋
+// 閲嶆柊鐢熸垚浠g爜锛岃繖浜涙洿鏀瑰皢浼氫涪澶便
+//
+//------------------------------------------------------------------------------
+
+namespace SSLPackServerNS.Properties {
+
+
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0")]
+ internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+
+ private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+ public static Settings Default {
+ get {
+ return defaultInstance;
+ }
+ }
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackServer/Properties/Settings.settings b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackServer/Properties/Settings.settings
new file mode 100644
index 000000000..39645652a
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackServer/Properties/Settings.settings
@@ -0,0 +1,7 @@
+锘
+
+
+
+
+
+
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackServer/SSLPackServer.csproj b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackServer/SSLPackServer.csproj
new file mode 100644
index 000000000..7d545853c
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackServer/SSLPackServer.csproj
@@ -0,0 +1,122 @@
+锘
+
+
+ Debug
+ x86
+ 8.0.30703
+ 2.0
+ {D99C1889-D52B-4640-B3F5-594F5A728A56}
+ WinExe
+ Properties
+ SSLPackServerNS
+ SSLPackServer
+ v4.0
+ Client
+ 512
+
+
+ x86
+ true
+ full
+ false
+ ..\bin\x86\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ x86
+ pdbonly
+ true
+ ..\bin\x86\Release\
+ TRACE
+ prompt
+ 4
+
+
+ true
+ ..\bin\x64\Debug\
+ DEBUG;TRACE
+ full
+ x64
+ ..\bin\Debug\TcpServer.exe.CodeAnalysisLog.xml
+ true
+ GlobalSuppressions.cs
+ prompt
+ MinimumRecommendedRules.ruleset
+ ;D:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets
+ ;D:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules
+
+
+ ..\bin\x64\Release\
+ TRACE
+ true
+ pdbonly
+ x64
+ ..\bin\Release\TcpServer.exe.CodeAnalysisLog.xml
+ true
+ GlobalSuppressions.cs
+ prompt
+ MinimumRecommendedRules.ruleset
+ ;D:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets
+ ;D:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Form
+
+
+ frmServer.cs
+
+
+
+
+ frmServer.cs
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+ Designer
+
+
+ True
+ Resources.resx
+ True
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
+ True
+ Settings.settings
+ True
+
+
+
+
+ {DFA935E2-CF37-4E26-B697-D7F3DEE19DD8}
+ HPSocketCS
+
+
+
+
+
\ No newline at end of file
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackServer/frmServer.Designer.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackServer/frmServer.Designer.cs
new file mode 100644
index 000000000..733e5180b
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackServer/frmServer.Designer.cs
@@ -0,0 +1,169 @@
+锘縩amespace SSLPackServerNS
+{
+ partial class frmServer
+ {
+ ///
+ /// 蹇呴渶鐨勮璁″櫒鍙橀噺銆
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// 娓呯悊鎵鏈夋鍦ㄤ娇鐢ㄧ殑璧勬簮銆
+ ///
+ /// 濡傛灉搴旈噴鏀炬墭绠¤祫婧愶紝涓 true锛涘惁鍒欎负 false銆
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows 绐椾綋璁捐鍣ㄧ敓鎴愮殑浠g爜
+
+ ///
+ /// 璁捐鍣ㄦ敮鎸佹墍闇鐨勬柟娉 - 涓嶈
+ /// 浣跨敤浠g爜缂栬緫鍣ㄤ慨鏀规鏂规硶鐨勫唴瀹广
+ ///
+ private void InitializeComponent()
+ {
+ this.lbxMsg = new System.Windows.Forms.ListBox();
+ this.groupBox1 = new System.Windows.Forms.GroupBox();
+ this.label1 = new System.Windows.Forms.Label();
+ this.btnDisconn = new System.Windows.Forms.Button();
+ this.txtDisConn = new System.Windows.Forms.TextBox();
+ this.txtPort = new System.Windows.Forms.TextBox();
+ this.txtIpAddress = new System.Windows.Forms.TextBox();
+ this.btnStop = new System.Windows.Forms.Button();
+ this.btnStart = new System.Windows.Forms.Button();
+ this.groupBox1.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // lbxMsg
+ //
+ this.lbxMsg.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.lbxMsg.FormattingEnabled = true;
+ this.lbxMsg.ItemHeight = 12;
+ this.lbxMsg.Location = new System.Drawing.Point(11, 62);
+ this.lbxMsg.Name = "lbxMsg";
+ this.lbxMsg.Size = new System.Drawing.Size(465, 304);
+ this.lbxMsg.TabIndex = 4;
+ this.lbxMsg.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.lbxMsg_KeyPress);
+ //
+ // groupBox1
+ //
+ this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.groupBox1.Controls.Add(this.label1);
+ this.groupBox1.Controls.Add(this.btnDisconn);
+ this.groupBox1.Controls.Add(this.txtDisConn);
+ this.groupBox1.Controls.Add(this.txtPort);
+ this.groupBox1.Controls.Add(this.txtIpAddress);
+ this.groupBox1.Controls.Add(this.btnStop);
+ this.groupBox1.Controls.Add(this.btnStart);
+ this.groupBox1.Location = new System.Drawing.Point(12, 2);
+ this.groupBox1.Name = "groupBox1";
+ this.groupBox1.Size = new System.Drawing.Size(462, 47);
+ this.groupBox1.TabIndex = 9;
+ this.groupBox1.TabStop = false;
+ //
+ // label1
+ //
+ this.label1.AutoSize = true;
+ this.label1.Location = new System.Drawing.Point(132, 22);
+ this.label1.Name = "label1";
+ this.label1.Size = new System.Drawing.Size(41, 12);
+ this.label1.TabIndex = 15;
+ this.label1.Text = "CONNID";
+ //
+ // btnDisconn
+ //
+ this.btnDisconn.Location = new System.Drawing.Point(223, 15);
+ this.btnDisconn.Name = "btnDisconn";
+ this.btnDisconn.Size = new System.Drawing.Size(33, 26);
+ this.btnDisconn.TabIndex = 14;
+ this.btnDisconn.Text = "Dis";
+ this.btnDisconn.UseVisualStyleBackColor = true;
+ this.btnDisconn.Click += new System.EventHandler(this.btnDisconn_Click);
+ //
+ // txtDisConn
+ //
+ this.txtDisConn.Location = new System.Drawing.Point(178, 18);
+ this.txtDisConn.Name = "txtDisConn";
+ this.txtDisConn.Size = new System.Drawing.Size(40, 21);
+ this.txtDisConn.TabIndex = 13;
+ this.txtDisConn.TextChanged += new System.EventHandler(this.txtDisConn_TextChanged);
+ //
+ // txtPort
+ //
+ this.txtPort.Location = new System.Drawing.Point(88, 18);
+ this.txtPort.Name = "txtPort";
+ this.txtPort.Size = new System.Drawing.Size(40, 21);
+ this.txtPort.TabIndex = 12;
+ this.txtPort.Text = "5555";
+ //
+ // txtIpAddress
+ //
+ this.txtIpAddress.Location = new System.Drawing.Point(11, 18);
+ this.txtIpAddress.Name = "txtIpAddress";
+ this.txtIpAddress.Size = new System.Drawing.Size(71, 21);
+ this.txtIpAddress.TabIndex = 11;
+ this.txtIpAddress.Text = "0.0.0.0";
+ //
+ // btnStop
+ //
+ this.btnStop.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnStop.Location = new System.Drawing.Point(403, 15);
+ this.btnStop.Name = "btnStop";
+ this.btnStop.Size = new System.Drawing.Size(47, 26);
+ this.btnStop.TabIndex = 10;
+ this.btnStop.Text = "Stop";
+ this.btnStop.UseVisualStyleBackColor = true;
+ this.btnStop.Click += new System.EventHandler(this.btnStop_Click);
+ //
+ // btnStart
+ //
+ this.btnStart.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnStart.Location = new System.Drawing.Point(350, 15);
+ this.btnStart.Name = "btnStart";
+ this.btnStart.Size = new System.Drawing.Size(47, 26);
+ this.btnStart.TabIndex = 9;
+ this.btnStart.Text = "Start";
+ this.btnStart.UseVisualStyleBackColor = true;
+ this.btnStart.Click += new System.EventHandler(this.btnStart_Click);
+ //
+ // frmServer
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(486, 377);
+ this.Controls.Add(this.groupBox1);
+ this.Controls.Add(this.lbxMsg);
+ this.Name = "frmServer";
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
+ this.Text = "Form1";
+ this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.frmServer_FormClosed);
+ this.Load += new System.EventHandler(this.Form1_Load);
+ this.groupBox1.ResumeLayout(false);
+ this.groupBox1.PerformLayout();
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.ListBox lbxMsg;
+ private System.Windows.Forms.GroupBox groupBox1;
+ private System.Windows.Forms.Label label1;
+ private System.Windows.Forms.Button btnDisconn;
+ private System.Windows.Forms.TextBox txtDisConn;
+ private System.Windows.Forms.TextBox txtPort;
+ private System.Windows.Forms.Button btnStop;
+ private System.Windows.Forms.Button btnStart;
+ private System.Windows.Forms.TextBox txtIpAddress;
+ }
+}
+
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackServer/frmServer.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackServer/frmServer.cs
new file mode 100644
index 000000000..227ab74b8
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackServer/frmServer.cs
@@ -0,0 +1,320 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using System.Runtime.InteropServices;
+using HPSocketCS;
+
+namespace SSLPackServerNS
+{
+ public enum AppState
+ {
+ Starting, Started, Stoping, Stoped, Error
+ }
+
+ public partial class frmServer : Form
+ {
+ private AppState appState = AppState.Stoped;
+
+ private delegate void ShowMsg(string msg);
+ private ShowMsg AddMsgDelegate;
+
+ // 涓ょ鏋勯犳柟寮,绗竴绉
+ //HPSocketCS.SSLPackServer server = null;
+ // 涓ょ鏋勯犳柟寮,绗簩绉
+ HPSocketCS.SSLPackServer server = new HPSocketCS.SSLPackServer(SSLVerifyMode.Peer | SSLVerifyMode.FailIfNoPeerCert, "ssl-cert\\server.cer", "ssl-cert\\server.key", "123456", "ssl-cert\\ca.crt");
+ private string title = "Echo-SSLPackServer [ 'C' - clear list box ]";
+ public frmServer()
+ {
+ InitializeComponent();
+ }
+
+ private void Form1_Load(object sender, EventArgs e)
+ {
+ try
+ {
+
+ this.Text = title;
+ // 鏈満娴嬭瘯娌″繀瑕佹敼鍦板潃,鏈夐渶姹傝娉ㄩ噴鎴栧垹闄
+ this.txtIpAddress.ReadOnly = true;
+
+ // 鍔犱釜濮旀墭鏄剧ずmsg,鍥犱负on绯诲垪閮芥槸鍦ㄥ伐浣滅嚎绋嬩腑璋冪敤鐨,ui涓嶅厑璁哥洿鎺ユ搷浣
+ AddMsgDelegate = new ShowMsg(AddMsg);
+
+ // 璁剧疆鏈嶅姟鍣ㄤ簨浠
+ server.OnPrepareListen += new TcpServerEvent.OnPrepareListenEventHandler(OnPrepareListen);
+ server.OnAccept += new TcpServerEvent.OnAcceptEventHandler(OnAccept);
+ server.OnSend += new TcpServerEvent.OnSendEventHandler(OnSend);
+ server.OnReceive += new TcpServerEvent.OnReceiveEventHandler(OnReceive);
+ server.OnClose += new TcpServerEvent.OnCloseEventHandler(OnClose);
+ server.OnShutdown += new TcpServerEvent.OnShutdownEventHandler(OnShutdown);
+
+ server.OnHandShake += new SSLEvent.OnHandShakeEventHandler(OnHandShake);
+
+ // 璁剧疆鍖呭ご鏍囪瘑,涓庡绔缃繚璇佷竴鑷存
+ server.PackHeaderFlag = 0xff;
+ // 璁剧疆鏈澶у皝鍖呭ぇ灏
+ server.MaxPackSize = 0x1000;
+
+ SetAppState(AppState.Stoped);
+ }
+ catch (Exception ex)
+ {
+ SetAppState(AppState.Error);
+ AddMsg(ex.Message);
+ }
+ }
+
+ private void btnStart_Click(object sender, EventArgs e)
+ {
+ try
+ {
+ String ip = this.txtIpAddress.Text.Trim();
+ ushort port = ushort.Parse(this.txtPort.Text.Trim());
+
+ // 鍐欏湪杩欎釜浣嶇疆鏄笂闈㈠彲鑳戒細寮傚父
+ SetAppState(AppState.Starting);
+ server.IpAddress = ip;
+ server.Port = port;
+ // 鍚姩鏈嶅姟
+ if (server.Start())
+ {
+ this.Text = string.Format("{2} - ({0}:{1})", ip, port, title);
+ SetAppState(AppState.Started);
+ AddMsg(string.Format("$Server Start OK -> ({0}:{1})", ip, port));
+ }
+ else
+ {
+ SetAppState(AppState.Stoped);
+ throw new Exception(string.Format("$Server Start Error -> {0}({1})", server.ErrorMessage, server.ErrorCode));
+ }
+ }
+ catch (Exception ex)
+ {
+ AddMsg(ex.Message);
+ }
+ }
+
+ private void btnStop_Click(object sender, EventArgs e)
+ {
+ SetAppState(AppState.Stoping);
+
+ // 鍋滄鏈嶅姟
+ AddMsg("$Server Stop");
+ if (server.Stop())
+ {
+ this.Text = title;
+ SetAppState(AppState.Stoped);
+ }
+ else
+ {
+ AddMsg(string.Format("$Stop Error -> {0}({1})", server.ErrorMessage, server.ErrorCode));
+ }
+ }
+
+ private void btnDisconn_Click(object sender, EventArgs e)
+ {
+ try
+ {
+ IntPtr connId = (IntPtr)Convert.ToInt32(this.txtDisConn.Text.Trim());
+ // 鏂紑鎸囧畾瀹㈡埛
+ if (server.Disconnect(connId, true))
+ {
+ AddMsg(string.Format("$({0}) Disconnect OK", connId));
+ }
+ else
+ {
+ throw new Exception(string.Format("Disconnect({0}) Error", connId));
+ }
+ }
+ catch (Exception ex)
+ {
+ AddMsg(ex.Message);
+ }
+ }
+
+
+ HandleResult OnPrepareListen(IntPtr soListen)
+ {
+ // 鐩戝惉浜嬩欢鍒拌揪浜,涓鑸病浠涔堢敤鍚?
+
+ return HandleResult.Ok;
+ }
+
+ HandleResult OnAccept(IntPtr connId, IntPtr pClient)
+ {
+ // 瀹㈡埛杩涘叆浜
+
+
+ // 鑾峰彇瀹㈡埛绔痠p鍜岀鍙
+ string ip = string.Empty;
+ ushort port = 0;
+ if (server.GetRemoteAddress(connId, ref ip, ref port))
+ {
+ AddMsg(string.Format(" > [{0},OnAccept] -> PASS({1}:{2})", connId, ip.ToString(), port));
+ }
+ else
+ {
+ AddMsg(string.Format(" > [{0},OnAccept] -> Server_GetClientAddress() Error", connId));
+ }
+
+
+ // 璁剧疆闄勫姞鏁版嵁
+ ClientInfo ci = new ClientInfo();
+ ci.ConnId = connId;
+ ci.IpAddress = ip;
+ ci.Port = port;
+ if (server.SetConnectionExtra(connId, ci) == false)
+ {
+ AddMsg(string.Format(" > [{0},OnAccept] -> SetConnectionExtra fail", connId));
+ }
+
+ return HandleResult.Ok;
+ }
+
+ HandleResult OnSend(IntPtr connId, byte[] bytes)
+ {
+ // 鏈嶅姟鍣ㄥ彂鏁版嵁浜
+
+
+ AddMsg(string.Format(" > [{0},OnSend] -> ({1} bytes)", connId, bytes.Length));
+
+ return HandleResult.Ok;
+ }
+
+ HandleResult OnReceive(IntPtr connId, byte[] bytes)
+ {
+ // 鏁版嵁鍒拌揪浜
+ try
+ {
+ // 鑾峰彇闄勫姞鏁版嵁
+ IntPtr clientPtr = IntPtr.Zero;
+ if (server.GetConnectionExtra(connId, ref clientPtr))
+ {
+ // ci 灏辨槸accept閲屼紶鍏ョ殑闄勫姞鏁版嵁浜
+ ClientInfo ci = (ClientInfo)Marshal.PtrToStructure(clientPtr, typeof(ClientInfo));
+ AddMsg(string.Format(" > [{0},OnReceive] -> {1}:{2} ({3} bytes)", ci.ConnId, ci.IpAddress, ci.Port, bytes.Length));
+ }
+ else
+ {
+ AddMsg(string.Format(" > [{0},OnReceive] -> ({1} bytes)", connId, bytes.Length));
+ }
+
+ if (server.Send(connId, bytes, bytes.Length))
+ {
+ return HandleResult.Ok;
+ }
+
+ return HandleResult.Error;
+ }
+ catch (Exception)
+ {
+
+ return HandleResult.Ignore;
+ }
+ }
+
+ HandleResult OnClose(IntPtr connId, SocketOperation enOperation, int errorCode)
+ {
+ if(errorCode == 0)
+ AddMsg(string.Format(" > [{0},OnClose]", connId));
+ else
+ AddMsg(string.Format(" > [{0},OnError] -> OP:{1},CODE:{2}", connId, enOperation, errorCode));
+ // return HPSocketSdk.HandleResult.Ok;
+
+ if (server.SetConnectionExtra(connId, null) == false)
+ {
+ AddMsg(string.Format(" > [{0},OnClose] -> SetConnectionExtra({0}, null) fail", connId));
+ }
+
+ return HandleResult.Ok;
+ }
+
+ HandleResult OnShutdown()
+ {
+ // 鏈嶅姟鍏抽棴浜
+
+
+ AddMsg(" > [OnShutdown]");
+ return HandleResult.Ok;
+ }
+
+
+ HandleResult OnHandShake(IntPtr connId)
+ {
+ // ssl鎻℃墜浜
+ AddMsg(string.Format(" > [{0},OnHandShake])", connId));
+
+ return HandleResult.Ok;
+ }
+
+ ///
+ /// 璁剧疆绋嬪簭鐘舵
+ ///
+ ///
+ void SetAppState(AppState state)
+ {
+ appState = state;
+ this.btnStart.Enabled = (appState == AppState.Stoped);
+ this.btnStop.Enabled = (appState == AppState.Started);
+ this.txtIpAddress.Enabled = (appState == AppState.Stoped);
+ this.txtPort.Enabled = (appState == AppState.Stoped);
+ this.txtDisConn.Enabled = (appState == AppState.Started);
+ this.btnDisconn.Enabled = (appState == AppState.Started && this.txtDisConn.Text.Length > 0);
+ }
+
+ ///
+ /// 寰listbox鍔犱竴鏉¢」鐩
+ ///
+ ///
+ void AddMsg(string msg)
+ {
+ if (this.lbxMsg.InvokeRequired)
+ {
+ // 寰堝竻鐨勮皟鑷繁
+ this.lbxMsg.Invoke(AddMsgDelegate, msg);
+ }
+ else
+ {
+ if (this.lbxMsg.Items.Count > 100)
+ {
+ this.lbxMsg.Items.RemoveAt(0);
+ }
+ this.lbxMsg.Items.Add(msg);
+ this.lbxMsg.TopIndex = this.lbxMsg.Items.Count - (int)(this.lbxMsg.Height / this.lbxMsg.ItemHeight);
+ }
+ }
+
+ private void txtDisConn_TextChanged(object sender, EventArgs e)
+ {
+ // CONNID妗嗚鏀瑰彉浜嬩欢
+ this.btnDisconn.Enabled = (appState == AppState.Started && this.txtDisConn.Text.Length > 0);
+ }
+
+ private void lbxMsg_KeyPress(object sender, KeyPressEventArgs e)
+ {
+ // 娓呯悊listbox
+ if (e.KeyChar == 'c' || e.KeyChar == 'C')
+ {
+ this.lbxMsg.Items.Clear();
+ }
+ }
+
+ private void frmServer_FormClosed(object sender, FormClosedEventArgs e)
+ {
+ server.Destroy();
+ }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ public class ClientInfo
+ {
+ public IntPtr ConnId { get; set; }
+ public string IpAddress { get; set; }
+ public ushort Port { get; set; }
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackServer/frmServer.resx b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackServer/frmServer.resx
new file mode 100644
index 000000000..1af7de150
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackServer/frmServer.resx
@@ -0,0 +1,120 @@
+锘
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackServer/obj/x64/Release/DesignTimeResolveAssemblyReferencesInput.cache b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackServer/obj/x64/Release/DesignTimeResolveAssemblyReferencesInput.cache
new file mode 100644
index 000000000..195edf445
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackServer/obj/x64/Release/DesignTimeResolveAssemblyReferencesInput.cache differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackServer/obj/x64/Release/SSLPackServer.csproj.FileListAbsolute.txt b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackServer/obj/x64/Release/SSLPackServer.csproj.FileListAbsolute.txt
new file mode 100644
index 000000000..290584131
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackServer/obj/x64/Release/SSLPackServer.csproj.FileListAbsolute.txt
@@ -0,0 +1,7 @@
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\bin\x64\Release\SSLPackServer.exe
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\bin\x64\Release\SSLPackServer.pdb
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\SSLPackServer\obj\x64\Release\SSLPackServerNS.frmServer.resources
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\SSLPackServer\obj\x64\Release\SSLPackServerNS.Properties.Resources.resources
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\SSLPackServer\obj\x64\Release\SSLPackServer.csproj.GenerateResource.Cache
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\SSLPackServer\obj\x64\Release\SSLPackServer.exe
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\SSLPackServer\obj\x64\Release\SSLPackServer.pdb
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackServer/obj/x64/Release/SSLPackServer.csproj.GenerateResource.Cache b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackServer/obj/x64/Release/SSLPackServer.csproj.GenerateResource.Cache
new file mode 100644
index 000000000..e793f6a97
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackServer/obj/x64/Release/SSLPackServer.csproj.GenerateResource.Cache differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackServer/obj/x64/Release/SSLPackServer.exe b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackServer/obj/x64/Release/SSLPackServer.exe
new file mode 100644
index 000000000..52b34adbd
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackServer/obj/x64/Release/SSLPackServer.exe differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackServer/obj/x64/Release/SSLPackServerNS.Properties.Resources.resources b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackServer/obj/x64/Release/SSLPackServerNS.Properties.Resources.resources
new file mode 100644
index 000000000..6c05a9776
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackServer/obj/x64/Release/SSLPackServerNS.Properties.Resources.resources differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackServer/obj/x64/Release/SSLPackServerNS.frmServer.resources b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackServer/obj/x64/Release/SSLPackServerNS.frmServer.resources
new file mode 100644
index 000000000..6c05a9776
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackServer/obj/x64/Release/SSLPackServerNS.frmServer.resources differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackServer/obj/x64/Release/TempPE/Properties.Resources.Designer.cs.dll b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackServer/obj/x64/Release/TempPE/Properties.Resources.Designer.cs.dll
new file mode 100644
index 000000000..d205e2c46
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackServer/obj/x64/Release/TempPE/Properties.Resources.Designer.cs.dll differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackServer/obj/x86/Release/DesignTimeResolveAssemblyReferencesInput.cache b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackServer/obj/x86/Release/DesignTimeResolveAssemblyReferencesInput.cache
new file mode 100644
index 000000000..32755b3d4
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackServer/obj/x86/Release/DesignTimeResolveAssemblyReferencesInput.cache differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackServer/obj/x86/Release/SSLPackServer.csproj.FileListAbsolute.txt b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackServer/obj/x86/Release/SSLPackServer.csproj.FileListAbsolute.txt
new file mode 100644
index 000000000..b9f0ccb6b
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackServer/obj/x86/Release/SSLPackServer.csproj.FileListAbsolute.txt
@@ -0,0 +1,7 @@
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\bin\x86\Release\SSLPackServer.exe
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\bin\x86\Release\SSLPackServer.pdb
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\SSLPackServer\obj\x86\Release\SSLPackServerNS.frmServer.resources
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\SSLPackServer\obj\x86\Release\SSLPackServerNS.Properties.Resources.resources
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\SSLPackServer\obj\x86\Release\SSLPackServer.csproj.GenerateResource.Cache
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\SSLPackServer\obj\x86\Release\SSLPackServer.exe
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\SSLPackServer\obj\x86\Release\SSLPackServer.pdb
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackServer/obj/x86/Release/SSLPackServer.csproj.GenerateResource.Cache b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackServer/obj/x86/Release/SSLPackServer.csproj.GenerateResource.Cache
new file mode 100644
index 000000000..e793f6a97
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackServer/obj/x86/Release/SSLPackServer.csproj.GenerateResource.Cache differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackServer/obj/x86/Release/SSLPackServer.exe b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackServer/obj/x86/Release/SSLPackServer.exe
new file mode 100644
index 000000000..c6cb7989e
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackServer/obj/x86/Release/SSLPackServer.exe differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackServer/obj/x86/Release/SSLPackServerNS.Properties.Resources.resources b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackServer/obj/x86/Release/SSLPackServerNS.Properties.Resources.resources
new file mode 100644
index 000000000..6c05a9776
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackServer/obj/x86/Release/SSLPackServerNS.Properties.Resources.resources differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackServer/obj/x86/Release/SSLPackServerNS.frmServer.resources b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackServer/obj/x86/Release/SSLPackServerNS.frmServer.resources
new file mode 100644
index 000000000..6c05a9776
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLPackServer/obj/x86/Release/SSLPackServerNS.frmServer.resources differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/Program.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/Program.cs
new file mode 100644
index 000000000..4709309e1
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/Program.cs
@@ -0,0 +1,21 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Windows.Forms;
+
+namespace SSLServerNS
+{
+ static class Program
+ {
+ ///
+ /// 搴旂敤绋嬪簭鐨勪富鍏ュ彛鐐广
+ ///
+ [STAThread]
+ static void Main()
+ {
+ Application.EnableVisualStyles();
+ Application.SetCompatibleTextRenderingDefault(false);
+ Application.Run(new frmServer());
+ }
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/Properties/AssemblyInfo.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/Properties/AssemblyInfo.cs
new file mode 100644
index 000000000..4b7bccb2d
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+锘縰sing System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 鏈夊叧绋嬪簭闆嗙殑甯歌淇℃伅閫氳繃浠ヤ笅
+// 鐗规ч泦鎺у埗銆傛洿鏀硅繖浜涚壒鎬у煎彲淇敼
+// 涓庣▼搴忛泦鍏宠仈鐨勪俊鎭
+[assembly: AssemblyTitle("Server")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Server")]
+[assembly: AssemblyCopyright("Copyright 漏 2014")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 灏 ComVisible 璁剧疆涓 false 浣挎绋嬪簭闆嗕腑鐨勭被鍨
+// 瀵 COM 缁勪欢涓嶅彲瑙併傚鏋滈渶瑕佷粠 COM 璁块棶姝ょ▼搴忛泦涓殑绫诲瀷锛
+// 鍒欏皢璇ョ被鍨嬩笂鐨 ComVisible 鐗规ц缃负 true銆
+[assembly: ComVisible(false)]
+
+// 濡傛灉姝ら」鐩悜 COM 鍏紑锛屽垯涓嬪垪 GUID 鐢ㄤ簬绫诲瀷搴撶殑 ID
+[assembly: Guid("a8f79261-fd62-4f4b-aed5-01bf44660ad1")]
+
+// 绋嬪簭闆嗙殑鐗堟湰淇℃伅鐢变笅闈㈠洓涓肩粍鎴:
+//
+// 涓荤増鏈
+// 娆$増鏈
+// 鍐呴儴鐗堟湰鍙
+// 淇鍙
+//
+// 鍙互鎸囧畾鎵鏈夎繖浜涘硷紝涔熷彲浠ヤ娇鐢ㄢ滃唴閮ㄧ増鏈彿鈥濆拰鈥滀慨璁㈠彿鈥濈殑榛樿鍊硷紝
+// 鏂规硶鏄寜濡備笅鎵绀轰娇鐢ㄢ*鈥:
+
+[assembly: AssemblyVersion("3.5.2")]
+[assembly: AssemblyFileVersion("3.5.2")]
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/Properties/Resources.Designer.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/Properties/Resources.Designer.cs
new file mode 100644
index 000000000..e91a11a1e
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/Properties/Resources.Designer.cs
@@ -0,0 +1,63 @@
+锘//------------------------------------------------------------------------------
+//
+// 姝や唬鐮佺敱宸ュ叿鐢熸垚銆
+// 杩愯鏃剁増鏈:4.0.30319.42000
+//
+// 瀵规鏂囦欢鐨勬洿鏀瑰彲鑳戒細瀵艰嚧涓嶆纭殑琛屼负锛屽苟涓斿鏋
+// 閲嶆柊鐢熸垚浠g爜锛岃繖浜涙洿鏀瑰皢浼氫涪澶便
+//
+//------------------------------------------------------------------------------
+
+namespace SSLServerNS.Properties {
+ using System;
+
+
+ ///
+ /// 涓涓己绫诲瀷鐨勮祫婧愮被锛岀敤浜庢煡鎵炬湰鍦板寲鐨勫瓧绗︿覆绛夈
+ ///
+ // 姝ょ被鏄敱 StronglyTypedResourceBuilder
+ // 绫婚氳繃绫讳技浜 ResGen 鎴 Visual Studio 鐨勫伐鍏疯嚜鍔ㄧ敓鎴愮殑銆
+ // 鑻ヨ娣诲姞鎴栫Щ闄ゆ垚鍛橈紝璇风紪杈 .ResX 鏂囦欢锛岀劧鍚庨噸鏂拌繍琛 ResGen
+ // (浠 /str 浣滀负鍛戒护閫夐」)锛屾垨閲嶆柊鐢熸垚 VS 椤圭洰銆
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ internal class Resources {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources() {
+ }
+
+ ///
+ /// 杩斿洖姝ょ被浣跨敤鐨勭紦瀛樼殑 ResourceManager 瀹炰緥銆
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager {
+ get {
+ if (object.ReferenceEquals(resourceMan, null)) {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("SSLServerNS.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// 浣跨敤姝ゅ己绫诲瀷璧勬簮绫伙紝涓烘墍鏈夎祫婧愭煡鎵
+ /// 閲嶅啓褰撳墠绾跨▼鐨 CurrentUICulture 灞炴с
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/Properties/Resources.resx b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/Properties/Resources.resx
new file mode 100644
index 000000000..af7dbebba
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/Properties/Resources.resx
@@ -0,0 +1,117 @@
+锘
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/Properties/Settings.Designer.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/Properties/Settings.Designer.cs
new file mode 100644
index 000000000..54d4d886b
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/Properties/Settings.Designer.cs
@@ -0,0 +1,26 @@
+锘//------------------------------------------------------------------------------
+//
+// 姝や唬鐮佺敱宸ュ叿鐢熸垚銆
+// 杩愯鏃剁増鏈:4.0.30319.42000
+//
+// 瀵规鏂囦欢鐨勬洿鏀瑰彲鑳戒細瀵艰嚧涓嶆纭殑琛屼负锛屽苟涓斿鏋
+// 閲嶆柊鐢熸垚浠g爜锛岃繖浜涙洿鏀瑰皢浼氫涪澶便
+//
+//------------------------------------------------------------------------------
+
+namespace SSLServerNS.Properties {
+
+
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0")]
+ internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+
+ private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+ public static Settings Default {
+ get {
+ return defaultInstance;
+ }
+ }
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/Properties/Settings.settings b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/Properties/Settings.settings
new file mode 100644
index 000000000..39645652a
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/Properties/Settings.settings
@@ -0,0 +1,7 @@
+锘
+
+
+
+
+
+
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/SSLServer.csproj b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/SSLServer.csproj
new file mode 100644
index 000000000..b197c6a9b
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/SSLServer.csproj
@@ -0,0 +1,122 @@
+锘
+
+
+ Debug
+ x86
+ 8.0.30703
+ 2.0
+ {2125B641-AB4D-4C29-A2A7-DD37839CCACB}
+ WinExe
+ Properties
+ SSLServerNS
+ SSLServer
+ v4.0
+ Client
+ 512
+
+
+ x86
+ true
+ full
+ false
+ ..\bin\x86\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ x86
+ pdbonly
+ true
+ ..\bin\x86\Release\
+ TRACE
+ prompt
+ 4
+
+
+ true
+ ..\bin\x64\Debug\
+ DEBUG;TRACE
+ full
+ x64
+ ..\bin\Debug\TcpServer.exe.CodeAnalysisLog.xml
+ true
+ GlobalSuppressions.cs
+ prompt
+ MinimumRecommendedRules.ruleset
+ ;D:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets
+ ;D:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules
+
+
+ ..\bin\x64\Release\
+ TRACE
+ true
+ pdbonly
+ x64
+ ..\bin\Release\TcpServer.exe.CodeAnalysisLog.xml
+ true
+ GlobalSuppressions.cs
+ prompt
+ MinimumRecommendedRules.ruleset
+ ;D:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets
+ ;D:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Form
+
+
+ frmServer.cs
+
+
+
+
+ frmServer.cs
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+ Designer
+
+
+ True
+ Resources.resx
+ True
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
+ True
+ Settings.settings
+ True
+
+
+
+
+ {DFA935E2-CF37-4E26-B697-D7F3DEE19DD8}
+ HPSocketCS
+
+
+
+
+
\ No newline at end of file
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/frmServer.Designer.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/frmServer.Designer.cs
new file mode 100644
index 000000000..28f76f2a9
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/frmServer.Designer.cs
@@ -0,0 +1,169 @@
+锘縩amespace SSLServerNS
+{
+ partial class frmServer
+ {
+ ///
+ /// 蹇呴渶鐨勮璁″櫒鍙橀噺銆
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// 娓呯悊鎵鏈夋鍦ㄤ娇鐢ㄧ殑璧勬簮銆
+ ///
+ /// 濡傛灉搴旈噴鏀炬墭绠¤祫婧愶紝涓 true锛涘惁鍒欎负 false銆
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows 绐椾綋璁捐鍣ㄧ敓鎴愮殑浠g爜
+
+ ///
+ /// 璁捐鍣ㄦ敮鎸佹墍闇鐨勬柟娉 - 涓嶈
+ /// 浣跨敤浠g爜缂栬緫鍣ㄤ慨鏀规鏂规硶鐨勫唴瀹广
+ ///
+ private void InitializeComponent()
+ {
+ this.lbxMsg = new System.Windows.Forms.ListBox();
+ this.groupBox1 = new System.Windows.Forms.GroupBox();
+ this.label1 = new System.Windows.Forms.Label();
+ this.btnDisconn = new System.Windows.Forms.Button();
+ this.txtDisConn = new System.Windows.Forms.TextBox();
+ this.txtPort = new System.Windows.Forms.TextBox();
+ this.txtIpAddress = new System.Windows.Forms.TextBox();
+ this.btnStop = new System.Windows.Forms.Button();
+ this.btnStart = new System.Windows.Forms.Button();
+ this.groupBox1.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // lbxMsg
+ //
+ this.lbxMsg.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.lbxMsg.FormattingEnabled = true;
+ this.lbxMsg.ItemHeight = 12;
+ this.lbxMsg.Location = new System.Drawing.Point(11, 62);
+ this.lbxMsg.Name = "lbxMsg";
+ this.lbxMsg.Size = new System.Drawing.Size(465, 304);
+ this.lbxMsg.TabIndex = 4;
+ this.lbxMsg.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.lbxMsg_KeyPress);
+ //
+ // groupBox1
+ //
+ this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.groupBox1.Controls.Add(this.label1);
+ this.groupBox1.Controls.Add(this.btnDisconn);
+ this.groupBox1.Controls.Add(this.txtDisConn);
+ this.groupBox1.Controls.Add(this.txtPort);
+ this.groupBox1.Controls.Add(this.txtIpAddress);
+ this.groupBox1.Controls.Add(this.btnStop);
+ this.groupBox1.Controls.Add(this.btnStart);
+ this.groupBox1.Location = new System.Drawing.Point(12, 2);
+ this.groupBox1.Name = "groupBox1";
+ this.groupBox1.Size = new System.Drawing.Size(462, 47);
+ this.groupBox1.TabIndex = 9;
+ this.groupBox1.TabStop = false;
+ //
+ // label1
+ //
+ this.label1.AutoSize = true;
+ this.label1.Location = new System.Drawing.Point(132, 22);
+ this.label1.Name = "label1";
+ this.label1.Size = new System.Drawing.Size(41, 12);
+ this.label1.TabIndex = 15;
+ this.label1.Text = "CONNID";
+ //
+ // btnDisconn
+ //
+ this.btnDisconn.Location = new System.Drawing.Point(223, 15);
+ this.btnDisconn.Name = "btnDisconn";
+ this.btnDisconn.Size = new System.Drawing.Size(33, 26);
+ this.btnDisconn.TabIndex = 14;
+ this.btnDisconn.Text = "Dis";
+ this.btnDisconn.UseVisualStyleBackColor = true;
+ this.btnDisconn.Click += new System.EventHandler(this.btnDisconn_Click);
+ //
+ // txtDisConn
+ //
+ this.txtDisConn.Location = new System.Drawing.Point(178, 18);
+ this.txtDisConn.Name = "txtDisConn";
+ this.txtDisConn.Size = new System.Drawing.Size(40, 21);
+ this.txtDisConn.TabIndex = 13;
+ this.txtDisConn.TextChanged += new System.EventHandler(this.txtDisConn_TextChanged);
+ //
+ // txtPort
+ //
+ this.txtPort.Location = new System.Drawing.Point(88, 18);
+ this.txtPort.Name = "txtPort";
+ this.txtPort.Size = new System.Drawing.Size(40, 21);
+ this.txtPort.TabIndex = 12;
+ this.txtPort.Text = "5555";
+ //
+ // txtIpAddress
+ //
+ this.txtIpAddress.Location = new System.Drawing.Point(11, 18);
+ this.txtIpAddress.Name = "txtIpAddress";
+ this.txtIpAddress.Size = new System.Drawing.Size(71, 21);
+ this.txtIpAddress.TabIndex = 11;
+ this.txtIpAddress.Text = "0.0.0.0";
+ //
+ // btnStop
+ //
+ this.btnStop.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnStop.Location = new System.Drawing.Point(403, 15);
+ this.btnStop.Name = "btnStop";
+ this.btnStop.Size = new System.Drawing.Size(47, 26);
+ this.btnStop.TabIndex = 10;
+ this.btnStop.Text = "Stop";
+ this.btnStop.UseVisualStyleBackColor = true;
+ this.btnStop.Click += new System.EventHandler(this.btnStop_Click);
+ //
+ // btnStart
+ //
+ this.btnStart.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnStart.Location = new System.Drawing.Point(350, 15);
+ this.btnStart.Name = "btnStart";
+ this.btnStart.Size = new System.Drawing.Size(47, 26);
+ this.btnStart.TabIndex = 9;
+ this.btnStart.Text = "Start";
+ this.btnStart.UseVisualStyleBackColor = true;
+ this.btnStart.Click += new System.EventHandler(this.btnStart_Click);
+ //
+ // frmServer
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(486, 377);
+ this.Controls.Add(this.groupBox1);
+ this.Controls.Add(this.lbxMsg);
+ this.Name = "frmServer";
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
+ this.Text = "Form1";
+ this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.frmServer_FormClosed);
+ this.Load += new System.EventHandler(this.Form1_Load);
+ this.groupBox1.ResumeLayout(false);
+ this.groupBox1.PerformLayout();
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.ListBox lbxMsg;
+ private System.Windows.Forms.GroupBox groupBox1;
+ private System.Windows.Forms.Label label1;
+ private System.Windows.Forms.Button btnDisconn;
+ private System.Windows.Forms.TextBox txtDisConn;
+ private System.Windows.Forms.TextBox txtPort;
+ private System.Windows.Forms.Button btnStop;
+ private System.Windows.Forms.Button btnStart;
+ private System.Windows.Forms.TextBox txtIpAddress;
+ }
+}
+
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/frmServer.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/frmServer.cs
new file mode 100644
index 000000000..e221afb96
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/frmServer.cs
@@ -0,0 +1,320 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using System.Runtime.InteropServices;
+using HPSocketCS;
+
+namespace SSLServerNS
+{
+ public enum AppState
+ {
+ Starting, Started, Stoping, Stoped, Error
+ }
+
+ public partial class frmServer : Form
+ {
+ private AppState appState = AppState.Stoped;
+
+ private delegate void ShowMsg(string msg);
+ private ShowMsg AddMsgDelegate;
+
+ // 涓ょ鏋勯犳柟寮,绗竴绉
+ HPSocketCS.SSLServer server = null;
+ // 涓ょ鏋勯犳柟寮,绗簩绉
+ //HPSocketCS.SSLServer server = new HPSocketCS.SSLServer(SSLVerifyMode.Peer | SSLVerifyMode.FailIfNoPeerCert, "ssl-cert\\server.cer", "ssl-cert\\server.key", "123456", "ssl-cert\\ca.crt");
+ private string title = "Echo-SSLServer [ 'C' - clear list box ]";
+ public frmServer()
+ {
+ InitializeComponent();
+ }
+
+ private void Form1_Load(object sender, EventArgs e)
+ {
+ try
+ {
+ server = new HPSocketCS.SSLServer();
+ server.VerifyMode = SSLVerifyMode.Peer | SSLVerifyMode.FailIfNoPeerCert;
+ server.CAPemCertFileOrPath = "ssl-cert\\ca.crt";
+ server.PemCertFile = "ssl-cert\\server.cer";
+ server.PemKeyFile = "ssl-cert\\server.key";
+ server.KeyPasswod = "123456";
+
+ this.Text = title;
+ // 鏈満娴嬭瘯娌″繀瑕佹敼鍦板潃,鏈夐渶姹傝娉ㄩ噴鎴栧垹闄
+ this.txtIpAddress.ReadOnly = true;
+
+ // 鍔犱釜濮旀墭鏄剧ずmsg,鍥犱负on绯诲垪閮芥槸鍦ㄥ伐浣滅嚎绋嬩腑璋冪敤鐨,ui涓嶅厑璁哥洿鎺ユ搷浣
+ AddMsgDelegate = new ShowMsg(AddMsg);
+
+
+ // 璁剧疆鏈嶅姟鍣ㄤ簨浠
+ server.OnPrepareListen += new TcpServerEvent.OnPrepareListenEventHandler(OnPrepareListen);
+ server.OnAccept += new TcpServerEvent.OnAcceptEventHandler(OnAccept);
+ server.OnSend += new TcpServerEvent.OnSendEventHandler(OnSend);
+ server.OnReceive += new TcpServerEvent.OnReceiveEventHandler(OnReceive);
+ server.OnClose += new TcpServerEvent.OnCloseEventHandler(OnClose);
+ server.OnShutdown += new TcpServerEvent.OnShutdownEventHandler(OnShutdown);
+
+ server.OnHandShake += new SSLEvent.OnHandShakeEventHandler(OnHandShake);
+
+ SetAppState(AppState.Stoped);
+ }
+ catch (Exception ex)
+ {
+ SetAppState(AppState.Error);
+ AddMsg(ex.Message);
+ }
+ }
+
+ private void btnStart_Click(object sender, EventArgs e)
+ {
+ try
+ {
+ String ip = this.txtIpAddress.Text.Trim();
+ ushort port = ushort.Parse(this.txtPort.Text.Trim());
+
+ // 鍐欏湪杩欎釜浣嶇疆鏄笂闈㈠彲鑳戒細寮傚父
+ SetAppState(AppState.Starting);
+ server.IpAddress = ip;
+ server.Port = port;
+ // 鍚姩鏈嶅姟
+ if (server.Start())
+ {
+ this.Text = string.Format("{2} - ({0}:{1})", ip, port, title);
+ SetAppState(AppState.Started);
+ AddMsg(string.Format("$Server Start OK -> ({0}:{1})", ip, port));
+ }
+ else
+ {
+ SetAppState(AppState.Stoped);
+ throw new Exception(string.Format("$Server Start Error -> {0}({1})", server.ErrorMessage, server.ErrorCode));
+ }
+ }
+ catch (Exception ex)
+ {
+ AddMsg(ex.Message);
+ }
+ }
+
+ private void btnStop_Click(object sender, EventArgs e)
+ {
+ SetAppState(AppState.Stoping);
+
+ // 鍋滄鏈嶅姟
+ AddMsg("$Server Stop");
+ if (server.Stop())
+ {
+ this.Text = title;
+ SetAppState(AppState.Stoped);
+ }
+ else
+ {
+ AddMsg(string.Format("$Stop Error -> {0}({1})", server.ErrorMessage, server.ErrorCode));
+ }
+ }
+
+ private void btnDisconn_Click(object sender, EventArgs e)
+ {
+ try
+ {
+ IntPtr connId = (IntPtr)Convert.ToInt32(this.txtDisConn.Text.Trim());
+ // 鏂紑鎸囧畾瀹㈡埛
+ if (server.Disconnect(connId, true))
+ {
+ AddMsg(string.Format("$({0}) Disconnect OK", connId));
+ }
+ else
+ {
+ throw new Exception(string.Format("Disconnect({0}) Error", connId));
+ }
+ }
+ catch (Exception ex)
+ {
+ AddMsg(ex.Message);
+ }
+ }
+
+
+ HandleResult OnPrepareListen(IntPtr soListen)
+ {
+ // 鐩戝惉浜嬩欢鍒拌揪浜,涓鑸病浠涔堢敤鍚?
+
+ return HandleResult.Ok;
+ }
+
+ HandleResult OnAccept(IntPtr connId, IntPtr pClient)
+ {
+ // 瀹㈡埛杩涘叆浜
+
+
+ // 鑾峰彇瀹㈡埛绔痠p鍜岀鍙
+ string ip = string.Empty;
+ ushort port = 0;
+ if (server.GetRemoteAddress(connId, ref ip, ref port))
+ {
+ AddMsg(string.Format(" > [{0},OnAccept] -> PASS({1}:{2})", connId, ip.ToString(), port));
+ }
+ else
+ {
+ AddMsg(string.Format(" > [{0},OnAccept] -> Server_GetClientAddress() Error", connId));
+ }
+
+
+ // 璁剧疆闄勫姞鏁版嵁
+ ClientInfo ci = new ClientInfo();
+ ci.ConnId = connId;
+ ci.IpAddress = ip;
+ ci.Port = port;
+ if (server.SetConnectionExtra(connId, ci) == false)
+ {
+ AddMsg(string.Format(" > [{0},OnAccept] -> SetConnectionExtra fail", connId));
+ }
+
+ return HandleResult.Ok;
+ }
+
+ HandleResult OnSend(IntPtr connId, byte[] bytes)
+ {
+ // 鏈嶅姟鍣ㄥ彂鏁版嵁浜
+
+
+ AddMsg(string.Format(" > [{0},OnSend] -> ({1} bytes)", connId, bytes.Length));
+
+ return HandleResult.Ok;
+ }
+
+ HandleResult OnReceive(IntPtr connId, byte[] bytes)
+ {
+ // 鏁版嵁鍒拌揪浜
+ try
+ {
+ // 鑾峰彇闄勫姞鏁版嵁
+ IntPtr clientPtr = IntPtr.Zero;
+ if (server.GetConnectionExtra(connId, ref clientPtr))
+ {
+ // ci 灏辨槸accept閲屼紶鍏ョ殑闄勫姞鏁版嵁浜
+ ClientInfo ci = (ClientInfo)Marshal.PtrToStructure(clientPtr, typeof(ClientInfo));
+ AddMsg(string.Format(" > [{0},OnReceive] -> {1}:{2} ({3} bytes)", ci.ConnId, ci.IpAddress, ci.Port, bytes.Length));
+ }
+ else
+ {
+ AddMsg(string.Format(" > [{0},OnReceive] -> ({1} bytes)", connId, bytes.Length));
+ }
+
+ if (server.Send(connId, bytes, bytes.Length))
+ {
+ return HandleResult.Ok;
+ }
+
+ return HandleResult.Error;
+ }
+ catch (Exception)
+ {
+
+ return HandleResult.Ignore;
+ }
+ }
+
+ HandleResult OnClose(IntPtr connId, SocketOperation enOperation, int errorCode)
+ {
+ if(errorCode == 0)
+ AddMsg(string.Format(" > [{0},OnClose]", connId));
+ else
+ AddMsg(string.Format(" > [{0},OnError] -> OP:{1},CODE:{2}", connId, enOperation, errorCode));
+
+ if (server.SetConnectionExtra(connId, null) == false)
+ {
+ AddMsg(string.Format(" > [{0},OnClose] -> SetConnectionExtra({0}, null) fail", connId));
+ }
+
+ return HandleResult.Ok;
+ }
+
+ HandleResult OnShutdown()
+ {
+ // 鏈嶅姟鍏抽棴浜
+
+ AddMsg(" > [OnShutdown]");
+ return HandleResult.Ok;
+ }
+
+ HandleResult OnHandShake(IntPtr connId)
+ {
+ // ssl鎻℃墜浜
+ AddMsg(string.Format(" > [{0},OnHandShake])", connId));
+
+ return HandleResult.Ok;
+ }
+
+
+ ///
+ /// 璁剧疆绋嬪簭鐘舵
+ ///
+ ///
+ void SetAppState(AppState state)
+ {
+ appState = state;
+ this.btnStart.Enabled = (appState == AppState.Stoped);
+ this.btnStop.Enabled = (appState == AppState.Started);
+ this.txtIpAddress.Enabled = (appState == AppState.Stoped);
+ this.txtPort.Enabled = (appState == AppState.Stoped);
+ this.txtDisConn.Enabled = (appState == AppState.Started);
+ this.btnDisconn.Enabled = (appState == AppState.Started && this.txtDisConn.Text.Length > 0);
+ }
+
+ ///
+ /// 寰listbox鍔犱竴鏉¢」鐩
+ ///
+ ///
+ void AddMsg(string msg)
+ {
+ if (this.lbxMsg.InvokeRequired)
+ {
+ // 寰堝竻鐨勮皟鑷繁
+ this.lbxMsg.Invoke(AddMsgDelegate, msg);
+ }
+ else
+ {
+ if (this.lbxMsg.Items.Count > 100)
+ {
+ this.lbxMsg.Items.RemoveAt(0);
+ }
+ this.lbxMsg.Items.Add(msg);
+ this.lbxMsg.TopIndex = this.lbxMsg.Items.Count - (int)(this.lbxMsg.Height / this.lbxMsg.ItemHeight);
+ }
+ }
+
+ private void txtDisConn_TextChanged(object sender, EventArgs e)
+ {
+ // CONNID妗嗚鏀瑰彉浜嬩欢
+ this.btnDisconn.Enabled = (appState == AppState.Started && this.txtDisConn.Text.Length > 0);
+ }
+
+ private void lbxMsg_KeyPress(object sender, KeyPressEventArgs e)
+ {
+ // 娓呯悊listbox
+ if (e.KeyChar == 'c' || e.KeyChar == 'C')
+ {
+ this.lbxMsg.Items.Clear();
+ }
+ }
+
+ private void frmServer_FormClosed(object sender, FormClosedEventArgs e)
+ {
+ server.Destroy();
+ }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ public class ClientInfo
+ {
+ public IntPtr ConnId { get; set; }
+ public string IpAddress { get; set; }
+ public ushort Port { get; set; }
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/frmServer.resx b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/frmServer.resx
new file mode 100644
index 000000000..1af7de150
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/frmServer.resx
@@ -0,0 +1,120 @@
+锘
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/obj/x64/Release/DesignTimeResolveAssemblyReferencesInput.cache b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/obj/x64/Release/DesignTimeResolveAssemblyReferencesInput.cache
new file mode 100644
index 000000000..e41f1b5ed
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/obj/x64/Release/DesignTimeResolveAssemblyReferencesInput.cache differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/obj/x64/Release/SSLServer.csproj.FileListAbsolute.txt b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/obj/x64/Release/SSLServer.csproj.FileListAbsolute.txt
new file mode 100644
index 000000000..fbc574854
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/obj/x64/Release/SSLServer.csproj.FileListAbsolute.txt
@@ -0,0 +1,8 @@
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\bin\x64\Release\SSLServer.exe
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\bin\x64\Release\SSLServer.pdb
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\SSLServer\obj\x64\Release\SSLServer.csprojResolveAssemblyReference.cache
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\SSLServer\obj\x64\Release\SSLServerNS.frmServer.resources
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\SSLServer\obj\x64\Release\SSLServerNS.Properties.Resources.resources
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\SSLServer\obj\x64\Release\SSLServer.csproj.GenerateResource.Cache
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\SSLServer\obj\x64\Release\SSLServer.exe
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\SSLServer\obj\x64\Release\SSLServer.pdb
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/obj/x64/Release/SSLServer.csproj.GenerateResource.Cache b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/obj/x64/Release/SSLServer.csproj.GenerateResource.Cache
new file mode 100644
index 000000000..e793f6a97
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/obj/x64/Release/SSLServer.csproj.GenerateResource.Cache differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/obj/x64/Release/SSLServer.csprojResolveAssemblyReference.cache b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/obj/x64/Release/SSLServer.csprojResolveAssemblyReference.cache
new file mode 100644
index 000000000..3a36f4be7
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/obj/x64/Release/SSLServer.csprojResolveAssemblyReference.cache differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/obj/x64/Release/SSLServer.exe b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/obj/x64/Release/SSLServer.exe
new file mode 100644
index 000000000..5184d59e4
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/obj/x64/Release/SSLServer.exe differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/obj/x64/Release/SSLServerNS.Properties.Resources.resources b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/obj/x64/Release/SSLServerNS.Properties.Resources.resources
new file mode 100644
index 000000000..6c05a9776
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/obj/x64/Release/SSLServerNS.Properties.Resources.resources differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/obj/x64/Release/SSLServerNS.frmServer.resources b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/obj/x64/Release/SSLServerNS.frmServer.resources
new file mode 100644
index 000000000..6c05a9776
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/obj/x64/Release/SSLServerNS.frmServer.resources differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/obj/x64/Release/TempPE/Properties.Resources.Designer.cs.dll b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/obj/x64/Release/TempPE/Properties.Resources.Designer.cs.dll
new file mode 100644
index 000000000..b540a8515
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/obj/x64/Release/TempPE/Properties.Resources.Designer.cs.dll differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/obj/x86/Release/DesignTimeResolveAssemblyReferencesInput.cache b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/obj/x86/Release/DesignTimeResolveAssemblyReferencesInput.cache
new file mode 100644
index 000000000..77989d9f0
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/obj/x86/Release/DesignTimeResolveAssemblyReferencesInput.cache differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/obj/x86/Release/SSLServer.csproj.FileListAbsolute.txt b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/obj/x86/Release/SSLServer.csproj.FileListAbsolute.txt
new file mode 100644
index 000000000..778f8f21e
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/obj/x86/Release/SSLServer.csproj.FileListAbsolute.txt
@@ -0,0 +1,7 @@
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\bin\x86\Release\SSLServer.exe
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\bin\x86\Release\SSLServer.pdb
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\SSLServer\obj\x86\Release\SSLServerNS.frmServer.resources
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\SSLServer\obj\x86\Release\SSLServerNS.Properties.Resources.resources
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\SSLServer\obj\x86\Release\SSLServer.csproj.GenerateResource.Cache
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\SSLServer\obj\x86\Release\SSLServer.exe
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\SSLServer\obj\x86\Release\SSLServer.pdb
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/obj/x86/Release/SSLServer.csproj.GenerateResource.Cache b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/obj/x86/Release/SSLServer.csproj.GenerateResource.Cache
new file mode 100644
index 000000000..e793f6a97
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/obj/x86/Release/SSLServer.csproj.GenerateResource.Cache differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/obj/x86/Release/SSLServer.exe b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/obj/x86/Release/SSLServer.exe
new file mode 100644
index 000000000..1d631aee9
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/obj/x86/Release/SSLServer.exe differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/obj/x86/Release/SSLServerNS.Properties.Resources.resources b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/obj/x86/Release/SSLServerNS.Properties.Resources.resources
new file mode 100644
index 000000000..6c05a9776
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/obj/x86/Release/SSLServerNS.Properties.Resources.resources differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/obj/x86/Release/SSLServerNS.frmServer.resources b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/obj/x86/Release/SSLServerNS.frmServer.resources
new file mode 100644
index 000000000..6c05a9776
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/SSLServer/obj/x86/Release/SSLServerNS.frmServer.resources differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient-PFM/Program.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient-PFM/Program.cs
new file mode 100644
index 000000000..4fccde30d
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient-PFM/Program.cs
@@ -0,0 +1,21 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Windows.Forms;
+
+namespace TcpClient_PFM
+{
+ static class Program
+ {
+ ///
+ /// 搴旂敤绋嬪簭鐨勪富鍏ュ彛鐐广
+ ///
+ [STAThread]
+ static void Main()
+ {
+ Application.EnableVisualStyles();
+ Application.SetCompatibleTextRenderingDefault(false);
+ Application.Run(new frmClient());
+ }
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient-PFM/Properties/AssemblyInfo.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient-PFM/Properties/AssemblyInfo.cs
new file mode 100644
index 000000000..e31faa9f5
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient-PFM/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+锘縰sing System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 鏈夊叧绋嬪簭闆嗙殑甯歌淇℃伅閫氳繃浠ヤ笅
+// 鐗规ч泦鎺у埗銆傛洿鏀硅繖浜涚壒鎬у煎彲淇敼
+// 涓庣▼搴忛泦鍏宠仈鐨勪俊鎭
+[assembly: AssemblyTitle("TcpClient-PMF")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("TcpClient-PMF")]
+[assembly: AssemblyCopyright("Copyright 漏 2014")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 灏 ComVisible 璁剧疆涓 false 浣挎绋嬪簭闆嗕腑鐨勭被鍨
+// 瀵 COM 缁勪欢涓嶅彲瑙併傚鏋滈渶瑕佷粠 COM 璁块棶姝ょ▼搴忛泦涓殑绫诲瀷锛
+// 鍒欏皢璇ョ被鍨嬩笂鐨 ComVisible 鐗规ц缃负 true銆
+[assembly: ComVisible(false)]
+
+// 濡傛灉姝ら」鐩悜 COM 鍏紑锛屽垯涓嬪垪 GUID 鐢ㄤ簬绫诲瀷搴撶殑 ID
+[assembly: Guid("217b3b79-8789-49a0-b8bd-9e65a6ac63f3")]
+
+// 绋嬪簭闆嗙殑鐗堟湰淇℃伅鐢变笅闈㈠洓涓肩粍鎴:
+//
+// 涓荤増鏈
+// 娆$増鏈
+// 鍐呴儴鐗堟湰鍙
+// 淇鍙
+//
+// 鍙互鎸囧畾鎵鏈夎繖浜涘硷紝涔熷彲浠ヤ娇鐢ㄢ滃唴閮ㄧ増鏈彿鈥濆拰鈥滀慨璁㈠彿鈥濈殑榛樿鍊硷紝
+// 鏂规硶鏄寜濡備笅鎵绀轰娇鐢ㄢ*鈥:
+
+[assembly: AssemblyVersion("3.5.2")]
+[assembly: AssemblyFileVersion("3.5.2")]
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient-PFM/Properties/Resources.Designer.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient-PFM/Properties/Resources.Designer.cs
new file mode 100644
index 000000000..54c4a76e1
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient-PFM/Properties/Resources.Designer.cs
@@ -0,0 +1,63 @@
+锘//------------------------------------------------------------------------------
+//
+// 姝や唬鐮佺敱宸ュ叿鐢熸垚銆
+// 杩愯鏃剁増鏈:4.0.30319.18444
+//
+// 瀵规鏂囦欢鐨勬洿鏀瑰彲鑳戒細瀵艰嚧涓嶆纭殑琛屼负锛屽苟涓斿鏋
+// 閲嶆柊鐢熸垚浠g爜锛岃繖浜涙洿鏀瑰皢浼氫涪澶便
+//
+//------------------------------------------------------------------------------
+
+namespace TcpClient_PFM.Properties {
+ using System;
+
+
+ ///
+ /// 涓涓己绫诲瀷鐨勮祫婧愮被锛岀敤浜庢煡鎵炬湰鍦板寲鐨勫瓧绗︿覆绛夈
+ ///
+ // 姝ょ被鏄敱 StronglyTypedResourceBuilder
+ // 绫婚氳繃绫讳技浜 ResGen 鎴 Visual Studio 鐨勫伐鍏疯嚜鍔ㄧ敓鎴愮殑銆
+ // 鑻ヨ娣诲姞鎴栫Щ闄ゆ垚鍛橈紝璇风紪杈 .ResX 鏂囦欢锛岀劧鍚庨噸鏂拌繍琛 ResGen
+ // (浠 /str 浣滀负鍛戒护閫夐」)锛屾垨閲嶆柊鐢熸垚 VS 椤圭洰銆
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ internal class Resources {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources() {
+ }
+
+ ///
+ /// 杩斿洖姝ょ被浣跨敤鐨勭紦瀛樼殑 ResourceManager 瀹炰緥銆
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager {
+ get {
+ if (object.ReferenceEquals(resourceMan, null)) {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("TcpClient_PFM.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// 浣跨敤姝ゅ己绫诲瀷璧勬簮绫伙紝涓烘墍鏈夎祫婧愭煡鎵
+ /// 閲嶅啓褰撳墠绾跨▼鐨 CurrentUICulture 灞炴с
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient-PFM/Properties/Resources.resx b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient-PFM/Properties/Resources.resx
new file mode 100644
index 000000000..af7dbebba
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient-PFM/Properties/Resources.resx
@@ -0,0 +1,117 @@
+锘
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient-PFM/Properties/Settings.Designer.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient-PFM/Properties/Settings.Designer.cs
new file mode 100644
index 000000000..e32131dea
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient-PFM/Properties/Settings.Designer.cs
@@ -0,0 +1,26 @@
+锘//------------------------------------------------------------------------------
+//
+// 姝や唬鐮佺敱宸ュ叿鐢熸垚銆
+// 杩愯鏃剁増鏈:4.0.30319.18444
+//
+// 瀵规鏂囦欢鐨勬洿鏀瑰彲鑳戒細瀵艰嚧涓嶆纭殑琛屼负锛屽苟涓斿鏋
+// 閲嶆柊鐢熸垚浠g爜锛岃繖浜涙洿鏀瑰皢浼氫涪澶便
+//
+//------------------------------------------------------------------------------
+
+namespace TcpClient_PFM.Properties {
+
+
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")]
+ internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+
+ private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+ public static Settings Default {
+ get {
+ return defaultInstance;
+ }
+ }
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient-PFM/Properties/Settings.settings b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient-PFM/Properties/Settings.settings
new file mode 100644
index 000000000..39645652a
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient-PFM/Properties/Settings.settings
@@ -0,0 +1,7 @@
+锘
+
+
+
+
+
+
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient-PFM/TcpClient-PFM.csproj b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient-PFM/TcpClient-PFM.csproj
new file mode 100644
index 000000000..f2ece938d
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient-PFM/TcpClient-PFM.csproj
@@ -0,0 +1,122 @@
+锘
+
+
+ Debug
+ x86
+ 8.0.30703
+ 2.0
+ {9A2CEAF1-95CF-4E7D-91D5-42DB1F3FD29A}
+ WinExe
+ Properties
+ TcpClient_PFM
+ TcpClient-PFM
+ v4.0
+ Client
+ 512
+
+
+ x86
+ true
+ full
+ false
+ ..\bin\x86\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ x86
+ pdbonly
+ true
+ ..\bin\x86\Release\
+ TRACE
+ prompt
+ 4
+
+
+ true
+ ..\bin\x64\Debug\
+ DEBUG;TRACE
+ full
+ x64
+ ..\bin\Debug\TcpClient-PFM.exe.CodeAnalysisLog.xml
+ true
+ GlobalSuppressions.cs
+ prompt
+ MinimumRecommendedRules.ruleset
+ ;D:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets
+ ;D:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules
+
+
+ ..\bin\x64\Release\
+ TRACE
+ true
+ pdbonly
+ x64
+ ..\bin\Release\TcpClient-PFM.exe.CodeAnalysisLog.xml
+ true
+ GlobalSuppressions.cs
+ prompt
+ MinimumRecommendedRules.ruleset
+ ;D:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets
+ ;D:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Form
+
+
+ frmClient.cs
+
+
+
+
+ frmClient.cs
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+ Designer
+
+
+ True
+ Resources.resx
+ True
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
+ True
+ Settings.settings
+ True
+
+
+
+
+ {DFA935E2-CF37-4E26-B697-D7F3DEE19DD8}
+ HPSocketCS
+
+
+
+
+
\ No newline at end of file
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient-PFM/frmClient.Designer.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient-PFM/frmClient.Designer.cs
new file mode 100644
index 000000000..5b06812ca
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient-PFM/frmClient.Designer.cs
@@ -0,0 +1,291 @@
+锘縩amespace TcpClient_PFM
+{
+ partial class frmClient
+ {
+ ///
+ /// 蹇呴渶鐨勮璁″櫒鍙橀噺銆
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// 娓呯悊鎵鏈夋鍦ㄤ娇鐢ㄧ殑璧勬簮銆
+ ///
+ /// 濡傛灉搴旈噴鏀炬墭绠¤祫婧愶紝涓 true锛涘惁鍒欎负 false銆
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows 绐椾綋璁捐鍣ㄧ敓鎴愮殑浠g爜
+
+ ///
+ /// 璁捐鍣ㄦ敮鎸佹墍闇鐨勬柟娉 - 涓嶈
+ /// 浣跨敤浠g爜缂栬緫鍣ㄤ慨鏀规鏂规硶鐨勫唴瀹广
+ ///
+ private void InitializeComponent()
+ {
+ this.label1 = new System.Windows.Forms.Label();
+ this.label2 = new System.Windows.Forms.Label();
+ this.cbxTestTime = new System.Windows.Forms.ComboBox();
+ this.cbxTestInterv = new System.Windows.Forms.ComboBox();
+ this.cbxThreadInterv = new System.Windows.Forms.ComboBox();
+ this.cbxThreadCount = new System.Windows.Forms.ComboBox();
+ this.label3 = new System.Windows.Forms.Label();
+ this.label4 = new System.Windows.Forms.Label();
+ this.cbxDataLength = new System.Windows.Forms.ComboBox();
+ this.label5 = new System.Windows.Forms.Label();
+ this.label6 = new System.Windows.Forms.Label();
+ this.lbxMsg = new System.Windows.Forms.ListBox();
+ this.txtPort = new System.Windows.Forms.TextBox();
+ this.txtIpAddress = new System.Windows.Forms.TextBox();
+ this.btnStop = new System.Windows.Forms.Button();
+ this.btnStart = new System.Windows.Forms.Button();
+ this.SuspendLayout();
+ //
+ // label1
+ //
+ this.label1.AutoSize = true;
+ this.label1.Location = new System.Drawing.Point(25, 15);
+ this.label1.Name = "label1";
+ this.label1.Size = new System.Drawing.Size(71, 12);
+ this.label1.TabIndex = 0;
+ this.label1.Text = "Test Times:";
+ //
+ // label2
+ //
+ this.label2.AutoSize = true;
+ this.label2.Location = new System.Drawing.Point(19, 41);
+ this.label2.Name = "label2";
+ this.label2.Size = new System.Drawing.Size(77, 12);
+ this.label2.TabIndex = 1;
+ this.label2.Text = "Test Interv:";
+ //
+ // cbxTestTime
+ //
+ this.cbxTestTime.FormattingEnabled = true;
+ this.cbxTestTime.Items.AddRange(new object[] {
+ "1",
+ "5",
+ "10",
+ "30",
+ "50",
+ "100",
+ "300",
+ "500",
+ "1000"});
+ this.cbxTestTime.Location = new System.Drawing.Point(101, 11);
+ this.cbxTestTime.Name = "cbxTestTime";
+ this.cbxTestTime.Size = new System.Drawing.Size(82, 20);
+ this.cbxTestTime.TabIndex = 2;
+ //
+ // cbxTestInterv
+ //
+ this.cbxTestInterv.FormattingEnabled = true;
+ this.cbxTestInterv.Items.AddRange(new object[] {
+ "0",
+ "1",
+ "3",
+ "5",
+ "10",
+ "20",
+ "30",
+ "60",
+ "100"});
+ this.cbxTestInterv.Location = new System.Drawing.Point(101, 38);
+ this.cbxTestInterv.Name = "cbxTestInterv";
+ this.cbxTestInterv.Size = new System.Drawing.Size(82, 20);
+ this.cbxTestInterv.TabIndex = 3;
+ //
+ // cbxThreadInterv
+ //
+ this.cbxThreadInterv.FormattingEnabled = true;
+ this.cbxThreadInterv.Items.AddRange(new object[] {
+ "0",
+ "1",
+ "3",
+ "5",
+ "10",
+ "20",
+ "30",
+ "60",
+ "100"});
+ this.cbxThreadInterv.Location = new System.Drawing.Point(303, 38);
+ this.cbxThreadInterv.Name = "cbxThreadInterv";
+ this.cbxThreadInterv.Size = new System.Drawing.Size(82, 20);
+ this.cbxThreadInterv.TabIndex = 7;
+ //
+ // cbxThreadCount
+ //
+ this.cbxThreadCount.FormattingEnabled = true;
+ this.cbxThreadCount.Items.AddRange(new object[] {
+ "1",
+ "5",
+ "10",
+ "30",
+ "50",
+ "100",
+ "300",
+ "500",
+ "1000"});
+ this.cbxThreadCount.Location = new System.Drawing.Point(303, 11);
+ this.cbxThreadCount.Name = "cbxThreadCount";
+ this.cbxThreadCount.Size = new System.Drawing.Size(82, 20);
+ this.cbxThreadCount.TabIndex = 6;
+ //
+ // label3
+ //
+ this.label3.AutoSize = true;
+ this.label3.Location = new System.Drawing.Point(209, 41);
+ this.label3.Name = "label3";
+ this.label3.Size = new System.Drawing.Size(89, 12);
+ this.label3.TabIndex = 5;
+ this.label3.Text = "Thread Interv:";
+ //
+ // label4
+ //
+ this.label4.AutoSize = true;
+ this.label4.Location = new System.Drawing.Point(215, 15);
+ this.label4.Name = "label4";
+ this.label4.Size = new System.Drawing.Size(83, 12);
+ this.label4.TabIndex = 4;
+ this.label4.Text = "Thread Count:";
+ //
+ // cbxDataLength
+ //
+ this.cbxDataLength.FormattingEnabled = true;
+ this.cbxDataLength.Items.AddRange(new object[] {
+ "1",
+ "10",
+ "100",
+ "1000",
+ "3000",
+ "5000",
+ "10000"});
+ this.cbxDataLength.Location = new System.Drawing.Point(500, 11);
+ this.cbxDataLength.Name = "cbxDataLength";
+ this.cbxDataLength.Size = new System.Drawing.Size(82, 20);
+ this.cbxDataLength.TabIndex = 9;
+ //
+ // label5
+ //
+ this.label5.AutoSize = true;
+ this.label5.Location = new System.Drawing.Point(418, 15);
+ this.label5.Name = "label5";
+ this.label5.Size = new System.Drawing.Size(77, 12);
+ this.label5.TabIndex = 8;
+ this.label5.Text = "Data Length:";
+ //
+ // label6
+ //
+ this.label6.AutoSize = true;
+ this.label6.Location = new System.Drawing.Point(399, 41);
+ this.label6.Name = "label6";
+ this.label6.Size = new System.Drawing.Size(191, 12);
+ this.label6.TabIndex = 10;
+ this.label6.Text = "\'Interv\' is to slow down speed ";
+ //
+ // lbxMsg
+ //
+ this.lbxMsg.FormattingEnabled = true;
+ this.lbxMsg.ItemHeight = 12;
+ this.lbxMsg.Location = new System.Drawing.Point(21, 67);
+ this.lbxMsg.Name = "lbxMsg";
+ this.lbxMsg.Size = new System.Drawing.Size(561, 352);
+ this.lbxMsg.TabIndex = 11;
+ this.lbxMsg.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.lbxMsg_KeyPress);
+ //
+ // txtPort
+ //
+ this.txtPort.Location = new System.Drawing.Point(331, 430);
+ this.txtPort.Name = "txtPort";
+ this.txtPort.Size = new System.Drawing.Size(40, 21);
+ this.txtPort.TabIndex = 16;
+ this.txtPort.Text = "5555";
+ //
+ // txtIpAddress
+ //
+ this.txtIpAddress.Location = new System.Drawing.Point(227, 430);
+ this.txtIpAddress.Name = "txtIpAddress";
+ this.txtIpAddress.Size = new System.Drawing.Size(98, 21);
+ this.txtIpAddress.TabIndex = 15;
+ this.txtIpAddress.Text = "127.0.0.1";
+ //
+ // btnStop
+ //
+ this.btnStop.Anchor = System.Windows.Forms.AnchorStyles.Top;
+ this.btnStop.Location = new System.Drawing.Point(476, 426);
+ this.btnStop.Name = "btnStop";
+ this.btnStop.Size = new System.Drawing.Size(106, 26);
+ this.btnStop.TabIndex = 14;
+ this.btnStop.Text = "Stop && Check";
+ this.btnStop.UseVisualStyleBackColor = true;
+ this.btnStop.Click += new System.EventHandler(this.btnStop_Click);
+ //
+ // btnStart
+ //
+ this.btnStart.Anchor = System.Windows.Forms.AnchorStyles.Top;
+ this.btnStart.Location = new System.Drawing.Point(397, 426);
+ this.btnStart.Name = "btnStart";
+ this.btnStart.Size = new System.Drawing.Size(73, 26);
+ this.btnStart.TabIndex = 13;
+ this.btnStart.Text = "Start";
+ this.btnStart.UseVisualStyleBackColor = true;
+ this.btnStart.Click += new System.EventHandler(this.btnStart_Click);
+ //
+ // frmClient
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(600, 458);
+ this.Controls.Add(this.txtPort);
+ this.Controls.Add(this.txtIpAddress);
+ this.Controls.Add(this.btnStop);
+ this.Controls.Add(this.btnStart);
+ this.Controls.Add(this.lbxMsg);
+ this.Controls.Add(this.label6);
+ this.Controls.Add(this.cbxDataLength);
+ this.Controls.Add(this.label5);
+ this.Controls.Add(this.cbxThreadInterv);
+ this.Controls.Add(this.cbxThreadCount);
+ this.Controls.Add(this.label3);
+ this.Controls.Add(this.label4);
+ this.Controls.Add(this.cbxTestInterv);
+ this.Controls.Add(this.cbxTestTime);
+ this.Controls.Add(this.label2);
+ this.Controls.Add(this.label1);
+ this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
+ this.Name = "frmClient";
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
+ this.Text = "Echo-PFM Client [ \'C\' - clear list box ]";
+ this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.frmClient_FormClosing);
+ this.Load += new System.EventHandler(this.frmClient_Load);
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.Label label1;
+ private System.Windows.Forms.Label label2;
+ private System.Windows.Forms.ComboBox cbxTestTime;
+ private System.Windows.Forms.ComboBox cbxTestInterv;
+ private System.Windows.Forms.ComboBox cbxThreadInterv;
+ private System.Windows.Forms.ComboBox cbxThreadCount;
+ private System.Windows.Forms.Label label3;
+ private System.Windows.Forms.Label label4;
+ private System.Windows.Forms.ComboBox cbxDataLength;
+ private System.Windows.Forms.Label label5;
+ private System.Windows.Forms.Label label6;
+ private System.Windows.Forms.ListBox lbxMsg;
+ private System.Windows.Forms.TextBox txtPort;
+ private System.Windows.Forms.TextBox txtIpAddress;
+ private System.Windows.Forms.Button btnStop;
+ private System.Windows.Forms.Button btnStart;
+ }
+}
+
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient-PFM/frmClient.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient-PFM/frmClient.cs
new file mode 100644
index 000000000..0e2306cde
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient-PFM/frmClient.cs
@@ -0,0 +1,392 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using System.Threading;
+using System.Diagnostics;
+using HPSocketCS;
+
+namespace TcpClient_PFM
+{
+ public enum AppState
+ {
+ Starting, Started, Stoping, Stoped, Error
+ }
+
+ public partial class frmClient : Form
+ {
+ private AppState appState = AppState.Stoped;
+ private delegate void ShowMsg(string msg);
+ private ShowMsg AddMsgDelegate;
+
+ Stopwatch StopWatch = new Stopwatch();
+
+ int TestTimes = 0;
+ int TestInterv = 0;
+ int ThreadCount = 0;
+ int ThreadInterv = 0;
+ int DataLength = 0;
+
+ long Timeconsuming = 0;
+ Int64 TotalReceived = 0;
+ Int64 TotalSent = 0;
+ Int64 ExpectReceived = 0;
+
+ Thread testThread = null;
+
+ List clientList = new List();
+
+ public frmClient()
+ {
+ InitializeComponent();
+ }
+
+ private void frmClient_Load(object sender, EventArgs e)
+ {
+
+ // 鍒濆鍖栨祴璇曞
+ this.cbxTestTime.SelectedIndex = 5;
+ this.cbxTestInterv.SelectedIndex = 1;
+ this.cbxThreadInterv.SelectedIndex = 0;
+ this.cbxThreadCount.SelectedIndex = 5;
+ this.cbxDataLength.SelectedIndex = 5;
+
+ try
+ {
+ // 鍔犱釜濮旀墭鏄剧ずmsg,鍥犱负on绯诲垪閮芥槸鍦ㄥ伐浣滅嚎绋嬩腑璋冪敤鐨,ui涓嶅厑璁哥洿鎺ユ搷浣
+ AddMsgDelegate = new ShowMsg(AddMsg);
+
+ SetAppState(AppState.Stoped);
+
+ AddMsg("鎻愮ず:32浣嶇郴缁熷拰绋嬪簭,璋冩暣鍙傛暟鏃,缁勫悎鍖呯殑銆愬ぇ灏忋戜笉瑕佽秴杩囩郴缁熸敮鎸佺殑鍐呭瓨銆");
+ }
+ catch (Exception ex)
+ {
+ SetAppState(AppState.Error);
+ AddMsg(ex.Message);
+ }
+ }
+
+ private bool CheckParams()
+ {
+ bool ret = false;
+ if (TestTimes <= 0)
+ {
+ this.cbxTestTime.Focus();
+ }
+ else if (TestInterv < 0)
+ {
+ this.cbxTestInterv.Focus();
+ }
+ else if (ThreadCount <= 0)
+ {
+ this.cbxThreadCount.Focus();
+ }
+ else if (ThreadInterv < 0)
+ {
+ this.cbxThreadInterv.Focus();
+ }
+ else if (DataLength <= 0)
+ {
+ this.cbxDataLength.Focus();
+ }
+ else
+ {
+ ret = true;
+ }
+
+ return ret;
+ }
+
+ private void btnStart_Click(object sender, EventArgs e)
+ {
+ try
+ {
+ string address = this.txtIpAddress.Text.Trim();
+ ushort port = ushort.Parse(this.txtPort.Text.Trim());
+ TestTimes = int.Parse(this.cbxTestTime.Text.Trim());
+ TestInterv = int.Parse(this.cbxTestInterv.Text.Trim());
+ ThreadCount = int.Parse(this.cbxThreadCount.Text.Trim());
+ ThreadInterv = int.Parse(this.cbxThreadInterv.Text.Trim());
+ DataLength = int.Parse(this.cbxDataLength.Text.Trim());
+ if (CheckParams() == false)
+ {
+ throw new Exception("params error!");
+ }
+
+ SetAppState(AppState.Starting);
+
+ Timeconsuming = 0;
+ TotalReceived = 0;
+ TotalSent = 0;
+ ExpectReceived = (Int64)TestTimes * (Int64)ThreadCount * (Int64)DataLength;
+
+ clientList.Clear();
+
+ // 鍒涘缓鎸囧畾绾跨▼涓暟鐨勫鎴风
+ for (int i = 0; i < ThreadCount; i++)
+ {
+ TcpClient client = new TcpClient();
+
+ // 璁剧疆client浜嬩欢
+ client.OnPrepareConnect += new TcpClientEvent.OnPrepareConnectEventHandler(OnPrepareConnect);
+ client.OnConnect += new TcpClientEvent.OnConnectEventHandler(OnConnect);
+ client.OnSend += new TcpClientEvent.OnSendEventHandler(OnSend);
+ client.OnReceive += new TcpClientEvent.OnReceiveEventHandler(OnReceive);
+ client.OnClose += new TcpClientEvent.OnCloseEventHandler(OnClose);
+
+ if (client.Connetion(address, port) == true)
+ {
+ clientList.Add(client);
+ }
+ else
+ {
+ foreach (var c in clientList)
+ {
+ c.Stop();
+ }
+ clientList.Clear();
+ throw new Exception(string.Format(" > {2}, Connection to server fail ->({0},{1})", client.ErrorCode, client.ErrorMessage, i));
+ }
+ }
+
+ AddMsg(string.Format("$ Client start ok -> ({0}:{1})", address, port));
+
+ // 寤惰繜3绉
+ int sendDelay = 3;
+ AddMsg(string.Format(" *** willing to send data after {0} seconds ...", sendDelay));
+ // Delay2(sendDelay * 1000);
+
+ SetAppState(AppState.Started);
+
+ testThread = new Thread(delegate()
+ {
+ Thread.Sleep(sendDelay * 1000);
+ AddMsg(string.Format(" *** begin... ***", sendDelay));
+ // 鍙戦佺殑鏁版嵁鍖
+ byte[] sendBytes = new byte[DataLength];
+
+
+ StopWatch.Restart();
+ bool isTerminated = false;
+ for (int i = 0; i < TestTimes; i++)
+ {
+ for (int j = 0; j < ThreadCount; j++)
+ {
+ TcpClient client = clientList[j];
+ if (client.Send(sendBytes, sendBytes.Length) == false)
+ {
+ AddMsg(string.Format("$ Client send fail [sock: {0}, seq: {1}] -> {3} ({2})",
+ i + 1,
+ j + 1,
+ client.SYSGetLastError(),
+ client.GetSocketErrorDesc(SocketError.DataSend)));
+ isTerminated = true;
+ break;
+ }
+
+ if (ThreadInterv > 0 && j + 1 < ThreadCount)
+ {
+ Thread.Sleep(ThreadInterv);
+ //Delay2(ThreadInterv);
+ }
+ }
+
+ if (isTerminated == true)
+ {
+ break;
+ }
+
+ if (TestInterv > 0 && i + 1 < TestTimes)
+ {
+ Thread.Sleep(TestInterv);
+ //Delay2(TestInterv);
+ }
+ }
+ });
+ testThread.Start();
+ }
+ catch (Exception ex)
+ {
+ SetAppState(AppState.Stoped);
+ AddMsg(string.Format("$ Start fail msg:{0}", ex.Message));
+ }
+ }
+
+ private void btnStop_Click(object sender, EventArgs e)
+ {
+ SetAppState(AppState.Stoping);
+
+ for (int i = 0; i < clientList.Count; i++)
+ {
+ if (clientList[i].Stop() == true)
+ {
+ AddMsg(string.Format("$ Client stopping ... --> ({0})", i + 1));
+ }
+ }
+
+ if (testThread.ThreadState == System.Threading.ThreadState.Running)
+ {
+ testThread.Abort();
+ }
+
+ Delay2(100);
+
+ AddMsg(string.Format("*** Summary: expect - {0}, send - {1}, recv - {2}",
+ ExpectReceived, TotalSent, TotalReceived));
+
+ if (ExpectReceived == TotalSent && TotalSent == TotalReceived)
+ {
+ AddMsg(string.Format(" *** Success: time consuming - {0} millisecond !", Timeconsuming));
+ }
+ else
+ {
+ AddMsg("*** Fail: manual terminated ? (or data lost)");
+ }
+
+ SetAppState(AppState.Stoped);
+ }
+
+ HandleResult OnPrepareConnect(TcpClient sender, uint socket)
+ {
+ return HandleResult.Ok;
+ }
+
+ HandleResult OnConnect(TcpClient sender)
+ {
+ // 宸茶繛鎺 鍒拌揪涓娆
+ AddMsg(string.Format(" > [{0}, OnConnect]", sender.ConnectionId));
+ return HandleResult.Ok;
+ }
+
+ HandleResult OnSend(TcpClient sender, byte[] bytes)
+ {
+ // 瀹㈡埛绔彂鏁版嵁浜
+ Interlocked.Add(ref TotalSent, bytes.Length);
+ return HandleResult.Ok;
+ }
+
+ HandleResult OnReceive(TcpClient sender, byte[] bytes)
+ {
+ // 鏁版嵁鍒拌揪浜
+
+ Interlocked.Add(ref TotalReceived, bytes.Length);
+ if (TotalReceived == ExpectReceived)
+ {
+ StopWatch.Stop();
+ Timeconsuming = StopWatch.ElapsedMilliseconds;
+ AddMsg(string.Format("Total time consuming: {0}", Timeconsuming));
+ }
+
+ return HandleResult.Ok;
+ }
+
+ HandleResult OnClose(TcpClient sender, SocketOperation enOperation, int errorCode)
+ {
+ // 杩炴帴鍏抽棴浜
+ return HandleResult.Ok;
+ }
+
+
+ ///
+ /// 璁剧疆绋嬪簭鐘舵
+ ///
+ ///
+ void SetAppState(AppState state)
+ {
+ appState = state;
+ this.btnStart.Enabled = (appState == AppState.Stoped);
+ this.btnStop.Enabled = (appState == AppState.Started);
+ this.txtIpAddress.Enabled = (appState == AppState.Stoped);
+ this.txtPort.Enabled = (appState == AppState.Stoped);
+ this.cbxTestTime.Enabled = (appState == AppState.Stoped);
+ this.cbxTestInterv.Enabled = (appState == AppState.Stoped);
+ this.cbxThreadInterv.Enabled = (appState == AppState.Stoped);
+ this.cbxThreadCount.Enabled = (appState == AppState.Stoped);
+ this.cbxDataLength.Enabled = (appState == AppState.Stoped);
+ }
+
+ ///
+ /// 寰listbox鍔犱竴鏉¢」鐩
+ ///
+ ///
+ void AddMsg(string msg)
+ {
+ if (this.lbxMsg.InvokeRequired)
+ {
+ // 寰堝竻鐨勮皟鑷繁
+ this.lbxMsg.Invoke(AddMsgDelegate, msg);
+ }
+ else
+ {
+ if (this.lbxMsg.Items.Count > 100)
+ {
+ this.lbxMsg.Items.RemoveAt(0);
+ }
+ this.lbxMsg.Items.Add(msg);
+ this.lbxMsg.TopIndex = this.lbxMsg.Items.Count - (int)(this.lbxMsg.Height / this.lbxMsg.ItemHeight);
+ }
+ }
+
+ public delegate void SleepDelegate(int num);
+
+ ///
+ /// 绮剧‘寤惰繜,鎽樿嚜缃戠粶
+ ///
+ ///
+ private void Delay1(long time)
+ {
+ long b = DateTime.Now.Ticks / 10000;
+ long e = 0; long c = 0; ;
+ do
+ {
+ e = DateTime.Now.Ticks / 10000;
+ c = e - b;
+ Application.DoEvents();
+ }
+ while (c < time);
+ }
+
+ private void AsyncDelay(int time)
+ {
+ Thread.Sleep(time);
+ }
+
+ ///
+ /// 绮剧‘寤惰繜,鎽樿嚜缃戠粶
+ ///
+ ///
+ private void Delay2(int time)
+ {
+ SleepDelegate delay = new SleepDelegate(AsyncDelay);
+ IAsyncResult ar = delay.BeginInvoke(time, null, null);
+ while (ar.IsCompleted == false)
+ {
+ Application.DoEvents();
+ }
+ delay.EndInvoke(ar);
+ }
+
+ private void lbxMsg_KeyPress(object sender, KeyPressEventArgs e)
+ {
+ // 娓呯悊listbox
+ if (e.KeyChar == 'c' || e.KeyChar == 'C')
+ {
+ this.lbxMsg.Items.Clear();
+ }
+ }
+
+ private void frmClient_FormClosing(object sender, FormClosingEventArgs e)
+ {
+ if (appState == AppState.Started)
+ {
+ btnStop_Click(sender, e);
+ }
+ }
+
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient-PFM/frmClient.resx b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient-PFM/frmClient.resx
new file mode 100644
index 000000000..1af7de150
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient-PFM/frmClient.resx
@@ -0,0 +1,120 @@
+锘
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient-PFM/obj/x64/Release/DesignTimeResolveAssemblyReferencesInput.cache b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient-PFM/obj/x64/Release/DesignTimeResolveAssemblyReferencesInput.cache
new file mode 100644
index 000000000..28ba6ad68
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient-PFM/obj/x64/Release/DesignTimeResolveAssemblyReferencesInput.cache differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient-PFM/obj/x64/Release/TcpClient-PFM.csproj.FileListAbsolute.txt b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient-PFM/obj/x64/Release/TcpClient-PFM.csproj.FileListAbsolute.txt
new file mode 100644
index 000000000..24e57c3b7
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient-PFM/obj/x64/Release/TcpClient-PFM.csproj.FileListAbsolute.txt
@@ -0,0 +1,7 @@
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\bin\x64\Release\TcpClient-PFM.exe
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\bin\x64\Release\TcpClient-PFM.pdb
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpClient-PFM\obj\x64\Release\TcpClient_PFM.frmClient.resources
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpClient-PFM\obj\x64\Release\TcpClient_PFM.Properties.Resources.resources
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpClient-PFM\obj\x64\Release\TcpClient-PFM.csproj.GenerateResource.Cache
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpClient-PFM\obj\x64\Release\TcpClient-PFM.exe
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpClient-PFM\obj\x64\Release\TcpClient-PFM.pdb
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient-PFM/obj/x64/Release/TcpClient-PFM.csproj.GenerateResource.Cache b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient-PFM/obj/x64/Release/TcpClient-PFM.csproj.GenerateResource.Cache
new file mode 100644
index 000000000..d8df9cfb7
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient-PFM/obj/x64/Release/TcpClient-PFM.csproj.GenerateResource.Cache differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient-PFM/obj/x64/Release/TcpClient-PFM.exe b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient-PFM/obj/x64/Release/TcpClient-PFM.exe
new file mode 100644
index 000000000..6d0939202
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient-PFM/obj/x64/Release/TcpClient-PFM.exe differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient-PFM/obj/x64/Release/TcpClient_PFM.Properties.Resources.resources b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient-PFM/obj/x64/Release/TcpClient_PFM.Properties.Resources.resources
new file mode 100644
index 000000000..6c05a9776
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient-PFM/obj/x64/Release/TcpClient_PFM.Properties.Resources.resources differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient-PFM/obj/x64/Release/TcpClient_PFM.frmClient.resources b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient-PFM/obj/x64/Release/TcpClient_PFM.frmClient.resources
new file mode 100644
index 000000000..6c05a9776
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient-PFM/obj/x64/Release/TcpClient_PFM.frmClient.resources differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient-PFM/obj/x86/Release/DesignTimeResolveAssemblyReferencesInput.cache b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient-PFM/obj/x86/Release/DesignTimeResolveAssemblyReferencesInput.cache
new file mode 100644
index 000000000..df5625f9e
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient-PFM/obj/x86/Release/DesignTimeResolveAssemblyReferencesInput.cache differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient-PFM/obj/x86/Release/TcpClient-PFM.csproj.FileListAbsolute.txt b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient-PFM/obj/x86/Release/TcpClient-PFM.csproj.FileListAbsolute.txt
new file mode 100644
index 000000000..c46e8b77d
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient-PFM/obj/x86/Release/TcpClient-PFM.csproj.FileListAbsolute.txt
@@ -0,0 +1,7 @@
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\bin\x86\Release\TcpClient-PFM.exe
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\bin\x86\Release\TcpClient-PFM.pdb
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpClient-PFM\obj\x86\Release\TcpClient_PFM.frmClient.resources
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpClient-PFM\obj\x86\Release\TcpClient_PFM.Properties.Resources.resources
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpClient-PFM\obj\x86\Release\TcpClient-PFM.csproj.GenerateResource.Cache
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpClient-PFM\obj\x86\Release\TcpClient-PFM.exe
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpClient-PFM\obj\x86\Release\TcpClient-PFM.pdb
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient-PFM/obj/x86/Release/TcpClient-PFM.csproj.GenerateResource.Cache b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient-PFM/obj/x86/Release/TcpClient-PFM.csproj.GenerateResource.Cache
new file mode 100644
index 000000000..d8df9cfb7
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient-PFM/obj/x86/Release/TcpClient-PFM.csproj.GenerateResource.Cache differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient-PFM/obj/x86/Release/TcpClient-PFM.exe b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient-PFM/obj/x86/Release/TcpClient-PFM.exe
new file mode 100644
index 000000000..6c1024ef7
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient-PFM/obj/x86/Release/TcpClient-PFM.exe differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient-PFM/obj/x86/Release/TcpClient_PFM.Properties.Resources.resources b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient-PFM/obj/x86/Release/TcpClient_PFM.Properties.Resources.resources
new file mode 100644
index 000000000..6c05a9776
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient-PFM/obj/x86/Release/TcpClient_PFM.Properties.Resources.resources differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient-PFM/obj/x86/Release/TcpClient_PFM.frmClient.resources b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient-PFM/obj/x86/Release/TcpClient_PFM.frmClient.resources
new file mode 100644
index 000000000..6c05a9776
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient-PFM/obj/x86/Release/TcpClient_PFM.frmClient.resources differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient-PFM/obj/x86/Release/TempPE/Properties.Resources.Designer.cs.dll b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient-PFM/obj/x86/Release/TempPE/Properties.Resources.Designer.cs.dll
new file mode 100644
index 000000000..fa0cf03f8
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient-PFM/obj/x86/Release/TempPE/Properties.Resources.Designer.cs.dll differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient/Program.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient/Program.cs
new file mode 100644
index 000000000..59a54816e
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient/Program.cs
@@ -0,0 +1,21 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Windows.Forms;
+
+namespace SSLClientNS
+{
+ static class Program
+ {
+ ///
+ /// 搴旂敤绋嬪簭鐨勪富鍏ュ彛鐐广
+ ///
+ [STAThread]
+ static void Main()
+ {
+ Application.EnableVisualStyles();
+ Application.SetCompatibleTextRenderingDefault(false);
+ Application.Run(new frmClient());
+ }
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient/Properties/AssemblyInfo.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient/Properties/AssemblyInfo.cs
new file mode 100644
index 000000000..347b39f6d
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+锘縰sing System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 鏈夊叧绋嬪簭闆嗙殑甯歌淇℃伅閫氳繃浠ヤ笅
+// 鐗规ч泦鎺у埗銆傛洿鏀硅繖浜涚壒鎬у煎彲淇敼
+// 涓庣▼搴忛泦鍏宠仈鐨勪俊鎭
+[assembly: AssemblyTitle("Client")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Client")]
+[assembly: AssemblyCopyright("Copyright 漏 2014")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 灏 ComVisible 璁剧疆涓 false 浣挎绋嬪簭闆嗕腑鐨勭被鍨
+// 瀵 COM 缁勪欢涓嶅彲瑙併傚鏋滈渶瑕佷粠 COM 璁块棶姝ょ▼搴忛泦涓殑绫诲瀷锛
+// 鍒欏皢璇ョ被鍨嬩笂鐨 ComVisible 鐗规ц缃负 true銆
+[assembly: ComVisible(false)]
+
+// 濡傛灉姝ら」鐩悜 COM 鍏紑锛屽垯涓嬪垪 GUID 鐢ㄤ簬绫诲瀷搴撶殑 ID
+[assembly: Guid("0b4a498a-774e-4250-bf80-a05682b557fb")]
+
+// 绋嬪簭闆嗙殑鐗堟湰淇℃伅鐢变笅闈㈠洓涓肩粍鎴:
+//
+// 涓荤増鏈
+// 娆$増鏈
+// 鍐呴儴鐗堟湰鍙
+// 淇鍙
+//
+// 鍙互鎸囧畾鎵鏈夎繖浜涘硷紝涔熷彲浠ヤ娇鐢ㄢ滃唴閮ㄧ増鏈彿鈥濆拰鈥滀慨璁㈠彿鈥濈殑榛樿鍊硷紝
+// 鏂规硶鏄寜濡備笅鎵绀轰娇鐢ㄢ*鈥:
+
+[assembly: AssemblyVersion("3.5.2")]
+[assembly: AssemblyFileVersion("3.5.2")]
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient/Properties/Resources.Designer.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient/Properties/Resources.Designer.cs
new file mode 100644
index 000000000..5a31e050b
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient/Properties/Resources.Designer.cs
@@ -0,0 +1,63 @@
+锘//------------------------------------------------------------------------------
+//
+// 姝や唬鐮佺敱宸ュ叿鐢熸垚銆
+// 杩愯鏃剁増鏈:4.0.30319.42000
+//
+// 瀵规鏂囦欢鐨勬洿鏀瑰彲鑳戒細瀵艰嚧涓嶆纭殑琛屼负锛屽苟涓斿鏋
+// 閲嶆柊鐢熸垚浠g爜锛岃繖浜涙洿鏀瑰皢浼氫涪澶便
+//
+//------------------------------------------------------------------------------
+
+namespace SSLClientNS.Properties {
+ using System;
+
+
+ ///
+ /// 涓涓己绫诲瀷鐨勮祫婧愮被锛岀敤浜庢煡鎵炬湰鍦板寲鐨勫瓧绗︿覆绛夈
+ ///
+ // 姝ょ被鏄敱 StronglyTypedResourceBuilder
+ // 绫婚氳繃绫讳技浜 ResGen 鎴 Visual Studio 鐨勫伐鍏疯嚜鍔ㄧ敓鎴愮殑銆
+ // 鑻ヨ娣诲姞鎴栫Щ闄ゆ垚鍛橈紝璇风紪杈 .ResX 鏂囦欢锛岀劧鍚庨噸鏂拌繍琛 ResGen
+ // (浠 /str 浣滀负鍛戒护閫夐」)锛屾垨閲嶆柊鐢熸垚 VS 椤圭洰銆
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ internal class Resources {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources() {
+ }
+
+ ///
+ /// 杩斿洖姝ょ被浣跨敤鐨勭紦瀛樼殑 ResourceManager 瀹炰緥銆
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager {
+ get {
+ if (object.ReferenceEquals(resourceMan, null)) {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("TcpClientNS.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// 浣跨敤姝ゅ己绫诲瀷璧勬簮绫伙紝涓烘墍鏈夎祫婧愭煡鎵
+ /// 閲嶅啓褰撳墠绾跨▼鐨 CurrentUICulture 灞炴с
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient/Properties/Resources.resx b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient/Properties/Resources.resx
new file mode 100644
index 000000000..af7dbebba
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient/Properties/Resources.resx
@@ -0,0 +1,117 @@
+锘
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient/Properties/Settings.Designer.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient/Properties/Settings.Designer.cs
new file mode 100644
index 000000000..004272e52
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient/Properties/Settings.Designer.cs
@@ -0,0 +1,26 @@
+锘//------------------------------------------------------------------------------
+//
+// 姝や唬鐮佺敱宸ュ叿鐢熸垚銆
+// 杩愯鏃剁増鏈:4.0.30319.42000
+//
+// 瀵规鏂囦欢鐨勬洿鏀瑰彲鑳戒細瀵艰嚧涓嶆纭殑琛屼负锛屽苟涓斿鏋
+// 閲嶆柊鐢熸垚浠g爜锛岃繖浜涙洿鏀瑰皢浼氫涪澶便
+//
+//------------------------------------------------------------------------------
+
+namespace SSLClientNS.Properties {
+
+
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")]
+ internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+
+ private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+ public static Settings Default {
+ get {
+ return defaultInstance;
+ }
+ }
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient/Properties/Settings.settings b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient/Properties/Settings.settings
new file mode 100644
index 000000000..39645652a
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient/Properties/Settings.settings
@@ -0,0 +1,7 @@
+锘
+
+
+
+
+
+
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient/TcpClient.csproj b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient/TcpClient.csproj
new file mode 100644
index 000000000..7c1051894
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient/TcpClient.csproj
@@ -0,0 +1,127 @@
+锘
+
+
+ Debug
+ x86
+ 8.0.30703
+ 2.0
+ {B6E43918-236A-4EA7-84C8-ED4A98049907}
+ WinExe
+ Properties
+ TcpClientNS
+ TcpClient
+ v4.0
+ Client
+ 512
+
+
+ x86
+ true
+ full
+ false
+ ..\bin\x86\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ x86
+ pdbonly
+ true
+ ..\bin\x86\Release\
+ TRACE
+ prompt
+ 4
+ false
+
+
+ true
+ ..\bin\x64\Debug\
+ DEBUG;TRACE
+ full
+ x64
+ ..\bin\Debug\TcpClient.exe.CodeAnalysisLog.xml
+ true
+ GlobalSuppressions.cs
+ prompt
+ MinimumRecommendedRules.ruleset
+ ;D:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets
+ true
+ ;D:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules
+ true
+
+
+ ..\bin\x64\Release\
+ TRACE
+ true
+ pdbonly
+ x64
+ ..\bin\Release\TcpClient.exe.CodeAnalysisLog.xml
+ true
+ GlobalSuppressions.cs
+ prompt
+ MinimumRecommendedRules.ruleset
+ ;D:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets
+ true
+ ;D:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Form
+
+
+ frmClient.cs
+
+
+
+
+ frmClient.cs
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+ Designer
+
+
+ True
+ Resources.resx
+ True
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
+ True
+ Settings.settings
+ True
+
+
+
+
+ {DFA935E2-CF37-4E26-B697-D7F3DEE19DD8}
+ HPSocketCS
+
+
+
+
+
\ No newline at end of file
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient/frmClient.Designer.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient/frmClient.Designer.cs
new file mode 100644
index 000000000..0d8ed8625
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient/frmClient.Designer.cs
@@ -0,0 +1,205 @@
+锘縩amespace SSLClientNS
+{
+ partial class frmClient
+ {
+ ///
+ /// 蹇呴渶鐨勮璁″櫒鍙橀噺銆
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// 娓呯悊鎵鏈夋鍦ㄤ娇鐢ㄧ殑璧勬簮銆
+ ///
+ /// 濡傛灉搴旈噴鏀炬墭绠¤祫婧愶紝涓 true锛涘惁鍒欎负 false銆
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows 绐椾綋璁捐鍣ㄧ敓鎴愮殑浠g爜
+
+ ///
+ /// 璁捐鍣ㄦ敮鎸佹墍闇鐨勬柟娉 - 涓嶈
+ /// 浣跨敤浠g爜缂栬緫鍣ㄤ慨鏀规鏂规硶鐨勫唴瀹广
+ ///
+ private void InitializeComponent()
+ {
+ this.groupBox1 = new System.Windows.Forms.GroupBox();
+ this.cbxAsyncConn = new System.Windows.Forms.CheckBox();
+ this.txtPort = new System.Windows.Forms.TextBox();
+ this.txtIpAddress = new System.Windows.Forms.TextBox();
+ this.btnStop = new System.Windows.Forms.Button();
+ this.btnStart = new System.Windows.Forms.Button();
+ this.lbxMsg = new System.Windows.Forms.ListBox();
+ this.txtSend = new System.Windows.Forms.TextBox();
+ this.btnSend = new System.Windows.Forms.Button();
+ this.btnSendFile = new System.Windows.Forms.Button();
+ this.btnSendSerializableObject = new System.Windows.Forms.Button();
+ this.groupBox1.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // groupBox1
+ //
+ this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.groupBox1.Controls.Add(this.cbxAsyncConn);
+ this.groupBox1.Controls.Add(this.txtPort);
+ this.groupBox1.Controls.Add(this.txtIpAddress);
+ this.groupBox1.Controls.Add(this.btnStop);
+ this.groupBox1.Controls.Add(this.btnStart);
+ this.groupBox1.Location = new System.Drawing.Point(12, 2);
+ this.groupBox1.Name = "groupBox1";
+ this.groupBox1.Size = new System.Drawing.Size(464, 47);
+ this.groupBox1.TabIndex = 11;
+ this.groupBox1.TabStop = false;
+ //
+ // cbxAsyncConn
+ //
+ this.cbxAsyncConn.AutoSize = true;
+ this.cbxAsyncConn.Checked = true;
+ this.cbxAsyncConn.CheckState = System.Windows.Forms.CheckState.Checked;
+ this.cbxAsyncConn.Location = new System.Drawing.Point(134, 20);
+ this.cbxAsyncConn.Name = "cbxAsyncConn";
+ this.cbxAsyncConn.Size = new System.Drawing.Size(84, 16);
+ this.cbxAsyncConn.TabIndex = 13;
+ this.cbxAsyncConn.Text = "Async Conn";
+ this.cbxAsyncConn.UseVisualStyleBackColor = true;
+ //
+ // txtPort
+ //
+ this.txtPort.Location = new System.Drawing.Point(88, 18);
+ this.txtPort.Name = "txtPort";
+ this.txtPort.Size = new System.Drawing.Size(40, 21);
+ this.txtPort.TabIndex = 12;
+ this.txtPort.Text = "5555";
+ //
+ // txtIpAddress
+ //
+ this.txtIpAddress.Location = new System.Drawing.Point(11, 18);
+ this.txtIpAddress.Name = "txtIpAddress";
+ this.txtIpAddress.Size = new System.Drawing.Size(71, 21);
+ this.txtIpAddress.TabIndex = 11;
+ this.txtIpAddress.Text = "127.0.0.1";
+ //
+ // btnStop
+ //
+ this.btnStop.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnStop.Location = new System.Drawing.Point(407, 15);
+ this.btnStop.Name = "btnStop";
+ this.btnStop.Size = new System.Drawing.Size(47, 26);
+ this.btnStop.TabIndex = 10;
+ this.btnStop.Text = "Stop";
+ this.btnStop.UseVisualStyleBackColor = true;
+ this.btnStop.Click += new System.EventHandler(this.btnStop_Click);
+ //
+ // btnStart
+ //
+ this.btnStart.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnStart.Location = new System.Drawing.Point(354, 15);
+ this.btnStart.Name = "btnStart";
+ this.btnStart.Size = new System.Drawing.Size(47, 26);
+ this.btnStart.TabIndex = 9;
+ this.btnStart.Text = "Start";
+ this.btnStart.UseVisualStyleBackColor = true;
+ this.btnStart.Click += new System.EventHandler(this.btnStart_Click);
+ //
+ // lbxMsg
+ //
+ this.lbxMsg.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.lbxMsg.FormattingEnabled = true;
+ this.lbxMsg.ItemHeight = 12;
+ this.lbxMsg.Location = new System.Drawing.Point(12, 63);
+ this.lbxMsg.Name = "lbxMsg";
+ this.lbxMsg.Size = new System.Drawing.Size(465, 244);
+ this.lbxMsg.TabIndex = 10;
+ this.lbxMsg.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.lbxMsg_KeyPress);
+ //
+ // txtSend
+ //
+ this.txtSend.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.txtSend.Location = new System.Drawing.Point(11, 321);
+ this.txtSend.Name = "txtSend";
+ this.txtSend.Size = new System.Drawing.Size(413, 21);
+ this.txtSend.TabIndex = 12;
+ this.txtSend.Text = "text to be sent";
+ //
+ // btnSend
+ //
+ this.btnSend.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnSend.Location = new System.Drawing.Point(430, 317);
+ this.btnSend.Name = "btnSend";
+ this.btnSend.Size = new System.Drawing.Size(47, 26);
+ this.btnSend.TabIndex = 13;
+ this.btnSend.Text = "Send";
+ this.btnSend.UseVisualStyleBackColor = true;
+ this.btnSend.Click += new System.EventHandler(this.btnSend_Click);
+ //
+ // btnSendFile
+ //
+ this.btnSendFile.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnSendFile.Location = new System.Drawing.Point(206, 348);
+ this.btnSendFile.Name = "btnSendFile";
+ this.btnSendFile.Size = new System.Drawing.Size(75, 26);
+ this.btnSendFile.TabIndex = 14;
+ this.btnSendFile.Text = "Send file";
+ this.btnSendFile.UseVisualStyleBackColor = true;
+ this.btnSendFile.Click += new System.EventHandler(this.btnSendFile_Click);
+ //
+ // btnSendSerializableObject
+ //
+ this.btnSendSerializableObject.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnSendSerializableObject.Location = new System.Drawing.Point(313, 348);
+ this.btnSendSerializableObject.Name = "btnSendSerializableObject";
+ this.btnSendSerializableObject.Size = new System.Drawing.Size(163, 26);
+ this.btnSendSerializableObject.TabIndex = 15;
+ this.btnSendSerializableObject.Text = "Send serializable object";
+ this.btnSendSerializableObject.UseVisualStyleBackColor = true;
+ this.btnSendSerializableObject.Click += new System.EventHandler(this.btnSendSerializableObject_Click);
+ //
+ // frmClient
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(485, 378);
+ this.Controls.Add(this.btnSendSerializableObject);
+ this.Controls.Add(this.btnSendFile);
+ this.Controls.Add(this.btnSend);
+ this.Controls.Add(this.txtSend);
+ this.Controls.Add(this.groupBox1);
+ this.Controls.Add(this.lbxMsg);
+ this.Name = "frmClient";
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
+ this.Text = "Echo-TcpClient [ \'C\' - clear list box ]";
+ this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.frmClient_FormClosed);
+ this.Load += new System.EventHandler(this.frmClient_Load);
+ this.groupBox1.ResumeLayout(false);
+ this.groupBox1.PerformLayout();
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.GroupBox groupBox1;
+ private System.Windows.Forms.TextBox txtPort;
+ private System.Windows.Forms.TextBox txtIpAddress;
+ private System.Windows.Forms.Button btnStop;
+ private System.Windows.Forms.Button btnStart;
+ private System.Windows.Forms.ListBox lbxMsg;
+ private System.Windows.Forms.CheckBox cbxAsyncConn;
+ private System.Windows.Forms.TextBox txtSend;
+ private System.Windows.Forms.Button btnSend;
+ private System.Windows.Forms.Button btnSendFile;
+ private System.Windows.Forms.Button btnSendSerializableObject;
+
+ }
+}
+
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient/frmClient.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient/frmClient.cs
new file mode 100644
index 000000000..e7d67c782
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient/frmClient.cs
@@ -0,0 +1,540 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using HPSocketCS;
+using System.Runtime.InteropServices;
+using System.IO;
+using System.Threading;
+
+namespace SSLClientNS
+{
+ public enum AppState
+ {
+ Starting, Started, Stoping, Stoped, Error
+ }
+
+ public enum StudentType
+ {
+ None, Array, List, Single,
+ }
+
+ public partial class frmClient : Form
+ {
+ private AppState appState = AppState.Stoped;
+
+ private delegate void ConnectUpdateUiDelegate();
+ private delegate void SetAppStateDelegate(AppState state);
+ private delegate void ShowMsg(string msg);
+ private ShowMsg AddMsgDelegate;
+ HPSocketCS.TcpClient client = new HPSocketCS.TcpClient();
+
+ bool isSendFile = false;
+ StudentType studentType = StudentType.None;
+ public frmClient()
+ {
+ InitializeComponent();
+ }
+
+ private void frmClient_Load(object sender, EventArgs e)
+ {
+ try
+ {
+ // 鍔犱釜濮旀墭鏄剧ずmsg,鍥犱负on绯诲垪閮芥槸鍦ㄥ伐浣滅嚎绋嬩腑璋冪敤鐨,ui涓嶅厑璁哥洿鎺ユ搷浣
+ AddMsgDelegate = new ShowMsg(AddMsg);
+
+ // 璁剧疆client浜嬩欢
+ client.OnPrepareConnect += new TcpClientEvent.OnPrepareConnectEventHandler(OnPrepareConnect);
+ client.OnConnect += new TcpClientEvent.OnConnectEventHandler(OnConnect);
+ client.OnSend += new TcpClientEvent.OnSendEventHandler(OnSend);
+ client.OnReceive += new TcpClientEvent.OnReceiveEventHandler(OnReceive);
+ client.OnClose += new TcpClientEvent.OnCloseEventHandler(OnClose);
+
+ SetAppState(AppState.Stoped);
+ }
+ catch (Exception ex)
+ {
+ SetAppState(AppState.Error);
+ AddMsg(ex.Message);
+ }
+ }
+
+ private void btnStart_Click(object sender, EventArgs e)
+ {
+ try
+ {
+ String ip = this.txtIpAddress.Text.Trim();
+ ushort port = ushort.Parse(this.txtPort.Text.Trim());
+
+ // 鍐欏湪杩欎釜浣嶇疆鏄笂闈㈠彲鑳戒細寮傚父
+ SetAppState(AppState.Starting);
+
+ AddMsg(string.Format("$Client Starting ... -> ({0}:{1})", ip, port));
+
+ if (client.Connetion(ip, port, this.cbxAsyncConn.Checked))
+ {
+ if (cbxAsyncConn.Checked == false)
+ {
+ SetAppState(AppState.Started);
+ }
+
+ AddMsg(string.Format("$Client Start OK -> ({0}:{1})", ip, port));
+ }
+ else
+ {
+ SetAppState(AppState.Stoped);
+ throw new Exception(string.Format("$Client Start Error -> {0}({1})", client.ErrorMessage, client.ErrorCode));
+ }
+ }
+ catch (Exception ex)
+ {
+ AddMsg(ex.Message);
+ }
+ }
+
+ private void btnStop_Click(object sender, EventArgs e)
+ {
+
+ // 鍋滄鏈嶅姟
+ AddMsg("$Server Stop");
+ if (client.Stop())
+ {
+ SetAppState(AppState.Stoped);
+ }
+ else
+ {
+ AddMsg(string.Format("$Stop Error -> {0}({1})", client.ErrorMessage, client.ErrorCode));
+ }
+ }
+
+ private void btnSend_Click(object sender, EventArgs e)
+ {
+ try
+ {
+ string send = this.txtSend.Text;
+ if (send.Length == 0)
+ {
+ return;
+ }
+
+ byte[] bytes = Encoding.Default.GetBytes(send);
+ IntPtr connId = client.ConnectionId;
+
+ // 鍙戦
+ if (client.Send(bytes, bytes.Length))
+ {
+ AddMsg(string.Format("$ ({0}) Send OK --> {1}", connId, send));
+ }
+ else
+ {
+ AddMsg(string.Format("$ ({0}) Send Fail --> {1} ({2})", connId, send, bytes.Length));
+ }
+
+ }
+ catch (Exception ex)
+ {
+ AddMsg(string.Format("$ Send Fail --> msg ({0})", ex.Message));
+ }
+
+ }
+
+ private void btnSendSerializableObject_Click(object sender, EventArgs e)
+ {
+ try
+ {
+ // 娉: 瀵硅薄搴忓垪鍖栧彂閫佹暟鎹緝澶
+
+ if (studentType != StudentType.None)
+ {
+ // 姝e湪鎵ц
+ throw new Exception("being implemented");
+ }
+
+ IntPtr connId = client.ConnectionId;
+
+ Thread thread = new Thread(new ThreadStart(delegate()
+ {
+ Student[] students = new Student[2];
+ students[0] = new Student();
+ students[0].Id = 1;
+ students[0].Name = "寮犱笁";
+ students[0].Sex = Sex.Female;
+ students[1] = new Student();
+ students[1].Id = 2;
+ students[1].Name = "鏉庡洓";
+ students[1].Sex = Sex.Male;
+
+ // 鍙戦佹暟缁勫璞
+ studentType = StudentType.Array;
+ if (client.SendBySerializable(students))
+ {
+ AddMsg(string.Format("$ ({0}) Send OK --> {1}", connId, "Student[]"));
+ }
+ else
+ {
+ AddMsg(string.Format("$ ({0}) Send Fail --> {1}", connId, "Student[]"));
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////
+
+ // 鏀瑰彉鎬у埆
+ students[0].Sex = Sex.Transsexual;
+
+ List stuList = new List();
+ stuList.Add(students[0]);
+ stuList.Add(students[1]);
+
+ // 闃叉绮樺寘,寤惰繜2绉掑彂閫佷笅涓缁勬暟鎹
+ AddMsg(" *** 2 seconds after sending ...");
+ Thread.Sleep(2000);
+
+ // 鍙戦乴ist瀵硅薄
+ studentType = StudentType.List;
+ if (client.SendBySerializable(stuList))
+ {
+ AddMsg(string.Format("$ ({0}) Send OK --> {1}", connId, "List"));
+ }
+ else
+ {
+ AddMsg(string.Format("$ ({0}) Send Fail --> {1}", connId, "List"));
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////
+
+ // 闃叉绮樺寘,寤惰繜2绉掑彂閫佷笅涓缁勬暟鎹
+ AddMsg(" *** 2 seconds after sending ...");
+ Thread.Sleep(2000);
+
+ // 鏀瑰彉鎬у埆
+ students[0].Sex = Sex.Unknown;
+
+ // 鍙戦佸崟涓鍛樹俊鎭
+ studentType = StudentType.Single;
+ if (client.SendBySerializable(students[0]))
+ {
+ AddMsg(string.Format("$ ({0}) Send OK --> {1}", connId, "Student"));
+ }
+ else
+ {
+ AddMsg(string.Format("$ ({0}) Send Fail --> {1}", connId, "Student"));
+ }
+
+ }));
+ thread.Start();
+ }
+ catch (Exception ex)
+ {
+ studentType = StudentType.None;
+ AddMsg(string.Format("$ Send Fail --> msg ({0})", ex.Message));
+ }
+ }
+
+ private void lbxMsg_KeyPress(object sender, KeyPressEventArgs e)
+ {
+
+ // 娓呯悊listbox
+ if (e.KeyChar == 'c' || e.KeyChar == 'C')
+ {
+ this.lbxMsg.Items.Clear();
+ }
+ }
+
+ void ConnectUpdateUi()
+ {
+ if (this.cbxAsyncConn.Checked == true)
+ {
+ SetAppState(AppState.Started);
+ }
+ }
+
+
+ private bool SendFileToServer(string filePath)
+ {
+ FileInfo fi = new FileInfo(filePath);
+ if (fi.Length > 4096 * 1024)
+ {
+ throw new Exception("琚彂閫佹枃浠跺ぇ灏忎笉鑳借秴杩4096KB銆");
+ }
+ else if (fi.Length == 0)
+ {
+ throw new Exception("鏂囦欢澶у皬涓嶈兘涓0銆");
+ }
+
+ // 澶撮檮鍔犳暟鎹
+ MyFileInfo myFile = new MyFileInfo()
+ {
+ FilePath = filePath,
+ FileSize = fi.Length,
+ };
+
+ // 鍙戦佹枃浠舵爣璁,鐢ㄦ潵鍦╫nrecv閲屽垽鏂槸鍚︽枃浠跺洖鍖
+ isSendFile = true;
+
+ // 涓嶉檮鍔犲熬鏁版嵁
+ bool ret = client.SendSmallFile(filePath, myFile, null);
+ if (ret == false)
+ {
+ isSendFile = false;
+ int error = client.SYSGetLastError();
+ AddMsg(string.Format(" > [SendSmallFile] errorCode:{0}", error));
+ }
+
+ return ret;
+ }
+
+ HandleResult OnPrepareConnect(TcpClient sender, uint socket)
+ {
+ return HandleResult.Ok;
+ }
+
+ HandleResult OnConnect(TcpClient sender)
+ {
+ // 宸茶繛鎺 鍒拌揪涓娆
+
+ // 濡傛灉鏄紓姝ヨ仈鎺,鏇存柊鐣岄潰鐘舵
+ this.Invoke(new ConnectUpdateUiDelegate(ConnectUpdateUi));
+
+ AddMsg(string.Format(" > [{0},OnConnect]", sender.ConnectionId));
+
+ return HandleResult.Ok;
+ }
+
+ HandleResult OnSend(TcpClient sender, byte[] bytes)
+ {
+ // 瀹㈡埛绔彂鏁版嵁浜
+ AddMsg(string.Format(" > [{0},OnSend] -> ({1} bytes)", sender.ConnectionId, bytes.Length));
+
+ return HandleResult.Ok;
+ }
+
+ HandleResult OnReceive(TcpClient sender, byte[] bytes)
+ {
+ // 鏁版嵁鍒拌揪浜
+ if (isSendFile == true)
+ {
+ // 濡傛灉鍙戦佷簡鏂囦欢,骞舵帴鏀跺埌浜嗚繑鍥炴暟鎹
+ isSendFile = false;
+
+ MyFileInfo myFile = client.BytesToStruct(bytes);
+ int objSize = Marshal.SizeOf(myFile);
+ // 鍥犱负娌℃湁闄勫姞灏炬暟鎹,鎵浠ュぇ灏忓彲浠ョ敤length - objSize
+ byte[] contentBytes = new byte[bytes.Length - objSize];
+ Array.ConstrainedCopy(bytes, objSize, contentBytes, 0, contentBytes.Length);
+
+ string txt = Encoding.Default.GetString(contentBytes);
+ string msg = string.Empty;
+ if (txt.Length > 100)
+ {
+ msg = txt.Substring(0, 100) + "......";
+ }
+ else
+ {
+ msg = txt;
+ }
+
+ AddMsg(string.Format(" > [{0},OnReceive] -> FileInfo(Path:\"{1}\",Size:{2})", sender.ConnectionId, myFile.FilePath, myFile.FileSize));
+ AddMsg(string.Format(" > [{0},OnReceive] -> FileContent(\"{1}\")", sender.ConnectionId, msg));
+ }
+ else if (studentType != StudentType.None)
+ {
+ switch (studentType)
+ {
+ case StudentType.Array:
+ Student[] students = sender.BytesToObject(bytes) as Student[];
+ foreach (var stu in students)
+ {
+ AddMsg(string.Format(" > [{0},OnReceive] -> Student({1},{2},{3})", sender.ConnectionId, stu.Id, stu.Name, stu.GetSexString()));
+ }
+ break;
+ case StudentType.List:
+ List stuList = sender.BytesToObject(bytes) as List;
+ foreach (var stu in stuList)
+ {
+ AddMsg(string.Format(" > [{0},OnReceive] -> Student({1},{2},{3})", sender.ConnectionId, stu.Id, stu.Name, stu.GetSexString()));
+ }
+ break;
+ case StudentType.Single:
+ Student student = sender.BytesToObject(bytes) as Student;
+ AddMsg(string.Format(" > [{0},OnReceive] -> Student({1},{2},{3})", sender.ConnectionId, student.Id, student.Name, student.GetSexString()));
+ studentType = StudentType.None;
+ break;
+ }
+ }
+ else
+ {
+ AddMsg(string.Format(" > [{0},OnReceive] -> ({1} bytes)", sender.ConnectionId, bytes.Length));
+ }
+
+ return HandleResult.Ok;
+ }
+
+ HandleResult OnClose(TcpClient sender, SocketOperation enOperation, int errorCode)
+ {
+ if(errorCode == 0)
+ // 杩炴帴鍏抽棴浜
+ AddMsg(string.Format(" > [{0},OnClose]", sender.ConnectionId));
+ else
+ // 鍑洪敊浜
+ AddMsg(string.Format(" > [{0},OnError] -> OP:{1},CODE:{2}", sender.ConnectionId, enOperation, errorCode));
+
+ // 閫氱煡鐣岄潰,鍙鐞嗕簡杩炴帴閿欒,涔熸病杩涜鏄笉鏄繛鎺ラ敊璇殑鍒ゆ柇,鎵浠ユ湁閿欒灏变細璁剧疆鐣岄潰
+ // 鐢熶骇鐜璇疯嚜宸辨帶鍒
+ this.Invoke(new SetAppStateDelegate(SetAppState), AppState.Stoped);
+
+ return HandleResult.Ok;
+ }
+
+ ///
+ /// 璁剧疆绋嬪簭鐘舵
+ ///
+ ///
+ void SetAppState(AppState state)
+ {
+ appState = state;
+ this.btnStart.Enabled = (appState == AppState.Stoped);
+ this.btnStop.Enabled = (appState == AppState.Started);
+ this.txtIpAddress.Enabled = (appState == AppState.Stoped);
+ this.txtPort.Enabled = (appState == AppState.Stoped);
+ this.cbxAsyncConn.Enabled = (appState == AppState.Stoped);
+ this.btnSend.Enabled = (appState == AppState.Started);
+ this.btnSendFile.Enabled = (appState == AppState.Started);
+ this.btnSendSerializableObject.Enabled = (appState == AppState.Started);
+ }
+
+ ///
+ /// 寰listbox鍔犱竴鏉¢」鐩
+ ///
+ ///
+ void AddMsg(string msg)
+ {
+ if (this.lbxMsg.InvokeRequired)
+ {
+ // 寰堝竻鐨勮皟鑷繁
+ this.lbxMsg.Invoke(AddMsgDelegate, msg);
+ }
+ else
+ {
+ if (this.lbxMsg.Items.Count > 100)
+ {
+ this.lbxMsg.Items.RemoveAt(0);
+ }
+ this.lbxMsg.Items.Add(msg);
+ this.lbxMsg.TopIndex = this.lbxMsg.Items.Count - (int)(this.lbxMsg.Height / this.lbxMsg.ItemHeight);
+ }
+ }
+
+ private void frmClient_FormClosed(object sender, FormClosedEventArgs e)
+ {
+ client.Destroy();
+ }
+
+
+
+ private void btnSendFile_Click(object sender, EventArgs e)
+ {
+ try
+ {
+
+ OpenFileDialog ofd = new OpenFileDialog();
+ // ofd.InitialDirectory = "c:\\" ;
+ //ofd.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
+ ofd.Filter = "txt files (*.txt)|*.txt";
+ ofd.RestoreDirectory = true;
+ ofd.CheckFileExists = true;
+ ofd.CheckPathExists = true;
+ if (ofd.ShowDialog() == DialogResult.OK)
+ {
+ SendFileToServer(ofd.FileName);
+ }
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show(ex.Message);
+
+ }
+ }
+
+ }
+
+ [StructLayout(LayoutKind.Sequential, Pack = 1)]
+ public struct MyFileInfo
+ {
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 255)]
+ public string FilePath;
+ public long FileSize;
+ }
+
+ ///
+ /// 瀛﹀憳鎬у埆
+ ///
+ public enum Sex
+ {
+ ///
+ /// 鐢
+ ///
+ Male = 1,
+
+ ///
+ /// 濂
+ ///
+ Female = 2,
+
+ ///
+ /// 鍙樻т汉
+ ///
+ Transsexual = 3,
+
+ ///
+ /// 鏈煡
+ ///
+ Unknown = 4,
+
+ }
+
+ ///
+ /// 瀛﹀憳绫
+ ///
+ [Serializable]
+ public class Student
+ {
+ ///
+ /// 缂栧彿
+ ///
+ public int Id { get; set; }
+
+ ///
+ /// 濮撳悕
+ ///
+ public string Name { get; set; }
+
+ ///
+ /// 鎬у埆
+ ///
+ public Sex Sex { get; set; }
+
+ public string GetSexString()
+ {
+ string sex = string.Empty;
+ switch (Sex)
+ {
+ case Sex.Male:
+ sex = "鐢";
+ break;
+ case Sex.Female:
+ sex = "濂";
+ break;
+ case Sex.Transsexual:
+ sex = "鍙樻т汉";
+ break;
+ default:
+ sex = "鏈煡";
+ break;
+ }
+ return sex;
+ }
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient/frmClient.resx b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient/frmClient.resx
new file mode 100644
index 000000000..1af7de150
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient/frmClient.resx
@@ -0,0 +1,120 @@
+锘
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient/obj/x64/Release/DesignTimeResolveAssemblyReferencesInput.cache b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient/obj/x64/Release/DesignTimeResolveAssemblyReferencesInput.cache
new file mode 100644
index 000000000..d19e4c08a
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient/obj/x64/Release/DesignTimeResolveAssemblyReferencesInput.cache differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient/obj/x64/Release/SSLClientNS.frmClient.resources b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient/obj/x64/Release/SSLClientNS.frmClient.resources
new file mode 100644
index 000000000..6c05a9776
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient/obj/x64/Release/SSLClientNS.frmClient.resources differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient/obj/x64/Release/TcpClient.csproj.FileListAbsolute.txt b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient/obj/x64/Release/TcpClient.csproj.FileListAbsolute.txt
new file mode 100644
index 000000000..0d3020f15
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient/obj/x64/Release/TcpClient.csproj.FileListAbsolute.txt
@@ -0,0 +1,7 @@
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\bin\x64\Release\TcpClient.exe
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\bin\x64\Release\TcpClient.pdb
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpClient\obj\x64\Release\SSLClientNS.frmClient.resources
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpClient\obj\x64\Release\TcpClientNS.Properties.Resources.resources
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpClient\obj\x64\Release\TcpClient.csproj.GenerateResource.Cache
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpClient\obj\x64\Release\TcpClient.exe
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpClient\obj\x64\Release\TcpClient.pdb
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient/obj/x64/Release/TcpClient.csproj.GenerateResource.Cache b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient/obj/x64/Release/TcpClient.csproj.GenerateResource.Cache
new file mode 100644
index 000000000..79622bd1d
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient/obj/x64/Release/TcpClient.csproj.GenerateResource.Cache differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient/obj/x64/Release/TcpClient.exe b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient/obj/x64/Release/TcpClient.exe
new file mode 100644
index 000000000..344f7d52d
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient/obj/x64/Release/TcpClient.exe differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient/obj/x64/Release/TcpClientNS.Properties.Resources.resources b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient/obj/x64/Release/TcpClientNS.Properties.Resources.resources
new file mode 100644
index 000000000..6c05a9776
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient/obj/x64/Release/TcpClientNS.Properties.Resources.resources differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient/obj/x86/Release/DesignTimeResolveAssemblyReferencesInput.cache b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient/obj/x86/Release/DesignTimeResolveAssemblyReferencesInput.cache
new file mode 100644
index 000000000..ca99dac38
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient/obj/x86/Release/DesignTimeResolveAssemblyReferencesInput.cache differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient/obj/x86/Release/SSLClientNS.frmClient.resources b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient/obj/x86/Release/SSLClientNS.frmClient.resources
new file mode 100644
index 000000000..6c05a9776
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient/obj/x86/Release/SSLClientNS.frmClient.resources differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient/obj/x86/Release/TcpClient.csproj.FileListAbsolute.txt b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient/obj/x86/Release/TcpClient.csproj.FileListAbsolute.txt
new file mode 100644
index 000000000..aee1327ed
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient/obj/x86/Release/TcpClient.csproj.FileListAbsolute.txt
@@ -0,0 +1,7 @@
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\bin\x86\Release\TcpClient.exe
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\bin\x86\Release\TcpClient.pdb
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpClient\obj\x86\Release\SSLClientNS.frmClient.resources
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpClient\obj\x86\Release\TcpClientNS.Properties.Resources.resources
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpClient\obj\x86\Release\TcpClient.csproj.GenerateResource.Cache
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpClient\obj\x86\Release\TcpClient.exe
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpClient\obj\x86\Release\TcpClient.pdb
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient/obj/x86/Release/TcpClient.csproj.GenerateResource.Cache b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient/obj/x86/Release/TcpClient.csproj.GenerateResource.Cache
new file mode 100644
index 000000000..79622bd1d
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient/obj/x86/Release/TcpClient.csproj.GenerateResource.Cache differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient/obj/x86/Release/TcpClient.exe b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient/obj/x86/Release/TcpClient.exe
new file mode 100644
index 000000000..91c504d3f
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient/obj/x86/Release/TcpClient.exe differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient/obj/x86/Release/TcpClientNS.Properties.Resources.resources b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient/obj/x86/Release/TcpClientNS.Properties.Resources.resources
new file mode 100644
index 000000000..6c05a9776
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient/obj/x86/Release/TcpClientNS.Properties.Resources.resources differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient/obj/x86/Release/TempPE/Properties.Resources.Designer.cs.dll b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient/obj/x86/Release/TempPE/Properties.Resources.Designer.cs.dll
new file mode 100644
index 000000000..665ac3891
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpClient/obj/x86/Release/TempPE/Properties.Resources.Designer.cs.dll differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackClient/Program.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackClient/Program.cs
new file mode 100644
index 000000000..59a54816e
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackClient/Program.cs
@@ -0,0 +1,21 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Windows.Forms;
+
+namespace SSLClientNS
+{
+ static class Program
+ {
+ ///
+ /// 搴旂敤绋嬪簭鐨勪富鍏ュ彛鐐广
+ ///
+ [STAThread]
+ static void Main()
+ {
+ Application.EnableVisualStyles();
+ Application.SetCompatibleTextRenderingDefault(false);
+ Application.Run(new frmClient());
+ }
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackClient/Properties/AssemblyInfo.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackClient/Properties/AssemblyInfo.cs
new file mode 100644
index 000000000..347b39f6d
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackClient/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+锘縰sing System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 鏈夊叧绋嬪簭闆嗙殑甯歌淇℃伅閫氳繃浠ヤ笅
+// 鐗规ч泦鎺у埗銆傛洿鏀硅繖浜涚壒鎬у煎彲淇敼
+// 涓庣▼搴忛泦鍏宠仈鐨勪俊鎭
+[assembly: AssemblyTitle("Client")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Client")]
+[assembly: AssemblyCopyright("Copyright 漏 2014")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 灏 ComVisible 璁剧疆涓 false 浣挎绋嬪簭闆嗕腑鐨勭被鍨
+// 瀵 COM 缁勪欢涓嶅彲瑙併傚鏋滈渶瑕佷粠 COM 璁块棶姝ょ▼搴忛泦涓殑绫诲瀷锛
+// 鍒欏皢璇ョ被鍨嬩笂鐨 ComVisible 鐗规ц缃负 true銆
+[assembly: ComVisible(false)]
+
+// 濡傛灉姝ら」鐩悜 COM 鍏紑锛屽垯涓嬪垪 GUID 鐢ㄤ簬绫诲瀷搴撶殑 ID
+[assembly: Guid("0b4a498a-774e-4250-bf80-a05682b557fb")]
+
+// 绋嬪簭闆嗙殑鐗堟湰淇℃伅鐢变笅闈㈠洓涓肩粍鎴:
+//
+// 涓荤増鏈
+// 娆$増鏈
+// 鍐呴儴鐗堟湰鍙
+// 淇鍙
+//
+// 鍙互鎸囧畾鎵鏈夎繖浜涘硷紝涔熷彲浠ヤ娇鐢ㄢ滃唴閮ㄧ増鏈彿鈥濆拰鈥滀慨璁㈠彿鈥濈殑榛樿鍊硷紝
+// 鏂规硶鏄寜濡備笅鎵绀轰娇鐢ㄢ*鈥:
+
+[assembly: AssemblyVersion("3.5.2")]
+[assembly: AssemblyFileVersion("3.5.2")]
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackClient/Properties/Resources.Designer.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackClient/Properties/Resources.Designer.cs
new file mode 100644
index 000000000..5b73c5ee5
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackClient/Properties/Resources.Designer.cs
@@ -0,0 +1,63 @@
+锘//------------------------------------------------------------------------------
+//
+// 姝や唬鐮佺敱宸ュ叿鐢熸垚銆
+// 杩愯鏃剁増鏈:4.0.30319.42000
+//
+// 瀵规鏂囦欢鐨勬洿鏀瑰彲鑳戒細瀵艰嚧涓嶆纭殑琛屼负锛屽苟涓斿鏋
+// 閲嶆柊鐢熸垚浠g爜锛岃繖浜涙洿鏀瑰皢浼氫涪澶便
+//
+//------------------------------------------------------------------------------
+
+namespace TcpPackClient.Properties {
+ using System;
+
+
+ ///
+ /// 涓涓己绫诲瀷鐨勮祫婧愮被锛岀敤浜庢煡鎵炬湰鍦板寲鐨勫瓧绗︿覆绛夈
+ ///
+ // 姝ょ被鏄敱 StronglyTypedResourceBuilder
+ // 绫婚氳繃绫讳技浜 ResGen 鎴 Visual Studio 鐨勫伐鍏疯嚜鍔ㄧ敓鎴愮殑銆
+ // 鑻ヨ娣诲姞鎴栫Щ闄ゆ垚鍛橈紝璇风紪杈 .ResX 鏂囦欢锛岀劧鍚庨噸鏂拌繍琛 ResGen
+ // (浠 /str 浣滀负鍛戒护閫夐」)锛屾垨閲嶆柊鐢熸垚 VS 椤圭洰銆
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ internal class Resources {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources() {
+ }
+
+ ///
+ /// 杩斿洖姝ょ被浣跨敤鐨勭紦瀛樼殑 ResourceManager 瀹炰緥銆
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager {
+ get {
+ if (object.ReferenceEquals(resourceMan, null)) {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("TcpPackClient.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// 浣跨敤姝ゅ己绫诲瀷璧勬簮绫伙紝涓烘墍鏈夎祫婧愭煡鎵
+ /// 閲嶅啓褰撳墠绾跨▼鐨 CurrentUICulture 灞炴с
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackClient/Properties/Resources.resx b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackClient/Properties/Resources.resx
new file mode 100644
index 000000000..af7dbebba
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackClient/Properties/Resources.resx
@@ -0,0 +1,117 @@
+锘
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackClient/Properties/Settings.Designer.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackClient/Properties/Settings.Designer.cs
new file mode 100644
index 000000000..e16e503b8
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackClient/Properties/Settings.Designer.cs
@@ -0,0 +1,26 @@
+锘//------------------------------------------------------------------------------
+//
+// 姝や唬鐮佺敱宸ュ叿鐢熸垚銆
+// 杩愯鏃剁増鏈:4.0.30319.42000
+//
+// 瀵规鏂囦欢鐨勬洿鏀瑰彲鑳戒細瀵艰嚧涓嶆纭殑琛屼负锛屽苟涓斿鏋
+// 閲嶆柊鐢熸垚浠g爜锛岃繖浜涙洿鏀瑰皢浼氫涪澶便
+//
+//------------------------------------------------------------------------------
+
+namespace TcpPackClient.Properties {
+
+
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")]
+ internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+
+ private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+ public static Settings Default {
+ get {
+ return defaultInstance;
+ }
+ }
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackClient/Properties/Settings.settings b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackClient/Properties/Settings.settings
new file mode 100644
index 000000000..39645652a
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackClient/Properties/Settings.settings
@@ -0,0 +1,7 @@
+锘
+
+
+
+
+
+
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackClient/TcpPackClient.csproj b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackClient/TcpPackClient.csproj
new file mode 100644
index 000000000..b8a16cb8a
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackClient/TcpPackClient.csproj
@@ -0,0 +1,127 @@
+锘
+
+
+ Debug
+ x86
+ 8.0.30703
+ 2.0
+ {36D05914-1A8A-484C-9FB7-8BE4582A665A}
+ WinExe
+ Properties
+ TcpPackClient
+ TcpPackClient
+ v4.0
+ Client
+ 512
+
+
+ x86
+ true
+ full
+ false
+ ..\bin\x86\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ x86
+ pdbonly
+ true
+ ..\bin\x86\Release\
+ TRACE
+ prompt
+ 4
+ false
+
+
+ true
+ ..\bin\x64\Debug\
+ DEBUG;TRACE
+ full
+ x64
+ ..\bin\Debug\TcpClient.exe.CodeAnalysisLog.xml
+ true
+ GlobalSuppressions.cs
+ prompt
+ MinimumRecommendedRules.ruleset
+ ;D:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets
+ true
+ ;D:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules
+ true
+
+
+ ..\bin\x64\Release\
+ TRACE
+ true
+ pdbonly
+ x64
+ ..\bin\Release\TcpClient.exe.CodeAnalysisLog.xml
+ true
+ GlobalSuppressions.cs
+ prompt
+ MinimumRecommendedRules.ruleset
+ ;D:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets
+ true
+ ;D:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Form
+
+
+ frmClient.cs
+
+
+
+
+ frmClient.cs
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+ Designer
+
+
+ True
+ Resources.resx
+ True
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
+ True
+ Settings.settings
+ True
+
+
+
+
+ {DFA935E2-CF37-4E26-B697-D7F3DEE19DD8}
+ HPSocketCS
+
+
+
+
+
\ No newline at end of file
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackClient/frmClient.Designer.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackClient/frmClient.Designer.cs
new file mode 100644
index 000000000..d77852821
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackClient/frmClient.Designer.cs
@@ -0,0 +1,177 @@
+锘縩amespace SSLClientNS
+{
+ partial class frmClient
+ {
+ ///
+ /// 蹇呴渶鐨勮璁″櫒鍙橀噺銆
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// 娓呯悊鎵鏈夋鍦ㄤ娇鐢ㄧ殑璧勬簮銆
+ ///
+ /// 濡傛灉搴旈噴鏀炬墭绠¤祫婧愶紝涓 true锛涘惁鍒欎负 false銆
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows 绐椾綋璁捐鍣ㄧ敓鎴愮殑浠g爜
+
+ ///
+ /// 璁捐鍣ㄦ敮鎸佹墍闇鐨勬柟娉 - 涓嶈
+ /// 浣跨敤浠g爜缂栬緫鍣ㄤ慨鏀规鏂规硶鐨勫唴瀹广
+ ///
+ private void InitializeComponent()
+ {
+ this.groupBox1 = new System.Windows.Forms.GroupBox();
+ this.cbxAsyncConn = new System.Windows.Forms.CheckBox();
+ this.txtPort = new System.Windows.Forms.TextBox();
+ this.txtIpAddress = new System.Windows.Forms.TextBox();
+ this.btnStop = new System.Windows.Forms.Button();
+ this.btnStart = new System.Windows.Forms.Button();
+ this.lbxMsg = new System.Windows.Forms.ListBox();
+ this.txtSend = new System.Windows.Forms.TextBox();
+ this.btnSend = new System.Windows.Forms.Button();
+ this.groupBox1.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // groupBox1
+ //
+ this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.groupBox1.Controls.Add(this.cbxAsyncConn);
+ this.groupBox1.Controls.Add(this.txtPort);
+ this.groupBox1.Controls.Add(this.txtIpAddress);
+ this.groupBox1.Controls.Add(this.btnStop);
+ this.groupBox1.Controls.Add(this.btnStart);
+ this.groupBox1.Location = new System.Drawing.Point(12, 2);
+ this.groupBox1.Name = "groupBox1";
+ this.groupBox1.Size = new System.Drawing.Size(464, 47);
+ this.groupBox1.TabIndex = 11;
+ this.groupBox1.TabStop = false;
+ //
+ // cbxAsyncConn
+ //
+ this.cbxAsyncConn.AutoSize = true;
+ this.cbxAsyncConn.Checked = true;
+ this.cbxAsyncConn.CheckState = System.Windows.Forms.CheckState.Checked;
+ this.cbxAsyncConn.Location = new System.Drawing.Point(134, 20);
+ this.cbxAsyncConn.Name = "cbxAsyncConn";
+ this.cbxAsyncConn.Size = new System.Drawing.Size(84, 16);
+ this.cbxAsyncConn.TabIndex = 13;
+ this.cbxAsyncConn.Text = "Async Conn";
+ this.cbxAsyncConn.UseVisualStyleBackColor = true;
+ //
+ // txtPort
+ //
+ this.txtPort.Location = new System.Drawing.Point(88, 18);
+ this.txtPort.Name = "txtPort";
+ this.txtPort.Size = new System.Drawing.Size(40, 21);
+ this.txtPort.TabIndex = 12;
+ this.txtPort.Text = "5555";
+ //
+ // txtIpAddress
+ //
+ this.txtIpAddress.Location = new System.Drawing.Point(11, 18);
+ this.txtIpAddress.Name = "txtIpAddress";
+ this.txtIpAddress.Size = new System.Drawing.Size(71, 21);
+ this.txtIpAddress.TabIndex = 11;
+ this.txtIpAddress.Text = "127.0.0.1";
+ //
+ // btnStop
+ //
+ this.btnStop.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnStop.Location = new System.Drawing.Point(407, 15);
+ this.btnStop.Name = "btnStop";
+ this.btnStop.Size = new System.Drawing.Size(47, 26);
+ this.btnStop.TabIndex = 10;
+ this.btnStop.Text = "Stop";
+ this.btnStop.UseVisualStyleBackColor = true;
+ this.btnStop.Click += new System.EventHandler(this.btnStop_Click);
+ //
+ // btnStart
+ //
+ this.btnStart.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnStart.Location = new System.Drawing.Point(354, 15);
+ this.btnStart.Name = "btnStart";
+ this.btnStart.Size = new System.Drawing.Size(47, 26);
+ this.btnStart.TabIndex = 9;
+ this.btnStart.Text = "Start";
+ this.btnStart.UseVisualStyleBackColor = true;
+ this.btnStart.Click += new System.EventHandler(this.btnStart_Click);
+ //
+ // lbxMsg
+ //
+ this.lbxMsg.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.lbxMsg.FormattingEnabled = true;
+ this.lbxMsg.ItemHeight = 12;
+ this.lbxMsg.Location = new System.Drawing.Point(12, 59);
+ this.lbxMsg.Name = "lbxMsg";
+ this.lbxMsg.Size = new System.Drawing.Size(465, 256);
+ this.lbxMsg.TabIndex = 10;
+ this.lbxMsg.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.lbxMsg_KeyPress);
+ //
+ // txtSend
+ //
+ this.txtSend.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.txtSend.Location = new System.Drawing.Point(12, 327);
+ this.txtSend.Name = "txtSend";
+ this.txtSend.Size = new System.Drawing.Size(413, 21);
+ this.txtSend.TabIndex = 12;
+ this.txtSend.Text = "text to be sent";
+ //
+ // btnSend
+ //
+ this.btnSend.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnSend.Location = new System.Drawing.Point(431, 323);
+ this.btnSend.Name = "btnSend";
+ this.btnSend.Size = new System.Drawing.Size(47, 26);
+ this.btnSend.TabIndex = 13;
+ this.btnSend.Text = "Send";
+ this.btnSend.UseVisualStyleBackColor = true;
+ this.btnSend.Click += new System.EventHandler(this.btnSend_Click);
+ //
+ // frmClient
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(485, 355);
+ this.Controls.Add(this.btnSend);
+ this.Controls.Add(this.txtSend);
+ this.Controls.Add(this.groupBox1);
+ this.Controls.Add(this.lbxMsg);
+ this.Name = "frmClient";
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
+ this.Text = "Echo-TcpPackClient [ \'C\' - clear list box ]";
+ this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.frmClient_FormClosed);
+ this.Load += new System.EventHandler(this.frmClient_Load);
+ this.groupBox1.ResumeLayout(false);
+ this.groupBox1.PerformLayout();
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.GroupBox groupBox1;
+ private System.Windows.Forms.TextBox txtPort;
+ private System.Windows.Forms.TextBox txtIpAddress;
+ private System.Windows.Forms.Button btnStop;
+ private System.Windows.Forms.Button btnStart;
+ private System.Windows.Forms.ListBox lbxMsg;
+ private System.Windows.Forms.CheckBox cbxAsyncConn;
+ private System.Windows.Forms.TextBox txtSend;
+ private System.Windows.Forms.Button btnSend;
+
+ }
+}
+
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackClient/frmClient.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackClient/frmClient.cs
new file mode 100644
index 000000000..7dbaae73b
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackClient/frmClient.cs
@@ -0,0 +1,259 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using HPSocketCS;
+using System.Runtime.InteropServices;
+using System.IO;
+using System.Threading;
+
+namespace SSLClientNS
+{
+ public enum AppState
+ {
+ Starting, Started, Stoping, Stoped, Error
+ }
+
+ public enum StudentType
+ {
+ None, Array, List, Single,
+ }
+
+ public partial class frmClient : Form
+ {
+ private AppState appState = AppState.Stoped;
+
+ private delegate void ConnectUpdateUiDelegate();
+ private delegate void SetAppStateDelegate(AppState state);
+ private delegate void ShowMsg(string msg);
+ private ShowMsg AddMsgDelegate;
+ HPSocketCS.TcpPackClient client = new HPSocketCS.TcpPackClient();
+
+ public frmClient()
+ {
+ InitializeComponent();
+ }
+
+ private void frmClient_Load(object sender, EventArgs e)
+ {
+ try
+ {
+ // 鍔犱釜濮旀墭鏄剧ずmsg,鍥犱负on绯诲垪閮芥槸鍦ㄥ伐浣滅嚎绋嬩腑璋冪敤鐨,ui涓嶅厑璁哥洿鎺ユ搷浣
+ AddMsgDelegate = new ShowMsg(AddMsg);
+
+ // 璁剧疆client浜嬩欢
+ client.OnPrepareConnect += new TcpClientEvent.OnPrepareConnectEventHandler(OnPrepareConnect);
+ client.OnConnect += new TcpClientEvent.OnConnectEventHandler(OnConnect);
+ client.OnSend += new TcpClientEvent.OnSendEventHandler(OnSend);
+ client.OnReceive += new TcpClientEvent.OnReceiveEventHandler(OnReceive);
+ client.OnClose += new TcpClientEvent.OnCloseEventHandler(OnClose);
+
+ // 璁剧疆鍖呭ご鏍囪瘑,涓庡绔缃繚璇佷竴鑷存
+ client.PackHeaderFlag = 0xff;
+ // 璁剧疆鏈澶у皝鍖呭ぇ灏
+ client.MaxPackSize = 0x1000;
+
+ SetAppState(AppState.Stoped);
+ }
+ catch (Exception ex)
+ {
+ SetAppState(AppState.Error);
+ AddMsg(ex.Message);
+ }
+ }
+
+ private void btnStart_Click(object sender, EventArgs e)
+ {
+ try
+ {
+ String ip = this.txtIpAddress.Text.Trim();
+ ushort port = ushort.Parse(this.txtPort.Text.Trim());
+
+ // 鍐欏湪杩欎釜浣嶇疆鏄笂闈㈠彲鑳戒細寮傚父
+ SetAppState(AppState.Starting);
+
+ AddMsg(string.Format("$Client Starting ... -> ({0}:{1})", ip, port));
+
+ if (client.Connetion(ip, port, this.cbxAsyncConn.Checked))
+ {
+ if (cbxAsyncConn.Checked == false)
+ {
+ SetAppState(AppState.Started);
+ }
+
+ AddMsg(string.Format("$Client Start OK -> ({0}:{1})", ip, port));
+ }
+ else
+ {
+ SetAppState(AppState.Stoped);
+ throw new Exception(string.Format("$Client Start Error -> {0}({1})", client.ErrorMessage, client.ErrorCode));
+ }
+ }
+ catch (Exception ex)
+ {
+ AddMsg(ex.Message);
+ }
+ }
+
+ private void btnStop_Click(object sender, EventArgs e)
+ {
+
+ // 鍋滄鏈嶅姟
+ AddMsg("$Server Stop");
+ if (client.Stop())
+ {
+ SetAppState(AppState.Stoped);
+ }
+ else
+ {
+ AddMsg(string.Format("$Stop Error -> {0}({1})", client.ErrorMessage, client.ErrorCode));
+ }
+ }
+
+ private void btnSend_Click(object sender, EventArgs e)
+ {
+ try
+ {
+ string send = this.txtSend.Text;
+ if (send.Length == 0)
+ {
+ return;
+ }
+
+ byte[] bytes = Encoding.Default.GetBytes(send);
+ IntPtr connId = client.ConnectionId;
+
+ // 鍙戦
+ if (client.Send(bytes, bytes.Length))
+ {
+ AddMsg(string.Format("$ ({0}) Send OK --> {1}", connId, send));
+ }
+ else
+ {
+ AddMsg(string.Format("$ ({0}) Send Fail --> {1} ({2})", connId, send, bytes.Length));
+ }
+
+ }
+ catch (Exception ex)
+ {
+ AddMsg(string.Format("$ Send Fail --> msg ({0})", ex.Message));
+ }
+
+ }
+
+ private void lbxMsg_KeyPress(object sender, KeyPressEventArgs e)
+ {
+
+ // 娓呯悊listbox
+ if (e.KeyChar == 'c' || e.KeyChar == 'C')
+ {
+ this.lbxMsg.Items.Clear();
+ }
+ }
+
+ void ConnectUpdateUi()
+ {
+ if (this.cbxAsyncConn.Checked == true)
+ {
+ SetAppState(AppState.Started);
+ }
+ }
+
+ HandleResult OnPrepareConnect(TcpClient sender, uint socket)
+ {
+ return HandleResult.Ok;
+ }
+
+ HandleResult OnConnect(TcpClient sender)
+ {
+ // 宸茶繛鎺 鍒拌揪涓娆
+
+ // 濡傛灉鏄紓姝ヨ仈鎺,鏇存柊鐣岄潰鐘舵
+ this.Invoke(new ConnectUpdateUiDelegate(ConnectUpdateUi));
+
+ AddMsg(string.Format(" > [{0},OnConnect]", sender.ConnectionId));
+
+ return HandleResult.Ok;
+ }
+
+ HandleResult OnSend(TcpClient sender, byte[] bytes)
+ {
+ // 瀹㈡埛绔彂鏁版嵁浜
+ AddMsg(string.Format(" > [{0},OnSend] -> ({1} bytes)", sender.ConnectionId, bytes.Length));
+
+ return HandleResult.Ok;
+ }
+
+ HandleResult OnReceive(TcpClient sender, byte[] bytes)
+ {
+ // 鏁版嵁鍒拌揪浜
+
+ AddMsg(string.Format(" > [{0},OnReceive] -> ({1} bytes)", sender.ConnectionId, bytes.Length));
+
+ return HandleResult.Ok;
+ }
+
+ HandleResult OnClose(TcpClient sender, SocketOperation enOperation, int errorCode)
+ {
+ if (errorCode == 0)
+ // 杩炴帴鍏抽棴浜
+ AddMsg(string.Format(" > [{0},OnClose]", sender.ConnectionId));
+ else
+ // 鍑洪敊浜
+ AddMsg(string.Format(" > [{0},OnError] -> OP:{1},CODE:{2}", sender.ConnectionId, enOperation, errorCode));
+
+ // 閫氱煡鐣岄潰,鍙鐞嗕簡杩炴帴閿欒,涔熸病杩涜鏄笉鏄繛鎺ラ敊璇殑鍒ゆ柇,鎵浠ユ湁閿欒灏变細璁剧疆鐣岄潰
+ // 鐢熶骇鐜璇疯嚜宸辨帶鍒
+ this.Invoke(new SetAppStateDelegate(SetAppState), AppState.Stoped);
+
+ return HandleResult.Ok;
+ }
+
+ ///
+ /// 璁剧疆绋嬪簭鐘舵
+ ///
+ ///
+ void SetAppState(AppState state)
+ {
+ appState = state;
+ this.btnStart.Enabled = (appState == AppState.Stoped);
+ this.btnStop.Enabled = (appState == AppState.Started);
+ this.txtIpAddress.Enabled = (appState == AppState.Stoped);
+ this.txtPort.Enabled = (appState == AppState.Stoped);
+ this.cbxAsyncConn.Enabled = (appState == AppState.Stoped);
+ this.btnSend.Enabled = (appState == AppState.Started);
+ }
+
+ ///
+ /// 寰listbox鍔犱竴鏉¢」鐩
+ ///
+ ///
+ void AddMsg(string msg)
+ {
+ if (this.lbxMsg.InvokeRequired)
+ {
+ // 寰堝竻鐨勮皟鑷繁
+ this.lbxMsg.Invoke(AddMsgDelegate, msg);
+ }
+ else
+ {
+ if (this.lbxMsg.Items.Count > 100)
+ {
+ this.lbxMsg.Items.RemoveAt(0);
+ }
+ this.lbxMsg.Items.Add(msg);
+ this.lbxMsg.TopIndex = this.lbxMsg.Items.Count - (int)(this.lbxMsg.Height / this.lbxMsg.ItemHeight);
+ }
+ }
+
+ private void frmClient_FormClosed(object sender, FormClosedEventArgs e)
+ {
+ client.Destroy();
+ }
+
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackClient/frmClient.resx b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackClient/frmClient.resx
new file mode 100644
index 000000000..1af7de150
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackClient/frmClient.resx
@@ -0,0 +1,120 @@
+锘
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackClient/obj/x64/Release/DesignTimeResolveAssemblyReferencesInput.cache b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackClient/obj/x64/Release/DesignTimeResolveAssemblyReferencesInput.cache
new file mode 100644
index 000000000..05573ac1a
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackClient/obj/x64/Release/DesignTimeResolveAssemblyReferencesInput.cache differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackClient/obj/x64/Release/SSLClientNS.frmClient.resources b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackClient/obj/x64/Release/SSLClientNS.frmClient.resources
new file mode 100644
index 000000000..6c05a9776
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackClient/obj/x64/Release/SSLClientNS.frmClient.resources differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackClient/obj/x64/Release/TcpPackClient.Properties.Resources.resources b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackClient/obj/x64/Release/TcpPackClient.Properties.Resources.resources
new file mode 100644
index 000000000..6c05a9776
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackClient/obj/x64/Release/TcpPackClient.Properties.Resources.resources differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackClient/obj/x64/Release/TcpPackClient.csproj.FileListAbsolute.txt b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackClient/obj/x64/Release/TcpPackClient.csproj.FileListAbsolute.txt
new file mode 100644
index 000000000..4c2cc78d6
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackClient/obj/x64/Release/TcpPackClient.csproj.FileListAbsolute.txt
@@ -0,0 +1,7 @@
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\bin\x64\Release\TcpPackClient.exe
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\bin\x64\Release\TcpPackClient.pdb
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpPackClient\obj\x64\Release\SSLClientNS.frmClient.resources
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpPackClient\obj\x64\Release\TcpPackClient.Properties.Resources.resources
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpPackClient\obj\x64\Release\TcpPackClient.csproj.GenerateResource.Cache
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpPackClient\obj\x64\Release\TcpPackClient.exe
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpPackClient\obj\x64\Release\TcpPackClient.pdb
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackClient/obj/x64/Release/TcpPackClient.csproj.GenerateResource.Cache b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackClient/obj/x64/Release/TcpPackClient.csproj.GenerateResource.Cache
new file mode 100644
index 000000000..6d9e3e97d
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackClient/obj/x64/Release/TcpPackClient.csproj.GenerateResource.Cache differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackClient/obj/x64/Release/TcpPackClient.exe b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackClient/obj/x64/Release/TcpPackClient.exe
new file mode 100644
index 000000000..9792b262b
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackClient/obj/x64/Release/TcpPackClient.exe differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackClient/obj/x64/Release/TempPE/Properties.Resources.Designer.cs.dll b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackClient/obj/x64/Release/TempPE/Properties.Resources.Designer.cs.dll
new file mode 100644
index 000000000..9858b1f37
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackClient/obj/x64/Release/TempPE/Properties.Resources.Designer.cs.dll differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackClient/obj/x86/Release/DesignTimeResolveAssemblyReferencesInput.cache b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackClient/obj/x86/Release/DesignTimeResolveAssemblyReferencesInput.cache
new file mode 100644
index 000000000..a6c42f236
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackClient/obj/x86/Release/DesignTimeResolveAssemblyReferencesInput.cache differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackClient/obj/x86/Release/SSLClientNS.frmClient.resources b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackClient/obj/x86/Release/SSLClientNS.frmClient.resources
new file mode 100644
index 000000000..6c05a9776
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackClient/obj/x86/Release/SSLClientNS.frmClient.resources differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackClient/obj/x86/Release/TcpPackClient.Properties.Resources.resources b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackClient/obj/x86/Release/TcpPackClient.Properties.Resources.resources
new file mode 100644
index 000000000..6c05a9776
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackClient/obj/x86/Release/TcpPackClient.Properties.Resources.resources differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackClient/obj/x86/Release/TcpPackClient.csproj.FileListAbsolute.txt b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackClient/obj/x86/Release/TcpPackClient.csproj.FileListAbsolute.txt
new file mode 100644
index 000000000..d47c3821a
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackClient/obj/x86/Release/TcpPackClient.csproj.FileListAbsolute.txt
@@ -0,0 +1,7 @@
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\bin\x86\Release\TcpPackClient.exe
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\bin\x86\Release\TcpPackClient.pdb
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpPackClient\obj\x86\Release\SSLClientNS.frmClient.resources
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpPackClient\obj\x86\Release\TcpPackClient.Properties.Resources.resources
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpPackClient\obj\x86\Release\TcpPackClient.csproj.GenerateResource.Cache
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpPackClient\obj\x86\Release\TcpPackClient.exe
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpPackClient\obj\x86\Release\TcpPackClient.pdb
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackClient/obj/x86/Release/TcpPackClient.csproj.GenerateResource.Cache b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackClient/obj/x86/Release/TcpPackClient.csproj.GenerateResource.Cache
new file mode 100644
index 000000000..6d9e3e97d
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackClient/obj/x86/Release/TcpPackClient.csproj.GenerateResource.Cache differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackClient/obj/x86/Release/TcpPackClient.exe b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackClient/obj/x86/Release/TcpPackClient.exe
new file mode 100644
index 000000000..3816eba17
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackClient/obj/x86/Release/TcpPackClient.exe differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackServer/Program.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackServer/Program.cs
new file mode 100644
index 000000000..4709309e1
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackServer/Program.cs
@@ -0,0 +1,21 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Windows.Forms;
+
+namespace SSLServerNS
+{
+ static class Program
+ {
+ ///
+ /// 搴旂敤绋嬪簭鐨勪富鍏ュ彛鐐广
+ ///
+ [STAThread]
+ static void Main()
+ {
+ Application.EnableVisualStyles();
+ Application.SetCompatibleTextRenderingDefault(false);
+ Application.Run(new frmServer());
+ }
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackServer/Properties/AssemblyInfo.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackServer/Properties/AssemblyInfo.cs
new file mode 100644
index 000000000..4b7bccb2d
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackServer/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+锘縰sing System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 鏈夊叧绋嬪簭闆嗙殑甯歌淇℃伅閫氳繃浠ヤ笅
+// 鐗规ч泦鎺у埗銆傛洿鏀硅繖浜涚壒鎬у煎彲淇敼
+// 涓庣▼搴忛泦鍏宠仈鐨勪俊鎭
+[assembly: AssemblyTitle("Server")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Server")]
+[assembly: AssemblyCopyright("Copyright 漏 2014")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 灏 ComVisible 璁剧疆涓 false 浣挎绋嬪簭闆嗕腑鐨勭被鍨
+// 瀵 COM 缁勪欢涓嶅彲瑙併傚鏋滈渶瑕佷粠 COM 璁块棶姝ょ▼搴忛泦涓殑绫诲瀷锛
+// 鍒欏皢璇ョ被鍨嬩笂鐨 ComVisible 鐗规ц缃负 true銆
+[assembly: ComVisible(false)]
+
+// 濡傛灉姝ら」鐩悜 COM 鍏紑锛屽垯涓嬪垪 GUID 鐢ㄤ簬绫诲瀷搴撶殑 ID
+[assembly: Guid("a8f79261-fd62-4f4b-aed5-01bf44660ad1")]
+
+// 绋嬪簭闆嗙殑鐗堟湰淇℃伅鐢变笅闈㈠洓涓肩粍鎴:
+//
+// 涓荤増鏈
+// 娆$増鏈
+// 鍐呴儴鐗堟湰鍙
+// 淇鍙
+//
+// 鍙互鎸囧畾鎵鏈夎繖浜涘硷紝涔熷彲浠ヤ娇鐢ㄢ滃唴閮ㄧ増鏈彿鈥濆拰鈥滀慨璁㈠彿鈥濈殑榛樿鍊硷紝
+// 鏂规硶鏄寜濡備笅鎵绀轰娇鐢ㄢ*鈥:
+
+[assembly: AssemblyVersion("3.5.2")]
+[assembly: AssemblyFileVersion("3.5.2")]
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackServer/Properties/Resources.Designer.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackServer/Properties/Resources.Designer.cs
new file mode 100644
index 000000000..adf89766a
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackServer/Properties/Resources.Designer.cs
@@ -0,0 +1,63 @@
+锘//------------------------------------------------------------------------------
+//
+// 姝や唬鐮佺敱宸ュ叿鐢熸垚銆
+// 杩愯鏃剁増鏈:4.0.30319.42000
+//
+// 瀵规鏂囦欢鐨勬洿鏀瑰彲鑳戒細瀵艰嚧涓嶆纭殑琛屼负锛屽苟涓斿鏋
+// 閲嶆柊鐢熸垚浠g爜锛岃繖浜涙洿鏀瑰皢浼氫涪澶便
+//
+//------------------------------------------------------------------------------
+
+namespace TcpPackServer.Properties {
+ using System;
+
+
+ ///
+ /// 涓涓己绫诲瀷鐨勮祫婧愮被锛岀敤浜庢煡鎵炬湰鍦板寲鐨勫瓧绗︿覆绛夈
+ ///
+ // 姝ょ被鏄敱 StronglyTypedResourceBuilder
+ // 绫婚氳繃绫讳技浜 ResGen 鎴 Visual Studio 鐨勫伐鍏疯嚜鍔ㄧ敓鎴愮殑銆
+ // 鑻ヨ娣诲姞鎴栫Щ闄ゆ垚鍛橈紝璇风紪杈 .ResX 鏂囦欢锛岀劧鍚庨噸鏂拌繍琛 ResGen
+ // (浠 /str 浣滀负鍛戒护閫夐」)锛屾垨閲嶆柊鐢熸垚 VS 椤圭洰銆
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ internal class Resources {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources() {
+ }
+
+ ///
+ /// 杩斿洖姝ょ被浣跨敤鐨勭紦瀛樼殑 ResourceManager 瀹炰緥銆
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager {
+ get {
+ if (object.ReferenceEquals(resourceMan, null)) {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("TcpPackServer.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// 浣跨敤姝ゅ己绫诲瀷璧勬簮绫伙紝涓烘墍鏈夎祫婧愭煡鎵
+ /// 閲嶅啓褰撳墠绾跨▼鐨 CurrentUICulture 灞炴с
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackServer/Properties/Resources.resx b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackServer/Properties/Resources.resx
new file mode 100644
index 000000000..af7dbebba
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackServer/Properties/Resources.resx
@@ -0,0 +1,117 @@
+锘
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackServer/Properties/Settings.Designer.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackServer/Properties/Settings.Designer.cs
new file mode 100644
index 000000000..e4d003d9d
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackServer/Properties/Settings.Designer.cs
@@ -0,0 +1,26 @@
+锘//------------------------------------------------------------------------------
+//
+// 姝や唬鐮佺敱宸ュ叿鐢熸垚銆
+// 杩愯鏃剁増鏈:4.0.30319.42000
+//
+// 瀵规鏂囦欢鐨勬洿鏀瑰彲鑳戒細瀵艰嚧涓嶆纭殑琛屼负锛屽苟涓斿鏋
+// 閲嶆柊鐢熸垚浠g爜锛岃繖浜涙洿鏀瑰皢浼氫涪澶便
+//
+//------------------------------------------------------------------------------
+
+namespace TcpPackServer.Properties {
+
+
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")]
+ internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+
+ private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+ public static Settings Default {
+ get {
+ return defaultInstance;
+ }
+ }
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackServer/Properties/Settings.settings b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackServer/Properties/Settings.settings
new file mode 100644
index 000000000..39645652a
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackServer/Properties/Settings.settings
@@ -0,0 +1,7 @@
+锘
+
+
+
+
+
+
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackServer/TcpPackServer.csproj b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackServer/TcpPackServer.csproj
new file mode 100644
index 000000000..b4272e2d5
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackServer/TcpPackServer.csproj
@@ -0,0 +1,122 @@
+锘
+
+
+ Debug
+ x86
+ 8.0.30703
+ 2.0
+ {2C7A6E29-980B-4A4C-9645-E2CA26FCEAAC}
+ WinExe
+ Properties
+ TcpPackServer
+ TcpPackServer
+ v4.0
+ Client
+ 512
+
+
+ x86
+ true
+ full
+ false
+ ..\bin\x86\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ x86
+ pdbonly
+ true
+ ..\bin\x86\Release\
+ TRACE
+ prompt
+ 4
+
+
+ true
+ ..\bin\x64\Debug\
+ DEBUG;TRACE
+ full
+ x64
+ ..\bin\Debug\TcpServer.exe.CodeAnalysisLog.xml
+ true
+ GlobalSuppressions.cs
+ prompt
+ MinimumRecommendedRules.ruleset
+ ;D:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets
+ ;D:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules
+
+
+ ..\bin\x64\Release\
+ TRACE
+ true
+ pdbonly
+ x64
+ ..\bin\Release\TcpServer.exe.CodeAnalysisLog.xml
+ true
+ GlobalSuppressions.cs
+ prompt
+ MinimumRecommendedRules.ruleset
+ ;D:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets
+ ;D:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Form
+
+
+ frmServer.cs
+
+
+
+
+ frmServer.cs
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+ Designer
+
+
+ True
+ Resources.resx
+ True
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
+ True
+ Settings.settings
+ True
+
+
+
+
+ {DFA935E2-CF37-4E26-B697-D7F3DEE19DD8}
+ HPSocketCS
+
+
+
+
+
\ No newline at end of file
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackServer/frmServer.Designer.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackServer/frmServer.Designer.cs
new file mode 100644
index 000000000..28f76f2a9
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackServer/frmServer.Designer.cs
@@ -0,0 +1,169 @@
+锘縩amespace SSLServerNS
+{
+ partial class frmServer
+ {
+ ///
+ /// 蹇呴渶鐨勮璁″櫒鍙橀噺銆
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// 娓呯悊鎵鏈夋鍦ㄤ娇鐢ㄧ殑璧勬簮銆
+ ///
+ /// 濡傛灉搴旈噴鏀炬墭绠¤祫婧愶紝涓 true锛涘惁鍒欎负 false銆
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows 绐椾綋璁捐鍣ㄧ敓鎴愮殑浠g爜
+
+ ///
+ /// 璁捐鍣ㄦ敮鎸佹墍闇鐨勬柟娉 - 涓嶈
+ /// 浣跨敤浠g爜缂栬緫鍣ㄤ慨鏀规鏂规硶鐨勫唴瀹广
+ ///
+ private void InitializeComponent()
+ {
+ this.lbxMsg = new System.Windows.Forms.ListBox();
+ this.groupBox1 = new System.Windows.Forms.GroupBox();
+ this.label1 = new System.Windows.Forms.Label();
+ this.btnDisconn = new System.Windows.Forms.Button();
+ this.txtDisConn = new System.Windows.Forms.TextBox();
+ this.txtPort = new System.Windows.Forms.TextBox();
+ this.txtIpAddress = new System.Windows.Forms.TextBox();
+ this.btnStop = new System.Windows.Forms.Button();
+ this.btnStart = new System.Windows.Forms.Button();
+ this.groupBox1.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // lbxMsg
+ //
+ this.lbxMsg.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.lbxMsg.FormattingEnabled = true;
+ this.lbxMsg.ItemHeight = 12;
+ this.lbxMsg.Location = new System.Drawing.Point(11, 62);
+ this.lbxMsg.Name = "lbxMsg";
+ this.lbxMsg.Size = new System.Drawing.Size(465, 304);
+ this.lbxMsg.TabIndex = 4;
+ this.lbxMsg.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.lbxMsg_KeyPress);
+ //
+ // groupBox1
+ //
+ this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.groupBox1.Controls.Add(this.label1);
+ this.groupBox1.Controls.Add(this.btnDisconn);
+ this.groupBox1.Controls.Add(this.txtDisConn);
+ this.groupBox1.Controls.Add(this.txtPort);
+ this.groupBox1.Controls.Add(this.txtIpAddress);
+ this.groupBox1.Controls.Add(this.btnStop);
+ this.groupBox1.Controls.Add(this.btnStart);
+ this.groupBox1.Location = new System.Drawing.Point(12, 2);
+ this.groupBox1.Name = "groupBox1";
+ this.groupBox1.Size = new System.Drawing.Size(462, 47);
+ this.groupBox1.TabIndex = 9;
+ this.groupBox1.TabStop = false;
+ //
+ // label1
+ //
+ this.label1.AutoSize = true;
+ this.label1.Location = new System.Drawing.Point(132, 22);
+ this.label1.Name = "label1";
+ this.label1.Size = new System.Drawing.Size(41, 12);
+ this.label1.TabIndex = 15;
+ this.label1.Text = "CONNID";
+ //
+ // btnDisconn
+ //
+ this.btnDisconn.Location = new System.Drawing.Point(223, 15);
+ this.btnDisconn.Name = "btnDisconn";
+ this.btnDisconn.Size = new System.Drawing.Size(33, 26);
+ this.btnDisconn.TabIndex = 14;
+ this.btnDisconn.Text = "Dis";
+ this.btnDisconn.UseVisualStyleBackColor = true;
+ this.btnDisconn.Click += new System.EventHandler(this.btnDisconn_Click);
+ //
+ // txtDisConn
+ //
+ this.txtDisConn.Location = new System.Drawing.Point(178, 18);
+ this.txtDisConn.Name = "txtDisConn";
+ this.txtDisConn.Size = new System.Drawing.Size(40, 21);
+ this.txtDisConn.TabIndex = 13;
+ this.txtDisConn.TextChanged += new System.EventHandler(this.txtDisConn_TextChanged);
+ //
+ // txtPort
+ //
+ this.txtPort.Location = new System.Drawing.Point(88, 18);
+ this.txtPort.Name = "txtPort";
+ this.txtPort.Size = new System.Drawing.Size(40, 21);
+ this.txtPort.TabIndex = 12;
+ this.txtPort.Text = "5555";
+ //
+ // txtIpAddress
+ //
+ this.txtIpAddress.Location = new System.Drawing.Point(11, 18);
+ this.txtIpAddress.Name = "txtIpAddress";
+ this.txtIpAddress.Size = new System.Drawing.Size(71, 21);
+ this.txtIpAddress.TabIndex = 11;
+ this.txtIpAddress.Text = "0.0.0.0";
+ //
+ // btnStop
+ //
+ this.btnStop.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnStop.Location = new System.Drawing.Point(403, 15);
+ this.btnStop.Name = "btnStop";
+ this.btnStop.Size = new System.Drawing.Size(47, 26);
+ this.btnStop.TabIndex = 10;
+ this.btnStop.Text = "Stop";
+ this.btnStop.UseVisualStyleBackColor = true;
+ this.btnStop.Click += new System.EventHandler(this.btnStop_Click);
+ //
+ // btnStart
+ //
+ this.btnStart.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnStart.Location = new System.Drawing.Point(350, 15);
+ this.btnStart.Name = "btnStart";
+ this.btnStart.Size = new System.Drawing.Size(47, 26);
+ this.btnStart.TabIndex = 9;
+ this.btnStart.Text = "Start";
+ this.btnStart.UseVisualStyleBackColor = true;
+ this.btnStart.Click += new System.EventHandler(this.btnStart_Click);
+ //
+ // frmServer
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(486, 377);
+ this.Controls.Add(this.groupBox1);
+ this.Controls.Add(this.lbxMsg);
+ this.Name = "frmServer";
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
+ this.Text = "Form1";
+ this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.frmServer_FormClosed);
+ this.Load += new System.EventHandler(this.Form1_Load);
+ this.groupBox1.ResumeLayout(false);
+ this.groupBox1.PerformLayout();
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.ListBox lbxMsg;
+ private System.Windows.Forms.GroupBox groupBox1;
+ private System.Windows.Forms.Label label1;
+ private System.Windows.Forms.Button btnDisconn;
+ private System.Windows.Forms.TextBox txtDisConn;
+ private System.Windows.Forms.TextBox txtPort;
+ private System.Windows.Forms.Button btnStop;
+ private System.Windows.Forms.Button btnStart;
+ private System.Windows.Forms.TextBox txtIpAddress;
+ }
+}
+
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackServer/frmServer.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackServer/frmServer.cs
new file mode 100644
index 000000000..8c067f457
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackServer/frmServer.cs
@@ -0,0 +1,308 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using System.Runtime.InteropServices;
+using HPSocketCS;
+
+namespace SSLServerNS
+{
+ public enum AppState
+ {
+ Starting, Started, Stoping, Stoped, Error
+ }
+
+ public partial class frmServer : Form
+ {
+ private AppState appState = AppState.Stoped;
+
+ private delegate void ShowMsg(string msg);
+ private ShowMsg AddMsgDelegate;
+
+ HPSocketCS.TcpPackServer server = new HPSocketCS.TcpPackServer();
+
+ private string title = "Echo TcpPackServer [ 'C' - clear list box ]";
+ public frmServer()
+ {
+ InitializeComponent();
+ }
+
+ private void Form1_Load(object sender, EventArgs e)
+ {
+ try
+ {
+
+ this.Text = title;
+ // 鏈満娴嬭瘯娌″繀瑕佹敼鍦板潃,鏈夐渶姹傝娉ㄩ噴鎴栧垹闄
+ this.txtIpAddress.ReadOnly = true;
+
+ // 鍔犱釜濮旀墭鏄剧ずmsg,鍥犱负on绯诲垪閮芥槸鍦ㄥ伐浣滅嚎绋嬩腑璋冪敤鐨,ui涓嶅厑璁哥洿鎺ユ搷浣
+ AddMsgDelegate = new ShowMsg(AddMsg);
+
+ // 璁剧疆鏈嶅姟鍣ㄤ簨浠
+ server.OnPrepareListen += new TcpServerEvent.OnPrepareListenEventHandler(OnPrepareListen);
+ server.OnAccept += new TcpServerEvent.OnAcceptEventHandler(OnAccept);
+ server.OnSend += new TcpServerEvent.OnSendEventHandler(OnSend);
+ server.OnReceive += new TcpServerEvent.OnReceiveEventHandler(OnReceive);
+ server.OnClose += new TcpServerEvent.OnCloseEventHandler(OnClose);
+ server.OnShutdown += new TcpServerEvent.OnShutdownEventHandler(OnShutdown);
+
+ // 璁剧疆鍖呭ご鏍囪瘑,涓庡绔缃繚璇佷竴鑷存
+ server.PackHeaderFlag = 0xff;
+ // 璁剧疆鏈澶у皝鍖呭ぇ灏
+ server.MaxPackSize = 0x1000;
+
+ SetAppState(AppState.Stoped);
+ }
+ catch (Exception ex)
+ {
+ SetAppState(AppState.Error);
+ AddMsg(ex.Message);
+ }
+ }
+
+ private void btnStart_Click(object sender, EventArgs e)
+ {
+ try
+ {
+ String ip = this.txtIpAddress.Text.Trim();
+ ushort port = ushort.Parse(this.txtPort.Text.Trim());
+
+ // 鍐欏湪杩欎釜浣嶇疆鏄笂闈㈠彲鑳戒細寮傚父
+ SetAppState(AppState.Starting);
+ server.IpAddress = ip;
+ server.Port = port;
+ // 鍚姩鏈嶅姟
+ if (server.Start())
+ {
+ this.Text = string.Format("{2} - ({0}:{1})", ip, port, title);
+ SetAppState(AppState.Started);
+ AddMsg(string.Format("$Server Start OK -> ({0}:{1})", ip, port));
+ }
+ else
+ {
+ SetAppState(AppState.Stoped);
+ throw new Exception(string.Format("$Server Start Error -> {0}({1})", server.ErrorMessage, server.ErrorCode));
+ }
+ }
+ catch (Exception ex)
+ {
+ AddMsg(ex.Message);
+ }
+ }
+
+ private void btnStop_Click(object sender, EventArgs e)
+ {
+ SetAppState(AppState.Stoping);
+
+ // 鍋滄鏈嶅姟
+ AddMsg("$Server Stop");
+ if (server.Stop())
+ {
+ this.Text = title;
+ SetAppState(AppState.Stoped);
+ }
+ else
+ {
+ AddMsg(string.Format("$Stop Error -> {0}({1})", server.ErrorMessage, server.ErrorCode));
+ }
+ }
+
+ private void btnDisconn_Click(object sender, EventArgs e)
+ {
+ try
+ {
+ IntPtr connId = (IntPtr)Convert.ToInt32(this.txtDisConn.Text.Trim());
+ // 鏂紑鎸囧畾瀹㈡埛
+ if (server.Disconnect(connId, true))
+ {
+ AddMsg(string.Format("$({0}) Disconnect OK", connId));
+ }
+ else
+ {
+ throw new Exception(string.Format("Disconnect({0}) Error", connId));
+ }
+ }
+ catch (Exception ex)
+ {
+ AddMsg(ex.Message);
+ }
+ }
+
+
+ HandleResult OnPrepareListen(IntPtr soListen)
+ {
+ // 鐩戝惉浜嬩欢鍒拌揪浜,涓鑸病浠涔堢敤鍚?
+
+ return HandleResult.Ok;
+ }
+
+ HandleResult OnAccept(IntPtr connId, IntPtr pClient)
+ {
+ // 瀹㈡埛杩涘叆浜
+
+
+ // 鑾峰彇瀹㈡埛绔痠p鍜岀鍙
+ string ip = string.Empty;
+ ushort port = 0;
+ if (server.GetRemoteAddress(connId, ref ip, ref port))
+ {
+ AddMsg(string.Format(" > [{0},OnAccept] -> PASS({1}:{2})", connId, ip.ToString(), port));
+ }
+ else
+ {
+ AddMsg(string.Format(" > [{0},OnAccept] -> Server_GetClientAddress() Error", connId));
+ }
+
+
+ // 璁剧疆闄勫姞鏁版嵁
+ ClientInfo ci = new ClientInfo();
+ ci.ConnId = connId;
+ ci.IpAddress = ip;
+ ci.Port = port;
+ if (server.SetConnectionExtra(connId, ci) == false)
+ {
+ AddMsg(string.Format(" > [{0},OnAccept] -> SetConnectionExtra fail", connId));
+ }
+
+ return HandleResult.Ok;
+ }
+
+ HandleResult OnSend(IntPtr connId, byte[] bytes)
+ {
+ // 鏈嶅姟鍣ㄥ彂鏁版嵁浜
+
+ AddMsg(string.Format(" > [{0},OnSend] -> ({1} bytes)", connId, bytes.Length));
+
+ return HandleResult.Ok;
+ }
+
+ HandleResult OnReceive(IntPtr connId, byte[] bytes)
+ {
+ // 鏁版嵁鍒拌揪浜
+ try
+ {
+ // 鑾峰彇闄勫姞鏁版嵁
+ IntPtr clientPtr = IntPtr.Zero;
+ if (server.GetConnectionExtra(connId, ref clientPtr))
+ {
+ // ci 灏辨槸accept閲屼紶鍏ョ殑闄勫姞鏁版嵁浜
+ ClientInfo ci = (ClientInfo)Marshal.PtrToStructure(clientPtr, typeof(ClientInfo));
+ AddMsg(string.Format(" > [{0},OnReceive] -> {1}:{2} ({3} bytes)", ci.ConnId, ci.IpAddress, ci.Port, bytes.Length));
+ }
+ else
+ {
+ AddMsg(string.Format(" > [{0},OnReceive] -> ({1} bytes)", connId, bytes.Length));
+ }
+
+ if (server.Send(connId, bytes, bytes.Length))
+ {
+ return HandleResult.Ok;
+ }
+
+ return HandleResult.Error;
+ }
+ catch (Exception)
+ {
+
+ return HandleResult.Ignore;
+ }
+ }
+
+ HandleResult OnClose(IntPtr connId, SocketOperation enOperation, int errorCode)
+ {
+ if(errorCode == 0)
+ AddMsg(string.Format(" > [{0},OnClose]", connId));
+ else
+ AddMsg(string.Format(" > [{0},OnError] -> OP:{1},CODE:{2}", connId, enOperation, errorCode));
+ // return HPSocketSdk.HandleResult.Ok;
+
+ if (server.SetConnectionExtra(connId, null) == false)
+ {
+ AddMsg(string.Format(" > [{0},OnClose] -> SetConnectionExtra({0}, null) fail", connId));
+ }
+
+ return HandleResult.Ok;
+ }
+
+ HandleResult OnShutdown()
+ {
+ // 鏈嶅姟鍏抽棴浜
+
+
+ AddMsg(" > [OnShutdown]");
+ return HandleResult.Ok;
+ }
+
+
+
+ ///
+ /// 璁剧疆绋嬪簭鐘舵
+ ///
+ ///
+ void SetAppState(AppState state)
+ {
+ appState = state;
+ this.btnStart.Enabled = (appState == AppState.Stoped);
+ this.btnStop.Enabled = (appState == AppState.Started);
+ this.txtIpAddress.Enabled = (appState == AppState.Stoped);
+ this.txtPort.Enabled = (appState == AppState.Stoped);
+ this.txtDisConn.Enabled = (appState == AppState.Started);
+ this.btnDisconn.Enabled = (appState == AppState.Started && this.txtDisConn.Text.Length > 0);
+ }
+
+ ///
+ /// 寰listbox鍔犱竴鏉¢」鐩
+ ///
+ ///
+ void AddMsg(string msg)
+ {
+ if (this.lbxMsg.InvokeRequired)
+ {
+ // 寰堝竻鐨勮皟鑷繁
+ this.lbxMsg.Invoke(AddMsgDelegate, msg);
+ }
+ else
+ {
+ if (this.lbxMsg.Items.Count > 100)
+ {
+ this.lbxMsg.Items.RemoveAt(0);
+ }
+ this.lbxMsg.Items.Add(msg);
+ this.lbxMsg.TopIndex = this.lbxMsg.Items.Count - (int)(this.lbxMsg.Height / this.lbxMsg.ItemHeight);
+ }
+ }
+
+ private void txtDisConn_TextChanged(object sender, EventArgs e)
+ {
+ // CONNID妗嗚鏀瑰彉浜嬩欢
+ this.btnDisconn.Enabled = (appState == AppState.Started && this.txtDisConn.Text.Length > 0);
+ }
+
+ private void lbxMsg_KeyPress(object sender, KeyPressEventArgs e)
+ {
+ // 娓呯悊listbox
+ if (e.KeyChar == 'c' || e.KeyChar == 'C')
+ {
+ this.lbxMsg.Items.Clear();
+ }
+ }
+
+ private void frmServer_FormClosed(object sender, FormClosedEventArgs e)
+ {
+ server.Destroy();
+ }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ public class ClientInfo
+ {
+ public IntPtr ConnId { get; set; }
+ public string IpAddress { get; set; }
+ public ushort Port { get; set; }
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackServer/frmServer.resx b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackServer/frmServer.resx
new file mode 100644
index 000000000..1af7de150
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackServer/frmServer.resx
@@ -0,0 +1,120 @@
+锘
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackServer/obj/x64/Release/DesignTimeResolveAssemblyReferencesInput.cache b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackServer/obj/x64/Release/DesignTimeResolveAssemblyReferencesInput.cache
new file mode 100644
index 000000000..44b01da4d
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackServer/obj/x64/Release/DesignTimeResolveAssemblyReferencesInput.cache differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackServer/obj/x64/Release/SSLServerNS.frmServer.resources b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackServer/obj/x64/Release/SSLServerNS.frmServer.resources
new file mode 100644
index 000000000..6c05a9776
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackServer/obj/x64/Release/SSLServerNS.frmServer.resources differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackServer/obj/x64/Release/TcpPackServer.Properties.Resources.resources b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackServer/obj/x64/Release/TcpPackServer.Properties.Resources.resources
new file mode 100644
index 000000000..6c05a9776
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackServer/obj/x64/Release/TcpPackServer.Properties.Resources.resources differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackServer/obj/x64/Release/TcpPackServer.csproj.FileListAbsolute.txt b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackServer/obj/x64/Release/TcpPackServer.csproj.FileListAbsolute.txt
new file mode 100644
index 000000000..2dae974fe
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackServer/obj/x64/Release/TcpPackServer.csproj.FileListAbsolute.txt
@@ -0,0 +1,7 @@
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\bin\x64\Release\TcpPackServer.exe
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\bin\x64\Release\TcpPackServer.pdb
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpPackServer\obj\x64\Release\SSLServerNS.frmServer.resources
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpPackServer\obj\x64\Release\TcpPackServer.Properties.Resources.resources
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpPackServer\obj\x64\Release\TcpPackServer.csproj.GenerateResource.Cache
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpPackServer\obj\x64\Release\TcpPackServer.exe
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpPackServer\obj\x64\Release\TcpPackServer.pdb
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackServer/obj/x64/Release/TcpPackServer.csproj.GenerateResource.Cache b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackServer/obj/x64/Release/TcpPackServer.csproj.GenerateResource.Cache
new file mode 100644
index 000000000..e793f6a97
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackServer/obj/x64/Release/TcpPackServer.csproj.GenerateResource.Cache differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackServer/obj/x64/Release/TcpPackServer.exe b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackServer/obj/x64/Release/TcpPackServer.exe
new file mode 100644
index 000000000..d2059f77c
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackServer/obj/x64/Release/TcpPackServer.exe differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackServer/obj/x64/Release/TempPE/Properties.Resources.Designer.cs.dll b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackServer/obj/x64/Release/TempPE/Properties.Resources.Designer.cs.dll
new file mode 100644
index 000000000..e68252ea2
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackServer/obj/x64/Release/TempPE/Properties.Resources.Designer.cs.dll differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackServer/obj/x86/Release/DesignTimeResolveAssemblyReferencesInput.cache b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackServer/obj/x86/Release/DesignTimeResolveAssemblyReferencesInput.cache
new file mode 100644
index 000000000..d75cbea96
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackServer/obj/x86/Release/DesignTimeResolveAssemblyReferencesInput.cache differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackServer/obj/x86/Release/SSLServerNS.frmServer.resources b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackServer/obj/x86/Release/SSLServerNS.frmServer.resources
new file mode 100644
index 000000000..6c05a9776
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackServer/obj/x86/Release/SSLServerNS.frmServer.resources differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackServer/obj/x86/Release/TcpPackServer.Properties.Resources.resources b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackServer/obj/x86/Release/TcpPackServer.Properties.Resources.resources
new file mode 100644
index 000000000..6c05a9776
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackServer/obj/x86/Release/TcpPackServer.Properties.Resources.resources differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackServer/obj/x86/Release/TcpPackServer.csproj.FileListAbsolute.txt b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackServer/obj/x86/Release/TcpPackServer.csproj.FileListAbsolute.txt
new file mode 100644
index 000000000..26e08c0ba
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackServer/obj/x86/Release/TcpPackServer.csproj.FileListAbsolute.txt
@@ -0,0 +1,7 @@
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\bin\x86\Release\TcpPackServer.exe
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\bin\x86\Release\TcpPackServer.pdb
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpPackServer\obj\x86\Release\SSLServerNS.frmServer.resources
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpPackServer\obj\x86\Release\TcpPackServer.Properties.Resources.resources
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpPackServer\obj\x86\Release\TcpPackServer.csproj.GenerateResource.Cache
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpPackServer\obj\x86\Release\TcpPackServer.exe
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpPackServer\obj\x86\Release\TcpPackServer.pdb
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackServer/obj/x86/Release/TcpPackServer.csproj.GenerateResource.Cache b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackServer/obj/x86/Release/TcpPackServer.csproj.GenerateResource.Cache
new file mode 100644
index 000000000..e793f6a97
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackServer/obj/x86/Release/TcpPackServer.csproj.GenerateResource.Cache differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackServer/obj/x86/Release/TcpPackServer.exe b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackServer/obj/x86/Release/TcpPackServer.exe
new file mode 100644
index 000000000..6a445dfd4
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPackServer/obj/x86/Release/TcpPackServer.exe differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/Program.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/Program.cs
new file mode 100644
index 000000000..a6b0fa89c
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/Program.cs
@@ -0,0 +1,21 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Windows.Forms;
+
+namespace TcpPortForwarding
+{
+ static class Program
+ {
+ ///
+ /// 搴旂敤绋嬪簭鐨勪富鍏ュ彛鐐广
+ ///
+ [STAThread]
+ static void Main()
+ {
+ Application.EnableVisualStyles();
+ Application.SetCompatibleTextRenderingDefault(false);
+ Application.Run(new frmTcpPortForwarding());
+ }
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/Properties/AssemblyInfo.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/Properties/AssemblyInfo.cs
new file mode 100644
index 000000000..d173348fa
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+锘縰sing System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 鏈夊叧绋嬪簭闆嗙殑甯歌淇℃伅閫氳繃浠ヤ笅
+// 鐗规ч泦鎺у埗銆傛洿鏀硅繖浜涚壒鎬у煎彲淇敼
+// 涓庣▼搴忛泦鍏宠仈鐨勪俊鎭
+[assembly: AssemblyTitle("TcpProxyServer")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("TcpProxyServer")]
+[assembly: AssemblyCopyright("Copyright 漏 2014")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 灏 ComVisible 璁剧疆涓 false 浣挎绋嬪簭闆嗕腑鐨勭被鍨
+// 瀵 COM 缁勪欢涓嶅彲瑙併傚鏋滈渶瑕佷粠 COM 璁块棶姝ょ▼搴忛泦涓殑绫诲瀷锛
+// 鍒欏皢璇ョ被鍨嬩笂鐨 ComVisible 鐗规ц缃负 true銆
+[assembly: ComVisible(false)]
+
+// 濡傛灉姝ら」鐩悜 COM 鍏紑锛屽垯涓嬪垪 GUID 鐢ㄤ簬绫诲瀷搴撶殑 ID
+[assembly: Guid("83e0db2e-c90a-4cd6-871e-83181027b537")]
+
+// 绋嬪簭闆嗙殑鐗堟湰淇℃伅鐢变笅闈㈠洓涓肩粍鎴:
+//
+// 涓荤増鏈
+// 娆$増鏈
+// 鍐呴儴鐗堟湰鍙
+// 淇鍙
+//
+// 鍙互鎸囧畾鎵鏈夎繖浜涘硷紝涔熷彲浠ヤ娇鐢ㄢ滃唴閮ㄧ増鏈彿鈥濆拰鈥滀慨璁㈠彿鈥濈殑榛樿鍊硷紝
+// 鏂规硶鏄寜濡備笅鎵绀轰娇鐢ㄢ*鈥:
+
+[assembly: AssemblyVersion("3.5.2")]
+[assembly: AssemblyFileVersion("3.5.2")]
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/Properties/Resources.Designer.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/Properties/Resources.Designer.cs
new file mode 100644
index 000000000..c5b17d0bc
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/Properties/Resources.Designer.cs
@@ -0,0 +1,63 @@
+锘//------------------------------------------------------------------------------
+//
+// 姝や唬鐮佺敱宸ュ叿鐢熸垚銆
+// 杩愯鏃剁増鏈:4.0.30319.42000
+//
+// 瀵规鏂囦欢鐨勬洿鏀瑰彲鑳戒細瀵艰嚧涓嶆纭殑琛屼负锛屽苟涓斿鏋
+// 閲嶆柊鐢熸垚浠g爜锛岃繖浜涙洿鏀瑰皢浼氫涪澶便
+//
+//------------------------------------------------------------------------------
+
+namespace TcpPortForwarding.Properties {
+ using System;
+
+
+ ///
+ /// 涓涓己绫诲瀷鐨勮祫婧愮被锛岀敤浜庢煡鎵炬湰鍦板寲鐨勫瓧绗︿覆绛夈
+ ///
+ // 姝ょ被鏄敱 StronglyTypedResourceBuilder
+ // 绫婚氳繃绫讳技浜 ResGen 鎴 Visual Studio 鐨勫伐鍏疯嚜鍔ㄧ敓鎴愮殑銆
+ // 鑻ヨ娣诲姞鎴栫Щ闄ゆ垚鍛橈紝璇风紪杈 .ResX 鏂囦欢锛岀劧鍚庨噸鏂拌繍琛 ResGen
+ // (浠 /str 浣滀负鍛戒护閫夐」)锛屾垨閲嶆柊鐢熸垚 VS 椤圭洰銆
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ internal class Resources {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources() {
+ }
+
+ ///
+ /// 杩斿洖姝ょ被浣跨敤鐨勭紦瀛樼殑 ResourceManager 瀹炰緥銆
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager {
+ get {
+ if (object.ReferenceEquals(resourceMan, null)) {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("TcpPortForwarding.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// 浣跨敤姝ゅ己绫诲瀷璧勬簮绫伙紝涓烘墍鏈夎祫婧愭煡鎵
+ /// 閲嶅啓褰撳墠绾跨▼鐨 CurrentUICulture 灞炴с
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/Properties/Resources.resx b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/Properties/Resources.resx
new file mode 100644
index 000000000..af7dbebba
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/Properties/Resources.resx
@@ -0,0 +1,117 @@
+锘
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/Properties/Settings.Designer.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/Properties/Settings.Designer.cs
new file mode 100644
index 000000000..dfacfbb04
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/Properties/Settings.Designer.cs
@@ -0,0 +1,26 @@
+锘//------------------------------------------------------------------------------
+//
+// 姝や唬鐮佺敱宸ュ叿鐢熸垚銆
+// 杩愯鏃剁増鏈:4.0.30319.42000
+//
+// 瀵规鏂囦欢鐨勬洿鏀瑰彲鑳戒細瀵艰嚧涓嶆纭殑琛屼负锛屽苟涓斿鏋
+// 閲嶆柊鐢熸垚浠g爜锛岃繖浜涙洿鏀瑰皢浼氫涪澶便
+//
+//------------------------------------------------------------------------------
+
+namespace TcpPortForwarding.Properties {
+
+
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0")]
+ internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+
+ private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+ public static Settings Default {
+ get {
+ return defaultInstance;
+ }
+ }
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/Properties/Settings.settings b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/Properties/Settings.settings
new file mode 100644
index 000000000..39645652a
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/Properties/Settings.settings
@@ -0,0 +1,7 @@
+锘
+
+
+
+
+
+
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/TcpPortForwarding.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/TcpPortForwarding.cs
new file mode 100644
index 000000000..758fcd977
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/TcpPortForwarding.cs
@@ -0,0 +1,408 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HPSocketCS;
+using System.Runtime.InteropServices;
+
+namespace TcpPortForwarding
+{
+ public class TcpPortForwarding
+ {
+ ///
+ /// 缁戝畾鍦板潃
+ ///
+ public string BindAddr { get; set; }
+
+ ///
+ /// 缁戝畾绔彛
+ ///
+ public ushort BindPort { get; set; }
+
+ ///
+ /// 鐩爣鍦板潃
+ ///
+ public string TargetAddr { get; set; }
+
+ ///
+ /// 鐩爣绔彛
+ ///
+ public ushort TargetPort { get; set; }
+
+ // 涓轰簡绠鍗曠洿鎺ュ畾涔変簡涓涓敮鎸乴og杈撳嚭鐨勫鎵
+ public delegate void ShowMsg(string msg);
+ ///
+ /// 鏃ュ織杈撳嚭
+ ///
+ public ShowMsg AddMsgDelegate;
+
+ protected TcpServer server = new TcpServer();
+ protected TcpAgent agent = new TcpAgent();
+
+
+ public TcpPortForwarding()
+ {
+ // 璁剧疆鏈嶅姟鍣ㄤ簨浠
+ server.OnPrepareListen += new TcpServerEvent.OnPrepareListenEventHandler(OnServerPrepareListen);
+ server.OnAccept += new TcpServerEvent.OnAcceptEventHandler(OnServerAccept);
+ server.OnSend += new TcpServerEvent.OnSendEventHandler(OnServerSend);
+ server.OnReceive += new TcpServerEvent.OnReceiveEventHandler(OnServerReceive);
+ server.OnClose += new TcpServerEvent.OnCloseEventHandler(OnServerClose);
+ server.OnShutdown += new TcpServerEvent.OnShutdownEventHandler(OnServerShutdown);
+
+
+ // 璁剧疆浠g悊浜嬩欢
+ agent.OnPrepareConnect += new TcpAgentEvent.OnPrepareConnectEventHandler(OnAgentPrepareConnect);
+ agent.OnConnect += new TcpAgentEvent.OnConnectEventHandler(OnAgentConnect);
+ agent.OnSend += new TcpAgentEvent.OnSendEventHandler(OnAgentSend);
+ agent.OnReceive += new TcpAgentEvent.OnReceiveEventHandler(OnAgentReceive);
+ agent.OnClose += new TcpAgentEvent.OnCloseEventHandler(OnAgentClose);
+ agent.OnShutdown += new TcpAgentEvent.OnShutdownEventHandler(OnAgentShutdown);
+
+ }
+
+ public bool Start()
+ {
+ if (string.IsNullOrEmpty(BindAddr) || string.IsNullOrEmpty(TargetAddr) ||
+ BindPort == 0 || TargetPort == 0 || AddMsgDelegate == null)
+ {
+ throw new Exception("璇峰厛璁剧疆灞炴BindAddr,TargetAddr,BindPort,TargetPort,AddMsgDelegate]");
+ }
+
+ server.IpAddress = BindAddr;
+ server.Port = BindPort;
+ bool isStart = server.Start();
+ if (isStart == false)
+ {
+ AddMsg(string.Format(" > Server start fail -> {0}({1})", server.ErrorMessage, server.ErrorCode));
+ return isStart;
+ }
+
+ isStart = agent.Start(BindAddr, false);
+ if (isStart == false)
+ {
+ AddMsg(string.Format(" > Server start fail -> {0}({1})", agent.ErrorMessage, agent.ErrorCode));
+ return isStart;
+ }
+
+ return isStart;
+ }
+
+ public bool Stop()
+ {
+ return server.Stop() && agent.Stop();
+ }
+
+ private void AddMsg(string msg)
+ {
+ AddMsgDelegate(msg);
+ }
+
+
+ public bool Disconnect(IntPtr connId, bool force = true)
+ {
+ return server.Disconnect(connId, force);
+ }
+
+ //////////////////////////////Agent//////////////////////////////////////////////////
+
+ ///
+ /// 鍑嗗杩炴帴浜
+ ///
+ ///
+ ///
+ ///
+ protected virtual HandleResult OnAgentPrepareConnect(IntPtr connId, uint socket)
+ {
+ return HandleResult.Ok;
+ }
+
+ ///
+ /// 宸茶繛鎺
+ ///
+ ///
+ ///
+ protected virtual HandleResult OnAgentConnect(IntPtr connId)
+ {
+ AddMsg(string.Format(" > [{0},OnAgentConnect]", connId));
+ return HandleResult.Ok;
+ }
+
+ ///
+ /// 瀹㈡埛绔彂鏁版嵁浜
+ ///
+ ///
+ ///
+ ///
+ ///
+ protected virtual HandleResult OnAgentSend(IntPtr connId, byte[] bytes)
+ {
+ AddMsg(string.Format(" > [{0},OnAgentSend] -> ({1} bytes)", connId, bytes.Length));
+ return HandleResult.Ok;
+ }
+
+ ///
+ /// 鏁版嵁鍒拌揪浜
+ ///
+ ///
+ ///
+ ///
+ ///
+ protected virtual HandleResult OnAgentReceive(IntPtr connId, byte[] bytes)
+ {
+ // 鑾峰彇闄勫姞鏁版嵁
+ IntPtr extraPtr = IntPtr.Zero;
+ if (agent.GetConnectionExtra(connId, ref extraPtr) == false)
+ {
+ return HandleResult.Error;
+ }
+
+ ConnExtraData extra = (ConnExtraData)Marshal.PtrToStructure(extraPtr, typeof(ConnExtraData));
+ AddMsg(string.Format(" > [{0},OnAgentReceive] -> ({1} bytes)", connId, bytes.Length));
+ if (extra.Server.Send(extra.ConnIdForServer, bytes, bytes.Length) == false)
+ {
+ return HandleResult.Error;
+ }
+
+ return HandleResult.Ok;
+ }
+
+ ///
+ /// 鍑洪敊浜
+ ///
+ ///
+ ///
+ ///
+ ///
+ protected virtual HandleResult OnAgentClose(IntPtr connId, SocketOperation enOperation, int errorCode)
+ {
+ if(errorCode == 0)
+ AddMsg(string.Format(" > [{0},OnAgentClose]", connId));
+ else
+ AddMsg(string.Format(" > [{0},OnAgentError] -> OP:{1},CODE:{2}", connId, enOperation, errorCode));
+ // return HPSocketSdk.HandleResult.Ok;
+
+ // 鑾峰彇闄勫姞鏁版嵁
+ IntPtr extraPtr = IntPtr.Zero;
+ if (agent.GetConnectionExtra(connId, ref extraPtr) == false)
+ {
+ return HandleResult.Error;
+ }
+
+ ConnExtraData extra = (ConnExtraData)Marshal.PtrToStructure(extraPtr, typeof(ConnExtraData));
+
+ agent.SetConnectionExtra(connId, null);
+
+ if (extra.FreeType == 0)
+ {
+
+ // 鐢盩arget鏂紑杩炴帴,閲婃斁server杩炴帴
+ extra.FreeType = 1;
+ server.SetConnectionExtra(extra.ConnIdForServer, extra);
+ extra.Server.Disconnect(extra.ConnIdForServer);
+ }
+
+ return HandleResult.Ok;
+ }
+
+ ///
+ /// Agent鍏抽棴浜
+ ///
+ ///
+ protected virtual HandleResult OnAgentShutdown()
+ {
+ AddMsg(" > [OnAgentShutdown]");
+ return HandleResult.Ok;
+ }
+
+ //////////////////////////////Server//////////////////////////////////////////////////
+
+ ///
+ /// 鐩戝惉浜嬩欢
+ ///
+ ///
+ ///
+ protected virtual HandleResult OnServerPrepareListen(IntPtr soListen)
+ {
+ return HandleResult.Ok;
+ }
+
+ ///
+ /// 瀹㈡埛杩涘叆
+ ///
+ ///
+ ///
+ ///
+ protected virtual HandleResult OnServerAccept(IntPtr connId, IntPtr pClient)
+ {
+ // 鑾峰彇瀹㈡埛绔痠p鍜岀鍙
+ string ip = string.Empty;
+ ushort port = 0;
+ if (server.GetRemoteAddress(connId, ref ip, ref port))
+ {
+ AddMsg(string.Format(" > [{0},OnServerAccept] -> PASS({1}:{2})", connId, ip.ToString(), port));
+ }
+ else
+ {
+ AddMsg(string.Format(" > [{0},OnServerAccept] -> Server_GetClientAddress() Error", connId));
+ return HandleResult.Error;
+ }
+
+ IntPtr clientConnId = IntPtr.Zero;
+
+ // 涓娆′笉鎴愬姛鐨勪簨鍋跺皵鍙兘鍙戠敓,涓夋杩炴帴閮戒笉鎴愬姛,閭e氨鐪熻繛涓嶄笂浜
+ // 褰搒erver鏈夎繛鎺ヨ繘鍏,浣跨敤agent杩炴帴鍒扮洰鏍囨湇鍔″櫒
+ if (agent.Connect(TargetAddr, TargetPort, ref clientConnId) == false)
+ {
+ if (agent.Connect(TargetAddr, TargetPort, ref clientConnId) == false)
+ {
+ if (agent.Connect(TargetAddr, TargetPort, ref clientConnId) == false)
+ {
+ AddMsg(string.Format(" > [Client->Connect] fail -> ID:{0}", clientConnId));
+ return HandleResult.Error;
+ }
+ }
+ }
+
+
+ // 璁剧疆闄勫姞鏁版嵁
+ ConnExtraData extra = new ConnExtraData();
+ extra.ConnIdForServer = connId;
+ extra.ConnIdForClient = clientConnId;
+ extra.Server = server;
+ extra.FreeType = 0;
+ if (server.SetConnectionExtra(connId, extra) == false)
+ {
+ AddMsg(string.Format(" > [{0},OnServerAccept] -> server.SetConnectionExtra fail", connId));
+ return HandleResult.Error;
+ }
+
+ if (agent.SetConnectionExtra(clientConnId, extra) == false)
+ {
+ server.SetConnectionExtra(connId, null);
+ AddMsg(string.Format(" > [{0}-{1},OnServerAccept] -> agent.SetConnectionExtra fail", connId, clientConnId));
+ return HandleResult.Error;
+ }
+
+ return HandleResult.Ok;
+ }
+
+ ///
+ /// 鏈嶅姟鍣ㄥ彂鏁版嵁浜
+ ///
+ ///
+ ///
+ ///
+ ///
+ protected virtual HandleResult OnServerSend(IntPtr connId, byte[] bytes)
+ {
+ AddMsg(string.Format(" > [Server->OnServerSend] -> ({0} bytes)", bytes.Length));
+ return HandleResult.Ok;
+ }
+
+ ///
+ /// 鏁版嵁鍒拌揪浜
+ ///
+ ///
+ ///
+ ///
+ ///
+ protected virtual HandleResult OnServerReceive(IntPtr connId, byte[] bytes)
+ {
+ try
+ {
+ // 鑾峰彇闄勫姞鏁版嵁
+ IntPtr extraPtr = IntPtr.Zero;
+
+ if (server.GetConnectionExtra(connId, ref extraPtr) == false)
+ {
+ return HandleResult.Error;
+ }
+
+ // extra 灏辨槸accept閲屼紶鍏ョ殑闄勫姞鏁版嵁浜
+ ConnExtraData extra = (ConnExtraData)Marshal.PtrToStructure(extraPtr, typeof(ConnExtraData));
+
+ AddMsg(string.Format(" > [Server->OnServerReceive] -> ({0} bytes)", bytes.Length));
+
+ // 鏈嶅姟绔敹鍒版暟鎹簡,搴旇璋冪敤agent鍙戦佸埌椤跺眰鏈嶅姟鍣,瀹炵幇 client(N)->server->targetServer 鐨勪腑杞
+ if (agent.Send(extra.ConnIdForClient, bytes, bytes.Length) == false)
+ {
+ return HandleResult.Error;
+ }
+
+ return HandleResult.Ok;
+
+ }
+ catch (Exception)
+ {
+ return HandleResult.Error;
+ }
+
+ }
+
+ ///
+ /// 鍑洪敊浜
+ ///
+ ///
+ ///
+ ///
+ ///
+ protected virtual HandleResult OnServerClose(IntPtr connId, SocketOperation enOperation, int errorCode)
+ {
+ if (errorCode == 0)
+ AddMsg(string.Format(" > [{0},OnServerClose]", connId));
+ else
+ AddMsg(string.Format(" > [{0},OnServerError] -> OP:{1},CODE:{2}", connId, enOperation, errorCode));
+ // return HPSocketSdk.HandleResult.Ok;
+
+ // 鑾峰彇闄勫姞鏁版嵁
+ IntPtr extraPtr = IntPtr.Zero;
+ if (server.GetConnectionExtra(connId, ref extraPtr) == false)
+ {
+ return HandleResult.Error;
+ }
+
+ // extra 灏辨槸accept閲屼紶鍏ョ殑闄勫姞鏁版嵁浜
+ ConnExtraData extra = (ConnExtraData)Marshal.PtrToStructure(extraPtr, typeof(ConnExtraData));
+ if (extra.FreeType == 0)
+ {
+ // 鐢眂lient(N)鏂紑杩炴帴,閲婃斁agent鏁版嵁
+ agent.Disconnect(extra.ConnIdForClient);
+ agent.SetConnectionExtra(extra.ConnIdForClient, null);
+ }
+
+ server.SetConnectionExtra(connId, null);
+
+ return HandleResult.Ok;
+ }
+
+ ///
+ /// 鏈嶅姟鍏抽棴浜
+ ///
+ ///
+ protected virtual HandleResult OnServerShutdown()
+ {
+ AddMsg(" > [OnServerShutdown]");
+ return HandleResult.Ok;
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////
+ }
+
+
+ [StructLayout(LayoutKind.Sequential)]
+ public class ConnExtraData
+ {
+ // server鐨凜ONNID
+ public IntPtr ConnIdForServer;
+
+ // client鐨凜ONNID
+ public IntPtr ConnIdForClient;
+
+ // 淇濆瓨server绔寚閽,鏂逛究鍦╟client閲岃皟鐢
+ public TcpServer Server;
+
+ // 閲婃斁鏂瑰紡
+ public uint FreeType;
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/TcpPortForwarding.csproj b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/TcpPortForwarding.csproj
new file mode 100644
index 000000000..e2e0bb2c0
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/TcpPortForwarding.csproj
@@ -0,0 +1,123 @@
+锘
+
+
+ Debug
+ x86
+ 8.0.30703
+ 2.0
+ {53C19B7D-9590-49FA-81BC-59ECC820F349}
+ WinExe
+ Properties
+ TcpPortForwarding
+ TcpPortForwarding
+ v4.0
+ Client
+ 512
+
+
+ x86
+ true
+ full
+ false
+ ..\bin\x86\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ x86
+ pdbonly
+ true
+ ..\bin\x86\Release\
+ TRACE
+ prompt
+ 4
+
+
+ true
+ ..\bin\x64\Debug\
+ DEBUG;TRACE
+ full
+ x64
+ ..\bin\Debug\TcpProxyServer.exe.CodeAnalysisLog.xml
+ true
+ GlobalSuppressions.cs
+ prompt
+ MinimumRecommendedRules.ruleset
+ ;D:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets
+ ;D:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules
+
+
+ ..\bin\x64\Release\
+ TRACE
+ true
+ pdbonly
+ x64
+ ..\bin\Release\TcpProxyServer.exe.CodeAnalysisLog.xml
+ true
+ GlobalSuppressions.cs
+ prompt
+ MinimumRecommendedRules.ruleset
+ ;D:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets
+ ;D:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Form
+
+
+ frmPortForwarding.cs
+
+
+
+
+
+ frmPortForwarding.cs
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+ Designer
+
+
+ True
+ Resources.resx
+ True
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
+ True
+ Settings.settings
+ True
+
+
+
+
+ {DFA935E2-CF37-4E26-B697-D7F3DEE19DD8}
+ HPSocketCS
+
+
+
+
+
\ No newline at end of file
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/frmPortForwarding.Designer.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/frmPortForwarding.Designer.cs
new file mode 100644
index 000000000..9808e1e0a
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/frmPortForwarding.Designer.cs
@@ -0,0 +1,209 @@
+锘縩amespace TcpPortForwarding
+{
+ partial class frmTcpPortForwarding
+ {
+ ///
+ /// 蹇呴渶鐨勮璁″櫒鍙橀噺銆
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// 娓呯悊鎵鏈夋鍦ㄤ娇鐢ㄧ殑璧勬簮銆
+ ///
+ /// 濡傛灉搴旈噴鏀炬墭绠¤祫婧愶紝涓 true锛涘惁鍒欎负 false銆
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows 绐椾綋璁捐鍣ㄧ敓鎴愮殑浠g爜
+
+ ///
+ /// 璁捐鍣ㄦ敮鎸佹墍闇鐨勬柟娉 - 涓嶈
+ /// 浣跨敤浠g爜缂栬緫鍣ㄤ慨鏀规鏂规硶鐨勫唴瀹广
+ ///
+ private void InitializeComponent()
+ {
+ this.lbxMsg = new System.Windows.Forms.ListBox();
+ this.label1 = new System.Windows.Forms.Label();
+ this.label2 = new System.Windows.Forms.Label();
+ this.txtBindAddr = new System.Windows.Forms.TextBox();
+ this.txtTargetAddr = new System.Windows.Forms.TextBox();
+ this.txtBindPort = new System.Windows.Forms.TextBox();
+ this.txtTargetPort = new System.Windows.Forms.TextBox();
+ this.label3 = new System.Windows.Forms.Label();
+ this.txtDisConn = new System.Windows.Forms.TextBox();
+ this.btnDisconn = new System.Windows.Forms.Button();
+ this.btnStart = new System.Windows.Forms.Button();
+ this.btnStop = new System.Windows.Forms.Button();
+ this.SuspendLayout();
+ //
+ // lbxMsg
+ //
+ this.lbxMsg.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.lbxMsg.FormattingEnabled = true;
+ this.lbxMsg.ItemHeight = 12;
+ this.lbxMsg.Location = new System.Drawing.Point(1, 1);
+ this.lbxMsg.Name = "lbxMsg";
+ this.lbxMsg.Size = new System.Drawing.Size(474, 304);
+ this.lbxMsg.TabIndex = 5;
+ this.lbxMsg.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.lbxMsg_KeyPress);
+ //
+ // label1
+ //
+ this.label1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+ this.label1.AutoSize = true;
+ this.label1.Location = new System.Drawing.Point(12, 319);
+ this.label1.Name = "label1";
+ this.label1.Size = new System.Drawing.Size(41, 12);
+ this.label1.TabIndex = 6;
+ this.label1.Text = "Local:";
+ //
+ // label2
+ //
+ this.label2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+ this.label2.AutoSize = true;
+ this.label2.Location = new System.Drawing.Point(6, 341);
+ this.label2.Name = "label2";
+ this.label2.Size = new System.Drawing.Size(47, 12);
+ this.label2.TabIndex = 7;
+ this.label2.Text = "Target:";
+ //
+ // txtBindAddr
+ //
+ this.txtBindAddr.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+ this.txtBindAddr.Location = new System.Drawing.Point(60, 316);
+ this.txtBindAddr.Name = "txtBindAddr";
+ this.txtBindAddr.Size = new System.Drawing.Size(100, 21);
+ this.txtBindAddr.TabIndex = 8;
+ this.txtBindAddr.Text = "0.0.0.0";
+ //
+ // txtTargetAddr
+ //
+ this.txtTargetAddr.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+ this.txtTargetAddr.Location = new System.Drawing.Point(60, 343);
+ this.txtTargetAddr.Name = "txtTargetAddr";
+ this.txtTargetAddr.Size = new System.Drawing.Size(100, 21);
+ this.txtTargetAddr.TabIndex = 9;
+ this.txtTargetAddr.Text = "127.0.0.1";
+ //
+ // txtBindPort
+ //
+ this.txtBindPort.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+ this.txtBindPort.Location = new System.Drawing.Point(166, 316);
+ this.txtBindPort.Name = "txtBindPort";
+ this.txtBindPort.Size = new System.Drawing.Size(48, 21);
+ this.txtBindPort.TabIndex = 10;
+ this.txtBindPort.Text = "7000";
+ //
+ // txtTargetPort
+ //
+ this.txtTargetPort.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+ this.txtTargetPort.Location = new System.Drawing.Point(166, 343);
+ this.txtTargetPort.Name = "txtTargetPort";
+ this.txtTargetPort.Size = new System.Drawing.Size(48, 21);
+ this.txtTargetPort.TabIndex = 11;
+ this.txtTargetPort.Text = "5555";
+ //
+ // label3
+ //
+ this.label3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+ this.label3.AutoSize = true;
+ this.label3.Location = new System.Drawing.Point(221, 336);
+ this.label3.Name = "label3";
+ this.label3.Size = new System.Drawing.Size(47, 12);
+ this.label3.TabIndex = 12;
+ this.label3.Text = "CONNID:";
+ //
+ // txtDisConn
+ //
+ this.txtDisConn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+ this.txtDisConn.Location = new System.Drawing.Point(274, 332);
+ this.txtDisConn.Name = "txtDisConn";
+ this.txtDisConn.Size = new System.Drawing.Size(47, 21);
+ this.txtDisConn.TabIndex = 13;
+ this.txtDisConn.TextChanged += new System.EventHandler(this.txtDisConn_TextChanged);
+ //
+ // btnDisconn
+ //
+ this.btnDisconn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+ this.btnDisconn.Location = new System.Drawing.Point(328, 331);
+ this.btnDisconn.Name = "btnDisconn";
+ this.btnDisconn.Size = new System.Drawing.Size(61, 23);
+ this.btnDisconn.TabIndex = 14;
+ this.btnDisconn.Text = "Dis conn";
+ this.btnDisconn.UseVisualStyleBackColor = true;
+ this.btnDisconn.Click += new System.EventHandler(this.btnDisconn_Click);
+ //
+ // btnStart
+ //
+ this.btnStart.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+ this.btnStart.Location = new System.Drawing.Point(412, 314);
+ this.btnStart.Name = "btnStart";
+ this.btnStart.Size = new System.Drawing.Size(61, 23);
+ this.btnStart.TabIndex = 15;
+ this.btnStart.Text = "Start";
+ this.btnStart.UseVisualStyleBackColor = true;
+ this.btnStart.Click += new System.EventHandler(this.btnStart_Click);
+ //
+ // btnStop
+ //
+ this.btnStop.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+ this.btnStop.Location = new System.Drawing.Point(412, 343);
+ this.btnStop.Name = "btnStop";
+ this.btnStop.Size = new System.Drawing.Size(61, 23);
+ this.btnStop.TabIndex = 16;
+ this.btnStop.Text = "Stop";
+ this.btnStop.UseVisualStyleBackColor = true;
+ this.btnStop.Click += new System.EventHandler(this.btnStop_Click);
+ //
+ // frmTcpPortForwarding
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(475, 370);
+ this.Controls.Add(this.btnStop);
+ this.Controls.Add(this.btnStart);
+ this.Controls.Add(this.btnDisconn);
+ this.Controls.Add(this.txtDisConn);
+ this.Controls.Add(this.label3);
+ this.Controls.Add(this.txtTargetPort);
+ this.Controls.Add(this.txtBindPort);
+ this.Controls.Add(this.txtTargetAddr);
+ this.Controls.Add(this.txtBindAddr);
+ this.Controls.Add(this.label2);
+ this.Controls.Add(this.label1);
+ this.Controls.Add(this.lbxMsg);
+ this.Name = "frmTcpPortForwarding";
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
+ this.Text = "TcpPortForwarding [ \'C\' - clear list box ]";
+ this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.frmProxyServer_FormClosing);
+ this.Load += new System.EventHandler(this.Form1_Load);
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.ListBox lbxMsg;
+ private System.Windows.Forms.Label label1;
+ private System.Windows.Forms.Label label2;
+ private System.Windows.Forms.TextBox txtBindAddr;
+ private System.Windows.Forms.TextBox txtTargetAddr;
+ private System.Windows.Forms.TextBox txtBindPort;
+ private System.Windows.Forms.TextBox txtTargetPort;
+ private System.Windows.Forms.Label label3;
+ private System.Windows.Forms.TextBox txtDisConn;
+ private System.Windows.Forms.Button btnDisconn;
+ private System.Windows.Forms.Button btnStart;
+ private System.Windows.Forms.Button btnStop;
+ }
+}
+
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/frmPortForwarding.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/frmPortForwarding.cs
new file mode 100644
index 000000000..522b2f8f1
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/frmPortForwarding.cs
@@ -0,0 +1,182 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+
+namespace TcpPortForwarding
+{
+ public enum AppState
+ {
+ Starting, Started, Stoping, Stoped, Error
+ }
+
+ public partial class frmTcpPortForwarding : Form
+ {
+ private AppState appState = AppState.Stoped;
+
+ private delegate void ShowMsg(string msg);
+ private ShowMsg AddMsgDelegate;
+
+ private TcpPortForwarding portForwarding = null;
+
+
+ public frmTcpPortForwarding()
+ {
+ InitializeComponent();
+ }
+
+ private void Form1_Load(object sender, EventArgs e)
+ {
+ try
+ {
+ portForwarding = new TcpPortForwarding();
+
+ // 鍔犱釜濮旀墭鏄剧ずmsg,鍥犱负on绯诲垪閮芥槸鍦ㄥ伐浣滅嚎绋嬩腑璋冪敤鐨,ui涓嶅厑璁哥洿鎺ユ搷浣
+ AddMsgDelegate = new ShowMsg(AddMsg);
+
+ portForwarding.AddMsgDelegate = new TcpPortForwarding.ShowMsg(AddMsg);
+
+ SetAppState(AppState.Stoped);
+ }
+ catch (Exception ex)
+ {
+ SetAppState(AppState.Error);
+ AddMsg(ex.Message);
+ }
+ }
+
+ ///
+ /// 寰listbox鍔犱竴鏉¢」鐩
+ ///
+ ///
+ void AddMsg(string msg)
+ {
+ if (this.lbxMsg.InvokeRequired)
+ {
+ // 寰堝竻鐨勮皟鑷繁
+ this.lbxMsg.Invoke(AddMsgDelegate, msg);
+ }
+ else
+ {
+ if (this.lbxMsg.Items.Count > 100)
+ {
+ this.lbxMsg.Items.RemoveAt(0);
+ }
+ this.lbxMsg.Items.Add(msg);
+ this.lbxMsg.TopIndex = this.lbxMsg.Items.Count - (int)(this.lbxMsg.Height / this.lbxMsg.ItemHeight);
+ }
+ }
+
+
+ ///
+ /// 璁剧疆绋嬪簭鐘舵
+ ///
+ ///
+ void SetAppState(AppState state)
+ {
+ appState = state;
+ this.btnStart.Enabled = (appState == AppState.Stoped);
+ this.btnStop.Enabled = (appState == AppState.Started);
+ this.txtBindAddr.Enabled = (appState == AppState.Stoped);
+ this.txtBindPort.Enabled = (appState == AppState.Stoped);
+ this.txtTargetAddr.Enabled = (appState == AppState.Stoped);
+ this.txtTargetPort.Enabled = (appState == AppState.Stoped);
+ this.txtDisConn.Enabled = (appState == AppState.Started);
+ this.btnDisconn.Enabled = (appState == AppState.Started && this.txtDisConn.Text.Length > 0);
+ }
+
+ private void txtDisConn_TextChanged(object sender, EventArgs e)
+ {
+ // CONNID妗嗚鏀瑰彉浜嬩欢
+ this.btnDisconn.Enabled = (appState == AppState.Started && this.txtDisConn.Text.Length > 0);
+ }
+
+ private void lbxMsg_KeyPress(object sender, KeyPressEventArgs e)
+ {
+ // 娓呯悊listbox
+ if (e.KeyChar == 'c' || e.KeyChar == 'C')
+ {
+ this.lbxMsg.Items.Clear();
+ }
+ }
+
+ private void btnStart_Click(object sender, EventArgs e)
+ {
+ try
+ {
+ portForwarding.BindAddr = this.txtBindAddr.Text.Trim();
+ portForwarding.BindPort = ushort.Parse(this.txtBindPort.Text.Trim());
+ portForwarding.TargetAddr = this.txtTargetAddr.Text.Trim();
+ portForwarding.TargetPort = ushort.Parse(this.txtTargetPort.Text.Trim());
+
+ // 鍐欏湪杩欎釜浣嶇疆鏄笂闈㈠彲鑳戒細寮傚父
+ SetAppState(AppState.Starting);
+
+ // 鍚姩鏈嶅姟
+ if (portForwarding.Start())
+ {
+ SetAppState(AppState.Started);
+ AddMsg(string.Format("$Server Start OK -> ({0}:{1}->{2}:{3})",
+ portForwarding.BindAddr, portForwarding.BindPort,
+ portForwarding.TargetAddr, portForwarding.TargetPort));
+ }
+ else
+ {
+ SetAppState(AppState.Stoped);
+ }
+ }
+ catch (Exception ex)
+ {
+ AddMsg(ex.Message);
+ }
+ }
+
+ private void btnDisconn_Click(object sender, EventArgs e)
+ {
+ try
+ {
+ IntPtr connId = (IntPtr)Convert.ToUInt32(this.txtDisConn.Text.Trim());
+
+ // 鏂紑鎸囧畾瀹㈡埛
+ if (portForwarding.Disconnect(connId))
+ {
+ AddMsg(string.Format("$({0}) Disconnect OK", connId));
+ }
+ else
+ {
+ throw new Exception(string.Format("Disconnect({0}) Error", connId));
+ }
+ }
+ catch (Exception ex)
+ {
+ AddMsg(ex.Message);
+ }
+ }
+ private void btnStop_Click(object sender, EventArgs e)
+ {
+ SetAppState(AppState.Stoping);
+
+ // 鍋滄鏈嶅姟
+ AddMsg("$Server Stop");
+ if (portForwarding.Stop())
+ {
+ SetAppState(AppState.Stoped);
+ }
+ else
+ {
+ AddMsg("$Stop Error");
+ }
+ }
+
+ private void frmProxyServer_FormClosing(object sender, FormClosingEventArgs e)
+ {
+ portForwarding.Stop();
+ }
+
+ }
+
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/frmPortForwarding.resx b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/frmPortForwarding.resx
new file mode 100644
index 000000000..1af7de150
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/frmPortForwarding.resx
@@ -0,0 +1,120 @@
+锘
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/obj/x64/Release/DesignTimeResolveAssemblyReferencesInput.cache b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/obj/x64/Release/DesignTimeResolveAssemblyReferencesInput.cache
new file mode 100644
index 000000000..24a69cfaf
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/obj/x64/Release/DesignTimeResolveAssemblyReferencesInput.cache differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/obj/x64/Release/TcpPortForwarding.Properties.Resources.resources b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/obj/x64/Release/TcpPortForwarding.Properties.Resources.resources
new file mode 100644
index 000000000..6c05a9776
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/obj/x64/Release/TcpPortForwarding.Properties.Resources.resources differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/obj/x64/Release/TcpPortForwarding.csproj.FileListAbsolute.txt b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/obj/x64/Release/TcpPortForwarding.csproj.FileListAbsolute.txt
new file mode 100644
index 000000000..849429d9f
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/obj/x64/Release/TcpPortForwarding.csproj.FileListAbsolute.txt
@@ -0,0 +1,7 @@
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\bin\x64\Release\TcpPortForwarding.exe
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\bin\x64\Release\TcpPortForwarding.pdb
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpPortForwarding\obj\x64\Release\TcpPortForwarding.frmTcpPortForwarding.resources
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpPortForwarding\obj\x64\Release\TcpPortForwarding.Properties.Resources.resources
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpPortForwarding\obj\x64\Release\TcpPortForwarding.csproj.GenerateResource.Cache
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpPortForwarding\obj\x64\Release\TcpPortForwarding.exe
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpPortForwarding\obj\x64\Release\TcpPortForwarding.pdb
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/obj/x64/Release/TcpPortForwarding.csproj.GenerateResource.Cache b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/obj/x64/Release/TcpPortForwarding.csproj.GenerateResource.Cache
new file mode 100644
index 000000000..4b1923222
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/obj/x64/Release/TcpPortForwarding.csproj.GenerateResource.Cache differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/obj/x64/Release/TcpPortForwarding.exe b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/obj/x64/Release/TcpPortForwarding.exe
new file mode 100644
index 000000000..99c62a33d
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/obj/x64/Release/TcpPortForwarding.exe differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/obj/x64/Release/TcpPortForwarding.frmTcpPortForwarding.resources b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/obj/x64/Release/TcpPortForwarding.frmTcpPortForwarding.resources
new file mode 100644
index 000000000..6c05a9776
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/obj/x64/Release/TcpPortForwarding.frmTcpPortForwarding.resources differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/obj/x64/Release/TempPE/Properties.Resources.Designer.cs.dll b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/obj/x64/Release/TempPE/Properties.Resources.Designer.cs.dll
new file mode 100644
index 000000000..2b0949b0f
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/obj/x64/Release/TempPE/Properties.Resources.Designer.cs.dll differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/obj/x86/Release/DesignTimeResolveAssemblyReferencesInput.cache b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/obj/x86/Release/DesignTimeResolveAssemblyReferencesInput.cache
new file mode 100644
index 000000000..0a8dc4aa2
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/obj/x86/Release/DesignTimeResolveAssemblyReferencesInput.cache differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/obj/x86/Release/TcpPortForwarding.Properties.Resources.resources b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/obj/x86/Release/TcpPortForwarding.Properties.Resources.resources
new file mode 100644
index 000000000..6c05a9776
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/obj/x86/Release/TcpPortForwarding.Properties.Resources.resources differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/obj/x86/Release/TcpPortForwarding.csproj.FileListAbsolute.txt b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/obj/x86/Release/TcpPortForwarding.csproj.FileListAbsolute.txt
new file mode 100644
index 000000000..6df578c07
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/obj/x86/Release/TcpPortForwarding.csproj.FileListAbsolute.txt
@@ -0,0 +1,7 @@
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\bin\x86\Release\TcpPortForwarding.exe
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\bin\x86\Release\TcpPortForwarding.pdb
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpPortForwarding\obj\x86\Release\TcpPortForwarding.frmTcpPortForwarding.resources
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpPortForwarding\obj\x86\Release\TcpPortForwarding.Properties.Resources.resources
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpPortForwarding\obj\x86\Release\TcpPortForwarding.csproj.GenerateResource.Cache
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpPortForwarding\obj\x86\Release\TcpPortForwarding.exe
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpPortForwarding\obj\x86\Release\TcpPortForwarding.pdb
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/obj/x86/Release/TcpPortForwarding.csproj.GenerateResource.Cache b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/obj/x86/Release/TcpPortForwarding.csproj.GenerateResource.Cache
new file mode 100644
index 000000000..ef473244f
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/obj/x86/Release/TcpPortForwarding.csproj.GenerateResource.Cache differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/obj/x86/Release/TcpPortForwarding.exe b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/obj/x86/Release/TcpPortForwarding.exe
new file mode 100644
index 000000000..894f26065
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/obj/x86/Release/TcpPortForwarding.exe differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/obj/x86/Release/TcpPortForwarding.frmTcpPortForwarding.resources b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/obj/x86/Release/TcpPortForwarding.frmTcpPortForwarding.resources
new file mode 100644
index 000000000..6c05a9776
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPortForwarding/obj/x86/Release/TcpPortForwarding.frmTcpPortForwarding.resources differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/Program.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/Program.cs
new file mode 100644
index 000000000..69739075d
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/Program.cs
@@ -0,0 +1,21 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Windows.Forms;
+
+namespace TcpPullClientNS
+{
+ static class Program
+ {
+ ///
+ /// 搴旂敤绋嬪簭鐨勪富鍏ュ彛鐐广
+ ///
+ [STAThread]
+ static void Main()
+ {
+ Application.EnableVisualStyles();
+ Application.SetCompatibleTextRenderingDefault(false);
+ Application.Run(new frmClient());
+ }
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/Properties/AssemblyInfo.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/Properties/AssemblyInfo.cs
new file mode 100644
index 000000000..347b39f6d
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+锘縰sing System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 鏈夊叧绋嬪簭闆嗙殑甯歌淇℃伅閫氳繃浠ヤ笅
+// 鐗规ч泦鎺у埗銆傛洿鏀硅繖浜涚壒鎬у煎彲淇敼
+// 涓庣▼搴忛泦鍏宠仈鐨勪俊鎭
+[assembly: AssemblyTitle("Client")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Client")]
+[assembly: AssemblyCopyright("Copyright 漏 2014")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 灏 ComVisible 璁剧疆涓 false 浣挎绋嬪簭闆嗕腑鐨勭被鍨
+// 瀵 COM 缁勪欢涓嶅彲瑙併傚鏋滈渶瑕佷粠 COM 璁块棶姝ょ▼搴忛泦涓殑绫诲瀷锛
+// 鍒欏皢璇ョ被鍨嬩笂鐨 ComVisible 鐗规ц缃负 true銆
+[assembly: ComVisible(false)]
+
+// 濡傛灉姝ら」鐩悜 COM 鍏紑锛屽垯涓嬪垪 GUID 鐢ㄤ簬绫诲瀷搴撶殑 ID
+[assembly: Guid("0b4a498a-774e-4250-bf80-a05682b557fb")]
+
+// 绋嬪簭闆嗙殑鐗堟湰淇℃伅鐢变笅闈㈠洓涓肩粍鎴:
+//
+// 涓荤増鏈
+// 娆$増鏈
+// 鍐呴儴鐗堟湰鍙
+// 淇鍙
+//
+// 鍙互鎸囧畾鎵鏈夎繖浜涘硷紝涔熷彲浠ヤ娇鐢ㄢ滃唴閮ㄧ増鏈彿鈥濆拰鈥滀慨璁㈠彿鈥濈殑榛樿鍊硷紝
+// 鏂规硶鏄寜濡備笅鎵绀轰娇鐢ㄢ*鈥:
+
+[assembly: AssemblyVersion("3.5.2")]
+[assembly: AssemblyFileVersion("3.5.2")]
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/Properties/Resources.Designer.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/Properties/Resources.Designer.cs
new file mode 100644
index 000000000..a4504581c
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/Properties/Resources.Designer.cs
@@ -0,0 +1,63 @@
+锘//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.18444
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace TcpPullClientNS.Properties {
+ using System;
+
+
+ ///
+ /// A strongly-typed resource class, for looking up localized strings, etc.
+ ///
+ // This class was auto-generated by the StronglyTypedResourceBuilder
+ // class via a tool like ResGen or Visual Studio.
+ // To add or remove a member, edit your .ResX file then rerun ResGen
+ // with the /str option, or rebuild your VS project.
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ internal class Resources {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources() {
+ }
+
+ ///
+ /// Returns the cached ResourceManager instance used by this class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager {
+ get {
+ if (object.ReferenceEquals(resourceMan, null)) {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("TcpPullClientNS.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// Overrides the current thread's CurrentUICulture property for all
+ /// resource lookups using this strongly typed resource class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/Properties/Resources.resx b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/Properties/Resources.resx
new file mode 100644
index 000000000..af7dbebba
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/Properties/Resources.resx
@@ -0,0 +1,117 @@
+锘
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/Properties/Settings.Designer.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/Properties/Settings.Designer.cs
new file mode 100644
index 000000000..a28edfc05
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/Properties/Settings.Designer.cs
@@ -0,0 +1,26 @@
+锘//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.18444
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace TcpPullClientNS.Properties {
+
+
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")]
+ internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+
+ private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+ public static Settings Default {
+ get {
+ return defaultInstance;
+ }
+ }
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/Properties/Settings.settings b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/Properties/Settings.settings
new file mode 100644
index 000000000..39645652a
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/Properties/Settings.settings
@@ -0,0 +1,7 @@
+锘
+
+
+
+
+
+
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/TcpPackClient.csproj b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/TcpPackClient.csproj
new file mode 100644
index 000000000..b8a16cb8a
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/TcpPackClient.csproj
@@ -0,0 +1,127 @@
+锘
+
+
+ Debug
+ x86
+ 8.0.30703
+ 2.0
+ {36D05914-1A8A-484C-9FB7-8BE4582A665A}
+ WinExe
+ Properties
+ TcpPackClient
+ TcpPackClient
+ v4.0
+ Client
+ 512
+
+
+ x86
+ true
+ full
+ false
+ ..\bin\x86\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ x86
+ pdbonly
+ true
+ ..\bin\x86\Release\
+ TRACE
+ prompt
+ 4
+ false
+
+
+ true
+ ..\bin\x64\Debug\
+ DEBUG;TRACE
+ full
+ x64
+ ..\bin\Debug\TcpClient.exe.CodeAnalysisLog.xml
+ true
+ GlobalSuppressions.cs
+ prompt
+ MinimumRecommendedRules.ruleset
+ ;D:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets
+ true
+ ;D:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules
+ true
+
+
+ ..\bin\x64\Release\
+ TRACE
+ true
+ pdbonly
+ x64
+ ..\bin\Release\TcpClient.exe.CodeAnalysisLog.xml
+ true
+ GlobalSuppressions.cs
+ prompt
+ MinimumRecommendedRules.ruleset
+ ;D:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets
+ true
+ ;D:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Form
+
+
+ frmClient.cs
+
+
+
+
+ frmClient.cs
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+ Designer
+
+
+ True
+ Resources.resx
+ True
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
+ True
+ Settings.settings
+ True
+
+
+
+
+ {DFA935E2-CF37-4E26-B697-D7F3DEE19DD8}
+ HPSocketCS
+
+
+
+
+
\ No newline at end of file
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/TcpPullClient.csproj b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/TcpPullClient.csproj
new file mode 100644
index 000000000..88881005b
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/TcpPullClient.csproj
@@ -0,0 +1,127 @@
+锘
+
+
+ Debug
+ x86
+ 8.0.30703
+ 2.0
+ {B9965E66-853A-47CC-B0C9-197B5A29ABFC}
+ WinExe
+ Properties
+ TcpPullClientNS
+ TcpPullClient
+ v4.0
+ Client
+ 512
+
+
+ x86
+ true
+ full
+ false
+ ..\bin\x86\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ x86
+ pdbonly
+ true
+ ..\bin\x86\Release\
+ TRACE
+ prompt
+ 4
+ false
+
+
+ true
+ ..\bin\x64\Debug\
+ DEBUG;TRACE
+ full
+ x64
+ ..\bin\Debug\TcpPullClient.exe.CodeAnalysisLog.xml
+ true
+ GlobalSuppressions.cs
+ prompt
+ MinimumRecommendedRules.ruleset
+ ;D:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets
+ true
+ ;D:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules
+ true
+
+
+ ..\bin\x64\Release\
+ TRACE
+ true
+ pdbonly
+ x64
+ ..\bin\Release\TcpPullClient.exe.CodeAnalysisLog.xml
+ true
+ GlobalSuppressions.cs
+ prompt
+ MinimumRecommendedRules.ruleset
+ ;D:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets
+ true
+ ;D:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Form
+
+
+ frmClient.cs
+
+
+
+
+ frmClient.cs
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+ Designer
+
+
+ True
+ Resources.resx
+ True
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
+ True
+ Settings.settings
+ True
+
+
+
+
+ {DFA935E2-CF37-4E26-B697-D7F3DEE19DD8}
+ HPSocketCS
+
+
+
+
+
\ No newline at end of file
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/frmClient.Designer.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/frmClient.Designer.cs
new file mode 100644
index 000000000..21882ee1b
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/frmClient.Designer.cs
@@ -0,0 +1,177 @@
+锘縩amespace TcpPullClientNS
+{
+ partial class frmClient
+ {
+ ///
+ /// 蹇呴渶鐨勮璁″櫒鍙橀噺銆
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// 娓呯悊鎵鏈夋鍦ㄤ娇鐢ㄧ殑璧勬簮銆
+ ///
+ /// 濡傛灉搴旈噴鏀炬墭绠¤祫婧愶紝涓 true锛涘惁鍒欎负 false銆
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows 绐椾綋璁捐鍣ㄧ敓鎴愮殑浠g爜
+
+ ///
+ /// 璁捐鍣ㄦ敮鎸佹墍闇鐨勬柟娉 - 涓嶈
+ /// 浣跨敤浠g爜缂栬緫鍣ㄤ慨鏀规鏂规硶鐨勫唴瀹广
+ ///
+ private void InitializeComponent()
+ {
+ this.groupBox1 = new System.Windows.Forms.GroupBox();
+ this.cbxAsyncConn = new System.Windows.Forms.CheckBox();
+ this.txtPort = new System.Windows.Forms.TextBox();
+ this.txtIpAddress = new System.Windows.Forms.TextBox();
+ this.btnStop = new System.Windows.Forms.Button();
+ this.btnStart = new System.Windows.Forms.Button();
+ this.lbxMsg = new System.Windows.Forms.ListBox();
+ this.txtSend = new System.Windows.Forms.TextBox();
+ this.btnSend = new System.Windows.Forms.Button();
+ this.groupBox1.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // groupBox1
+ //
+ this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.groupBox1.Controls.Add(this.cbxAsyncConn);
+ this.groupBox1.Controls.Add(this.txtPort);
+ this.groupBox1.Controls.Add(this.txtIpAddress);
+ this.groupBox1.Controls.Add(this.btnStop);
+ this.groupBox1.Controls.Add(this.btnStart);
+ this.groupBox1.Location = new System.Drawing.Point(12, 2);
+ this.groupBox1.Name = "groupBox1";
+ this.groupBox1.Size = new System.Drawing.Size(464, 47);
+ this.groupBox1.TabIndex = 11;
+ this.groupBox1.TabStop = false;
+ //
+ // cbxAsyncConn
+ //
+ this.cbxAsyncConn.AutoSize = true;
+ this.cbxAsyncConn.Checked = true;
+ this.cbxAsyncConn.CheckState = System.Windows.Forms.CheckState.Checked;
+ this.cbxAsyncConn.Location = new System.Drawing.Point(134, 20);
+ this.cbxAsyncConn.Name = "cbxAsyncConn";
+ this.cbxAsyncConn.Size = new System.Drawing.Size(84, 16);
+ this.cbxAsyncConn.TabIndex = 13;
+ this.cbxAsyncConn.Text = "Async Conn";
+ this.cbxAsyncConn.UseVisualStyleBackColor = true;
+ //
+ // txtPort
+ //
+ this.txtPort.Location = new System.Drawing.Point(88, 18);
+ this.txtPort.Name = "txtPort";
+ this.txtPort.Size = new System.Drawing.Size(40, 21);
+ this.txtPort.TabIndex = 12;
+ this.txtPort.Text = "5555";
+ //
+ // txtIpAddress
+ //
+ this.txtIpAddress.Location = new System.Drawing.Point(11, 18);
+ this.txtIpAddress.Name = "txtIpAddress";
+ this.txtIpAddress.Size = new System.Drawing.Size(71, 21);
+ this.txtIpAddress.TabIndex = 11;
+ this.txtIpAddress.Text = "127.0.0.1";
+ //
+ // btnStop
+ //
+ this.btnStop.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnStop.Location = new System.Drawing.Point(407, 15);
+ this.btnStop.Name = "btnStop";
+ this.btnStop.Size = new System.Drawing.Size(47, 26);
+ this.btnStop.TabIndex = 10;
+ this.btnStop.Text = "Stop";
+ this.btnStop.UseVisualStyleBackColor = true;
+ this.btnStop.Click += new System.EventHandler(this.btnStop_Click);
+ //
+ // btnStart
+ //
+ this.btnStart.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnStart.Location = new System.Drawing.Point(354, 15);
+ this.btnStart.Name = "btnStart";
+ this.btnStart.Size = new System.Drawing.Size(47, 26);
+ this.btnStart.TabIndex = 9;
+ this.btnStart.Text = "Start";
+ this.btnStart.UseVisualStyleBackColor = true;
+ this.btnStart.Click += new System.EventHandler(this.btnStart_Click);
+ //
+ // lbxMsg
+ //
+ this.lbxMsg.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.lbxMsg.FormattingEnabled = true;
+ this.lbxMsg.ItemHeight = 12;
+ this.lbxMsg.Location = new System.Drawing.Point(11, 62);
+ this.lbxMsg.Name = "lbxMsg";
+ this.lbxMsg.Size = new System.Drawing.Size(465, 256);
+ this.lbxMsg.TabIndex = 10;
+ this.lbxMsg.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.lbxMsg_KeyPress);
+ //
+ // txtSend
+ //
+ this.txtSend.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.txtSend.Location = new System.Drawing.Point(12, 324);
+ this.txtSend.Name = "txtSend";
+ this.txtSend.Size = new System.Drawing.Size(411, 21);
+ this.txtSend.TabIndex = 12;
+ this.txtSend.Text = "text to be sent";
+ //
+ // btnSend
+ //
+ this.btnSend.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnSend.Location = new System.Drawing.Point(429, 321);
+ this.btnSend.Name = "btnSend";
+ this.btnSend.Size = new System.Drawing.Size(47, 26);
+ this.btnSend.TabIndex = 13;
+ this.btnSend.Text = "Send";
+ this.btnSend.UseVisualStyleBackColor = true;
+ this.btnSend.Click += new System.EventHandler(this.btnSend_Click);
+ //
+ // frmClient
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(485, 350);
+ this.Controls.Add(this.btnSend);
+ this.Controls.Add(this.txtSend);
+ this.Controls.Add(this.groupBox1);
+ this.Controls.Add(this.lbxMsg);
+ this.Name = "frmClient";
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
+ this.Text = "Echo-TcpPullClient [ \'C\' - clear list box ]";
+ this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.frmClient_FormClosed);
+ this.Load += new System.EventHandler(this.frmClient_Load);
+ this.groupBox1.ResumeLayout(false);
+ this.groupBox1.PerformLayout();
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.GroupBox groupBox1;
+ private System.Windows.Forms.TextBox txtPort;
+ private System.Windows.Forms.TextBox txtIpAddress;
+ private System.Windows.Forms.Button btnStop;
+ private System.Windows.Forms.Button btnStart;
+ private System.Windows.Forms.ListBox lbxMsg;
+ private System.Windows.Forms.CheckBox cbxAsyncConn;
+ private System.Windows.Forms.TextBox txtSend;
+ private System.Windows.Forms.Button btnSend;
+
+ }
+}
+
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/frmClient.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/frmClient.cs
new file mode 100644
index 000000000..ebda0cd63
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/frmClient.cs
@@ -0,0 +1,369 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using HPSocketCS;
+using System.Runtime.InteropServices;
+
+namespace TcpPullClientNS
+{
+ public enum AppState
+ {
+ Starting, Started, Stoping, Stoped, Error
+ }
+
+ public partial class frmClient : Form
+ {
+ private AppState appState = AppState.Stoped;
+
+ private delegate void ConnectUpdateUiDelegate();
+ private delegate void SetAppStateDelegate(AppState state);
+ private delegate void ShowMsg(string msg);
+ private ShowMsg AddMsgDelegate;
+ HPSocketCS.TcpPullClient client = new HPSocketCS.TcpPullClient();
+
+ int id = 0;
+
+ // 鍖呭ご澶у皬
+ int pkgHeaderSize = Marshal.SizeOf(new PkgHeader());
+ PkgInfo pkgInfo = new PkgInfo();
+
+ public frmClient()
+ {
+ InitializeComponent();
+ }
+
+ private void frmClient_Load(object sender, EventArgs e)
+ {
+ try
+ {
+ // 鍔犱釜濮旀墭鏄剧ずmsg,鍥犱负on绯诲垪閮芥槸鍦ㄥ伐浣滅嚎绋嬩腑璋冪敤鐨,ui涓嶅厑璁哥洿鎺ユ搷浣
+ AddMsgDelegate = new ShowMsg(AddMsg);
+
+ pkgInfo.IsHeader = true;
+ pkgInfo.Length = pkgHeaderSize;
+
+ // 璁剧疆client浜嬩欢
+ client.OnPrepareConnect += new TcpClientEvent.OnPrepareConnectEventHandler(OnPrepareConnect);
+ client.OnConnect += new TcpClientEvent.OnConnectEventHandler(OnConnect);
+ client.OnSend += new TcpClientEvent.OnSendEventHandler(OnSend);
+ client.OnReceive += new TcpPullClientEvent.OnReceiveEventHandler(OnReceive);
+ client.OnClose += new TcpClientEvent.OnCloseEventHandler(OnClose);
+
+ SetAppState(AppState.Stoped);
+ }
+ catch (Exception ex)
+ {
+ SetAppState(AppState.Error);
+ AddMsg(ex.Message);
+ }
+ }
+
+ private void btnStart_Click(object sender, EventArgs e)
+ {
+ try
+ {
+ String ip = this.txtIpAddress.Text.Trim();
+ ushort port = ushort.Parse(this.txtPort.Text.Trim());
+
+ // 鍐欏湪杩欎釜浣嶇疆鏄笂闈㈠彲鑳戒細寮傚父
+ SetAppState(AppState.Starting);
+
+ AddMsg(string.Format("$Client Starting ... -> ({0}:{1})", ip, port));
+
+ if (client.Connetion(ip, port, this.cbxAsyncConn.Checked))
+ {
+ if (cbxAsyncConn.Checked == false)
+ {
+ SetAppState(AppState.Started);
+ }
+ }
+ else
+ {
+ SetAppState(AppState.Stoped);
+ throw new Exception(string.Format("$Client Start Error -> {0}({1})", client.ErrorMessage, client.ErrorCode));
+ }
+ }
+ catch (Exception ex)
+ {
+ AddMsg(ex.Message);
+ }
+ }
+
+ private void btnStop_Click(object sender, EventArgs e)
+ {
+
+ // 鍋滄鏈嶅姟
+ AddMsg("$Server Stop");
+ if (client.Stop())
+ {
+ SetAppState(AppState.Stoped);
+ }
+ else
+ {
+ AddMsg(string.Format("$Stop Error -> {0}({1})", client.ErrorMessage, client.ErrorCode));
+ }
+ }
+
+ private void btnSend_Click(object sender, EventArgs e)
+ {
+ IntPtr bufferPtr = IntPtr.Zero;
+ try
+ {
+ string send = this.txtSend.Text;
+ if (send.Length == 0)
+ {
+ return;
+ }
+
+ // 灏佸寘浣
+ byte[] bodyBytes = Encoding.Default.GetBytes(send);
+
+ // 灏佸寘澶
+ PkgHeader header = new PkgHeader();
+ header.Id = ++id;
+ header.BodySize = bodyBytes.Length;
+ byte[] headerBytes = client.StructureToByte(header);
+
+
+ // 缁勫悎鏈缁堝彂閫佺殑灏佸寘 (灏佸寘澶+灏佸寘浣)
+ byte[] sendBytes = GetSendBuffer(headerBytes, bodyBytes);
+
+ // 鍙戦
+ IntPtr connId = client.ConnectionId;
+ if (client.Send(sendBytes, sendBytes.Length))
+ {
+ AddMsg(string.Format("$ ({0}) Send OK --> {1}", connId, send));
+ }
+ else
+ {
+ AddMsg(string.Format("$ ({0}) Send Fail --> {1} ({2})", connId, send, sendBytes.Length));
+ }
+
+ }
+ catch (Exception)
+ {
+
+ }
+ finally
+ {
+ if (bufferPtr != IntPtr.Zero)
+ {
+ Marshal.FreeHGlobal(bufferPtr);
+ }
+ }
+
+
+ }
+
+ private void lbxMsg_KeyPress(object sender, KeyPressEventArgs e)
+ {
+
+ // 娓呯悊listbox
+ if (e.KeyChar == 'c' || e.KeyChar == 'C')
+ {
+ this.lbxMsg.Items.Clear();
+ }
+ }
+
+ void ConnectUpdateUi()
+ {
+ if (this.cbxAsyncConn.Checked == true)
+ {
+ SetAppState(AppState.Started);
+ }
+ }
+
+ HandleResult OnPrepareConnect(TcpClient sender, uint socket)
+ {
+ return HandleResult.Ok;
+ }
+
+ HandleResult OnConnect(TcpClient sender)
+ {
+ // 宸茶繛鎺 鍒拌揪涓娆
+ // 濡傛灉鏄紓姝ヨ仈鎺,鏇存柊鐣岄潰鐘舵
+
+ this.Invoke(new ConnectUpdateUiDelegate(ConnectUpdateUi));
+
+ AddMsg(string.Format(" > [{0},OnConnect]", sender.ConnectionId));
+
+ return HandleResult.Ok;
+ }
+
+ HandleResult OnSend(TcpClient sender, byte[] bytes)
+ {
+ // 瀹㈡埛绔彂鏁版嵁浜
+ AddMsg(string.Format(" > [{0},OnSend] -> ({1} bytes)", sender.ConnectionId, bytes.Length));
+
+ return HandleResult.Ok;
+ }
+
+ HandleResult OnReceive(TcpPullClient sender, int length)
+ {
+ // 鏁版嵁鍒拌揪浜
+
+ // 闇瑕侀暱搴
+ int required = pkgInfo.Length;
+
+ // 鍓╀綑澶у皬
+ int remain = length;
+
+
+ while (remain >= required)
+ {
+ IntPtr bufferPtr = IntPtr.Zero;
+ try
+ {
+ remain -= required;
+ bufferPtr = Marshal.AllocHGlobal(required);
+ if (sender.Fetch(bufferPtr, required) == FetchResult.Ok)
+ {
+ if (pkgInfo.IsHeader == true)
+ {
+ PkgHeader header = (PkgHeader)Marshal.PtrToStructure(bufferPtr, typeof(PkgHeader));
+
+ // 璋冭瘯淇℃伅
+ Console.WriteLine("[Client] head -> Id: {0}, BodySize: {1}\r\n", header.Id, header.BodySize);
+
+ required = header.BodySize;
+ }
+ else
+ {
+ // 璋冭瘯淇℃伅
+ string recvString = Marshal.PtrToStringAnsi(bufferPtr, required);
+ Console.WriteLine("[Client] body -> text: {0}\r\n", recvString);
+
+ required = pkgHeaderSize;
+ }
+
+ AddMsg(string.Format(" > [{0},OnReceive] -> ({1} bytes)", sender.ConnectionId, pkgInfo.Length));
+
+ pkgInfo.IsHeader = !pkgInfo.IsHeader;
+ pkgInfo.Length = required;
+ }
+ }
+ catch
+ {
+ return HandleResult.Error;
+ }
+ finally
+ {
+ if (bufferPtr != IntPtr.Zero)
+ {
+ Marshal.FreeHGlobal(bufferPtr);
+ bufferPtr = IntPtr.Zero;
+ }
+ }
+ }
+
+ return HandleResult.Ok;
+ }
+
+ HandleResult OnClose(TcpClient sender, SocketOperation enOperation, int errorCode)
+ {
+ if(errorCode == 0)
+ // 杩炴帴鍏抽棴浜
+ AddMsg(string.Format(" > [{0},OnClose]", sender.ConnectionId));
+ else
+ // 鍑洪敊浜
+ AddMsg(string.Format(" > [{0},OnError] -> OP:{1},CODE:{2}", sender.ConnectionId, enOperation, errorCode));
+
+ // 閫氱煡鐣岄潰,鍙鐞嗕簡杩炴帴閿欒,涔熸病杩涜鏄笉鏄繛鎺ラ敊璇殑鍒ゆ柇,鎵浠ユ湁閿欒灏变細璁剧疆鐣岄潰
+ // 鐢熶骇鐜璇疯嚜宸辨帶鍒
+ this.Invoke(new SetAppStateDelegate(SetAppState), AppState.Stoped);
+
+ return HandleResult.Ok;
+ }
+
+ ///
+ /// 璁剧疆绋嬪簭鐘舵
+ ///
+ ///
+ void SetAppState(AppState state)
+ {
+ appState = state;
+ this.btnStart.Enabled = (appState == AppState.Stoped);
+ this.btnStop.Enabled = (appState == AppState.Started);
+ this.txtIpAddress.Enabled = (appState == AppState.Stoped);
+ this.txtPort.Enabled = (appState == AppState.Stoped);
+ this.cbxAsyncConn.Enabled = (appState == AppState.Stoped);
+ this.btnSend.Enabled = (appState == AppState.Started);
+ }
+
+ ///
+ /// 寰listbox鍔犱竴鏉¢」鐩
+ ///
+ ///
+ void AddMsg(string msg)
+ {
+ if (this.lbxMsg.InvokeRequired)
+ {
+ // 寰堝竻鐨勮皟鑷繁
+ this.lbxMsg.Invoke(AddMsgDelegate, msg);
+ }
+ else
+ {
+ if (this.lbxMsg.Items.Count > 100)
+ {
+ this.lbxMsg.Items.RemoveAt(0);
+ }
+ this.lbxMsg.Items.Add(msg);
+ this.lbxMsg.TopIndex = this.lbxMsg.Items.Count - (int)(this.lbxMsg.Height / this.lbxMsg.ItemHeight);
+ }
+ }
+
+ private void frmClient_FormClosed(object sender, FormClosedEventArgs e)
+ {
+ client.Destroy();
+ }
+
+ private byte[] GetSendBuffer(byte[] headerBytes, byte[] bodyBytes)
+ {
+ IntPtr ptr = IntPtr.Zero;
+ try
+ {
+ int bufferSize = headerBytes.Length + bodyBytes.Length;
+ ptr = Marshal.AllocHGlobal(bufferSize);
+
+ // 鎷疯礉鍖呭ご鍒扮紦鍐插尯棣栭儴
+ Marshal.Copy(headerBytes, 0, ptr, headerBytes.Length);
+
+ // 鎷疯礉鍖呬綋鍒扮紦鍐插尯鍓╀綑閮ㄥ垎
+ Marshal.Copy(bodyBytes, 0, ptr + headerBytes.Length, bodyBytes.Length);
+
+ byte[] bytes = new byte[bufferSize];
+ Marshal.Copy(ptr, bytes, 0, bufferSize);
+
+ return bytes;
+ }
+ finally
+ {
+ if (ptr != IntPtr.Zero)
+ {
+ Marshal.FreeHGlobal(ptr);
+ }
+ }
+
+ }
+
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ public class PkgHeader
+ {
+ public int Id;
+ public int BodySize;
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ public class PkgInfo
+ {
+ public bool IsHeader;
+ public int Length;
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/frmClient.resx b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/frmClient.resx
new file mode 100644
index 000000000..1af7de150
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/frmClient.resx
@@ -0,0 +1,120 @@
+锘
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/obj/x64/Release/DesignTimeResolveAssemblyReferencesInput.cache b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/obj/x64/Release/DesignTimeResolveAssemblyReferencesInput.cache
new file mode 100644
index 000000000..ec9f20f88
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/obj/x64/Release/DesignTimeResolveAssemblyReferencesInput.cache differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/obj/x64/Release/TcpPullClient.csproj.FileListAbsolute.txt b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/obj/x64/Release/TcpPullClient.csproj.FileListAbsolute.txt
new file mode 100644
index 000000000..a5e58c9ee
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/obj/x64/Release/TcpPullClient.csproj.FileListAbsolute.txt
@@ -0,0 +1,7 @@
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\bin\x64\Release\TcpPullClient.exe
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\bin\x64\Release\TcpPullClient.pdb
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpPullClient\obj\x64\Release\TcpPullClientNS.frmClient.resources
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpPullClient\obj\x64\Release\TcpPullClientNS.Properties.Resources.resources
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpPullClient\obj\x64\Release\TcpPullClient.csproj.GenerateResource.Cache
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpPullClient\obj\x64\Release\TcpPullClient.exe
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpPullClient\obj\x64\Release\TcpPullClient.pdb
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/obj/x64/Release/TcpPullClient.csproj.GenerateResource.Cache b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/obj/x64/Release/TcpPullClient.csproj.GenerateResource.Cache
new file mode 100644
index 000000000..46e65da84
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/obj/x64/Release/TcpPullClient.csproj.GenerateResource.Cache differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/obj/x64/Release/TcpPullClient.exe b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/obj/x64/Release/TcpPullClient.exe
new file mode 100644
index 000000000..4f66008cc
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/obj/x64/Release/TcpPullClient.exe differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/obj/x64/Release/TcpPullClientNS.Properties.Resources.resources b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/obj/x64/Release/TcpPullClientNS.Properties.Resources.resources
new file mode 100644
index 000000000..6c05a9776
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/obj/x64/Release/TcpPullClientNS.Properties.Resources.resources differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/obj/x64/Release/TcpPullClientNS.frmClient.resources b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/obj/x64/Release/TcpPullClientNS.frmClient.resources
new file mode 100644
index 000000000..6c05a9776
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/obj/x64/Release/TcpPullClientNS.frmClient.resources differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/obj/x86/Release/DesignTimeResolveAssemblyReferencesInput.cache b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/obj/x86/Release/DesignTimeResolveAssemblyReferencesInput.cache
new file mode 100644
index 000000000..f696e7bca
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/obj/x86/Release/DesignTimeResolveAssemblyReferencesInput.cache differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/obj/x86/Release/TcpPullClient.csproj.FileListAbsolute.txt b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/obj/x86/Release/TcpPullClient.csproj.FileListAbsolute.txt
new file mode 100644
index 000000000..a7acbba5a
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/obj/x86/Release/TcpPullClient.csproj.FileListAbsolute.txt
@@ -0,0 +1,7 @@
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\bin\x86\Release\TcpPullClient.exe
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\bin\x86\Release\TcpPullClient.pdb
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpPullClient\obj\x86\Release\TcpPullClientNS.frmClient.resources
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpPullClient\obj\x86\Release\TcpPullClientNS.Properties.Resources.resources
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpPullClient\obj\x86\Release\TcpPullClient.csproj.GenerateResource.Cache
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpPullClient\obj\x86\Release\TcpPullClient.exe
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpPullClient\obj\x86\Release\TcpPullClient.pdb
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/obj/x86/Release/TcpPullClient.csproj.GenerateResource.Cache b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/obj/x86/Release/TcpPullClient.csproj.GenerateResource.Cache
new file mode 100644
index 000000000..46e65da84
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/obj/x86/Release/TcpPullClient.csproj.GenerateResource.Cache differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/obj/x86/Release/TcpPullClient.exe b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/obj/x86/Release/TcpPullClient.exe
new file mode 100644
index 000000000..7a8b3c906
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/obj/x86/Release/TcpPullClient.exe differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/obj/x86/Release/TcpPullClientNS.Properties.Resources.resources b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/obj/x86/Release/TcpPullClientNS.Properties.Resources.resources
new file mode 100644
index 000000000..6c05a9776
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/obj/x86/Release/TcpPullClientNS.Properties.Resources.resources differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/obj/x86/Release/TcpPullClientNS.frmClient.resources b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/obj/x86/Release/TcpPullClientNS.frmClient.resources
new file mode 100644
index 000000000..6c05a9776
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/obj/x86/Release/TcpPullClientNS.frmClient.resources differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/obj/x86/Release/TempPE/Properties.Resources.Designer.cs.dll b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/obj/x86/Release/TempPE/Properties.Resources.Designer.cs.dll
new file mode 100644
index 000000000..ba1b645d8
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullClient/obj/x86/Release/TempPE/Properties.Resources.Designer.cs.dll differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullServer/Program.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullServer/Program.cs
new file mode 100644
index 000000000..181f94d05
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullServer/Program.cs
@@ -0,0 +1,21 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Windows.Forms;
+
+namespace TcpPullServer
+{
+ static class Program
+ {
+ ///
+ /// 搴旂敤绋嬪簭鐨勪富鍏ュ彛鐐广
+ ///
+ [STAThread]
+ static void Main()
+ {
+ Application.EnableVisualStyles();
+ Application.SetCompatibleTextRenderingDefault(false);
+ Application.Run(new frmServer());
+ }
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullServer/Properties/AssemblyInfo.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullServer/Properties/AssemblyInfo.cs
new file mode 100644
index 000000000..4b7bccb2d
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullServer/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+锘縰sing System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 鏈夊叧绋嬪簭闆嗙殑甯歌淇℃伅閫氳繃浠ヤ笅
+// 鐗规ч泦鎺у埗銆傛洿鏀硅繖浜涚壒鎬у煎彲淇敼
+// 涓庣▼搴忛泦鍏宠仈鐨勪俊鎭
+[assembly: AssemblyTitle("Server")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Server")]
+[assembly: AssemblyCopyright("Copyright 漏 2014")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 灏 ComVisible 璁剧疆涓 false 浣挎绋嬪簭闆嗕腑鐨勭被鍨
+// 瀵 COM 缁勪欢涓嶅彲瑙併傚鏋滈渶瑕佷粠 COM 璁块棶姝ょ▼搴忛泦涓殑绫诲瀷锛
+// 鍒欏皢璇ョ被鍨嬩笂鐨 ComVisible 鐗规ц缃负 true銆
+[assembly: ComVisible(false)]
+
+// 濡傛灉姝ら」鐩悜 COM 鍏紑锛屽垯涓嬪垪 GUID 鐢ㄤ簬绫诲瀷搴撶殑 ID
+[assembly: Guid("a8f79261-fd62-4f4b-aed5-01bf44660ad1")]
+
+// 绋嬪簭闆嗙殑鐗堟湰淇℃伅鐢变笅闈㈠洓涓肩粍鎴:
+//
+// 涓荤増鏈
+// 娆$増鏈
+// 鍐呴儴鐗堟湰鍙
+// 淇鍙
+//
+// 鍙互鎸囧畾鎵鏈夎繖浜涘硷紝涔熷彲浠ヤ娇鐢ㄢ滃唴閮ㄧ増鏈彿鈥濆拰鈥滀慨璁㈠彿鈥濈殑榛樿鍊硷紝
+// 鏂规硶鏄寜濡備笅鎵绀轰娇鐢ㄢ*鈥:
+
+[assembly: AssemblyVersion("3.5.2")]
+[assembly: AssemblyFileVersion("3.5.2")]
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullServer/Properties/Resources.Designer.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullServer/Properties/Resources.Designer.cs
new file mode 100644
index 000000000..fa7465295
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullServer/Properties/Resources.Designer.cs
@@ -0,0 +1,63 @@
+锘//------------------------------------------------------------------------------
+//
+// 姝や唬鐮佺敱宸ュ叿鐢熸垚銆
+// 杩愯鏃剁増鏈:4.0.30319.18444
+//
+// 瀵规鏂囦欢鐨勬洿鏀瑰彲鑳戒細瀵艰嚧涓嶆纭殑琛屼负锛屽苟涓斿鏋
+// 閲嶆柊鐢熸垚浠g爜锛岃繖浜涙洿鏀瑰皢浼氫涪澶便
+//
+//------------------------------------------------------------------------------
+
+namespace TcpPullServer.Properties {
+ using System;
+
+
+ ///
+ /// 涓涓己绫诲瀷鐨勮祫婧愮被锛岀敤浜庢煡鎵炬湰鍦板寲鐨勫瓧绗︿覆绛夈
+ ///
+ // 姝ょ被鏄敱 StronglyTypedResourceBuilder
+ // 绫婚氳繃绫讳技浜 ResGen 鎴 Visual Studio 鐨勫伐鍏疯嚜鍔ㄧ敓鎴愮殑銆
+ // 鑻ヨ娣诲姞鎴栫Щ闄ゆ垚鍛橈紝璇风紪杈 .ResX 鏂囦欢锛岀劧鍚庨噸鏂拌繍琛 ResGen
+ // (浠 /str 浣滀负鍛戒护閫夐」)锛屾垨閲嶆柊鐢熸垚 VS 椤圭洰銆
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ internal class Resources {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources() {
+ }
+
+ ///
+ /// 杩斿洖姝ょ被浣跨敤鐨勭紦瀛樼殑 ResourceManager 瀹炰緥銆
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager {
+ get {
+ if (object.ReferenceEquals(resourceMan, null)) {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("TcpPullServer.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// 浣跨敤姝ゅ己绫诲瀷璧勬簮绫伙紝涓烘墍鏈夎祫婧愭煡鎵
+ /// 閲嶅啓褰撳墠绾跨▼鐨 CurrentUICulture 灞炴с
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullServer/Properties/Resources.resx b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullServer/Properties/Resources.resx
new file mode 100644
index 000000000..af7dbebba
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullServer/Properties/Resources.resx
@@ -0,0 +1,117 @@
+锘
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullServer/Properties/Settings.Designer.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullServer/Properties/Settings.Designer.cs
new file mode 100644
index 000000000..5b98cbb5f
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullServer/Properties/Settings.Designer.cs
@@ -0,0 +1,26 @@
+锘//------------------------------------------------------------------------------
+//
+// 姝や唬鐮佺敱宸ュ叿鐢熸垚銆
+// 杩愯鏃剁増鏈:4.0.30319.18444
+//
+// 瀵规鏂囦欢鐨勬洿鏀瑰彲鑳戒細瀵艰嚧涓嶆纭殑琛屼负锛屽苟涓斿鏋
+// 閲嶆柊鐢熸垚浠g爜锛岃繖浜涙洿鏀瑰皢浼氫涪澶便
+//
+//------------------------------------------------------------------------------
+
+namespace TcpPullServer.Properties {
+
+
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")]
+ internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+
+ private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+ public static Settings Default {
+ get {
+ return defaultInstance;
+ }
+ }
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullServer/Properties/Settings.settings b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullServer/Properties/Settings.settings
new file mode 100644
index 000000000..39645652a
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullServer/Properties/Settings.settings
@@ -0,0 +1,7 @@
+锘
+
+
+
+
+
+
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullServer/TcpPullServer.csproj b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullServer/TcpPullServer.csproj
new file mode 100644
index 000000000..e4f9382b6
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullServer/TcpPullServer.csproj
@@ -0,0 +1,126 @@
+锘
+
+
+ Debug
+ x86
+ 8.0.30703
+ 2.0
+ {B6654857-4C82-4F92-AD7A-21FD3ED5BBFA}
+ WinExe
+ Properties
+ TcpPullServer
+ TcpPullServer
+ v4.0
+ Client
+ 512
+
+
+ x86
+ true
+ full
+ false
+ ..\bin\x86\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ x86
+ pdbonly
+ true
+ ..\bin\x86\Release\
+ TRACE
+ prompt
+ 4
+
+
+ true
+ ..\bin\x64\Debug\
+ DEBUG;TRACE
+ full
+ x64
+ ..\bin\Debug\TcpPullServer.exe.CodeAnalysisLog.xml
+ true
+ GlobalSuppressions.cs
+ prompt
+ MinimumRecommendedRules.ruleset
+ ;D:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets
+ true
+ ;D:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules
+ true
+
+
+ ..\bin\x64\Release\
+ TRACE
+ true
+ pdbonly
+ x64
+ ..\bin\Release\TcpPullServer.exe.CodeAnalysisLog.xml
+ true
+ GlobalSuppressions.cs
+ prompt
+ MinimumRecommendedRules.ruleset
+ ;D:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets
+ true
+ ;D:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Form
+
+
+ frmServer.cs
+
+
+
+
+ frmServer.cs
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+ Designer
+
+
+ True
+ Resources.resx
+ True
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
+ True
+ Settings.settings
+ True
+
+
+
+
+ {DFA935E2-CF37-4E26-B697-D7F3DEE19DD8}
+ HPSocketCS
+
+
+
+
+
\ No newline at end of file
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullServer/frmServer.Designer.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullServer/frmServer.Designer.cs
new file mode 100644
index 000000000..c0c227869
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullServer/frmServer.Designer.cs
@@ -0,0 +1,169 @@
+锘縩amespace TcpPullServer
+{
+ partial class frmServer
+ {
+ ///
+ /// 蹇呴渶鐨勮璁″櫒鍙橀噺銆
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// 娓呯悊鎵鏈夋鍦ㄤ娇鐢ㄧ殑璧勬簮銆
+ ///
+ /// 濡傛灉搴旈噴鏀炬墭绠¤祫婧愶紝涓 true锛涘惁鍒欎负 false銆
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows 绐椾綋璁捐鍣ㄧ敓鎴愮殑浠g爜
+
+ ///
+ /// 璁捐鍣ㄦ敮鎸佹墍闇鐨勬柟娉 - 涓嶈
+ /// 浣跨敤浠g爜缂栬緫鍣ㄤ慨鏀规鏂规硶鐨勫唴瀹广
+ ///
+ private void InitializeComponent()
+ {
+ this.lbxMsg = new System.Windows.Forms.ListBox();
+ this.groupBox1 = new System.Windows.Forms.GroupBox();
+ this.label1 = new System.Windows.Forms.Label();
+ this.btnDisconn = new System.Windows.Forms.Button();
+ this.txtDisConn = new System.Windows.Forms.TextBox();
+ this.txtPort = new System.Windows.Forms.TextBox();
+ this.txtIpAddress = new System.Windows.Forms.TextBox();
+ this.btnStop = new System.Windows.Forms.Button();
+ this.btnStart = new System.Windows.Forms.Button();
+ this.groupBox1.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // lbxMsg
+ //
+ this.lbxMsg.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.lbxMsg.FormattingEnabled = true;
+ this.lbxMsg.ItemHeight = 12;
+ this.lbxMsg.Location = new System.Drawing.Point(11, 62);
+ this.lbxMsg.Name = "lbxMsg";
+ this.lbxMsg.Size = new System.Drawing.Size(465, 304);
+ this.lbxMsg.TabIndex = 4;
+ this.lbxMsg.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.lbxMsg_KeyPress);
+ //
+ // groupBox1
+ //
+ this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.groupBox1.Controls.Add(this.label1);
+ this.groupBox1.Controls.Add(this.btnDisconn);
+ this.groupBox1.Controls.Add(this.txtDisConn);
+ this.groupBox1.Controls.Add(this.txtPort);
+ this.groupBox1.Controls.Add(this.txtIpAddress);
+ this.groupBox1.Controls.Add(this.btnStop);
+ this.groupBox1.Controls.Add(this.btnStart);
+ this.groupBox1.Location = new System.Drawing.Point(12, 2);
+ this.groupBox1.Name = "groupBox1";
+ this.groupBox1.Size = new System.Drawing.Size(462, 47);
+ this.groupBox1.TabIndex = 9;
+ this.groupBox1.TabStop = false;
+ //
+ // label1
+ //
+ this.label1.AutoSize = true;
+ this.label1.Location = new System.Drawing.Point(132, 22);
+ this.label1.Name = "label1";
+ this.label1.Size = new System.Drawing.Size(41, 12);
+ this.label1.TabIndex = 15;
+ this.label1.Text = "CONNID";
+ //
+ // btnDisconn
+ //
+ this.btnDisconn.Location = new System.Drawing.Point(223, 15);
+ this.btnDisconn.Name = "btnDisconn";
+ this.btnDisconn.Size = new System.Drawing.Size(33, 26);
+ this.btnDisconn.TabIndex = 14;
+ this.btnDisconn.Text = "Dis";
+ this.btnDisconn.UseVisualStyleBackColor = true;
+ this.btnDisconn.Click += new System.EventHandler(this.btnDisconn_Click);
+ //
+ // txtDisConn
+ //
+ this.txtDisConn.Location = new System.Drawing.Point(178, 18);
+ this.txtDisConn.Name = "txtDisConn";
+ this.txtDisConn.Size = new System.Drawing.Size(40, 21);
+ this.txtDisConn.TabIndex = 13;
+ this.txtDisConn.TextChanged += new System.EventHandler(this.txtDisConn_TextChanged);
+ //
+ // txtPort
+ //
+ this.txtPort.Location = new System.Drawing.Point(88, 18);
+ this.txtPort.Name = "txtPort";
+ this.txtPort.Size = new System.Drawing.Size(40, 21);
+ this.txtPort.TabIndex = 12;
+ this.txtPort.Text = "5555";
+ //
+ // txtIpAddress
+ //
+ this.txtIpAddress.Location = new System.Drawing.Point(11, 18);
+ this.txtIpAddress.Name = "txtIpAddress";
+ this.txtIpAddress.Size = new System.Drawing.Size(71, 21);
+ this.txtIpAddress.TabIndex = 11;
+ this.txtIpAddress.Text = "0.0.0.0";
+ //
+ // btnStop
+ //
+ this.btnStop.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnStop.Location = new System.Drawing.Point(403, 15);
+ this.btnStop.Name = "btnStop";
+ this.btnStop.Size = new System.Drawing.Size(47, 26);
+ this.btnStop.TabIndex = 10;
+ this.btnStop.Text = "Stop";
+ this.btnStop.UseVisualStyleBackColor = true;
+ this.btnStop.Click += new System.EventHandler(this.btnStop_Click);
+ //
+ // btnStart
+ //
+ this.btnStart.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnStart.Location = new System.Drawing.Point(350, 15);
+ this.btnStart.Name = "btnStart";
+ this.btnStart.Size = new System.Drawing.Size(47, 26);
+ this.btnStart.TabIndex = 9;
+ this.btnStart.Text = "Start";
+ this.btnStart.UseVisualStyleBackColor = true;
+ this.btnStart.Click += new System.EventHandler(this.btnStart_Click);
+ //
+ // frmServer
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(486, 377);
+ this.Controls.Add(this.groupBox1);
+ this.Controls.Add(this.lbxMsg);
+ this.Name = "frmServer";
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
+ this.Text = "Form1";
+ this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.frmServer_FormClosed);
+ this.Load += new System.EventHandler(this.Form1_Load);
+ this.groupBox1.ResumeLayout(false);
+ this.groupBox1.PerformLayout();
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.ListBox lbxMsg;
+ private System.Windows.Forms.GroupBox groupBox1;
+ private System.Windows.Forms.Label label1;
+ private System.Windows.Forms.Button btnDisconn;
+ private System.Windows.Forms.TextBox txtDisConn;
+ private System.Windows.Forms.TextBox txtPort;
+ private System.Windows.Forms.Button btnStop;
+ private System.Windows.Forms.Button btnStart;
+ private System.Windows.Forms.TextBox txtIpAddress;
+ }
+}
+
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullServer/frmServer.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullServer/frmServer.cs
new file mode 100644
index 000000000..c57f692bc
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullServer/frmServer.cs
@@ -0,0 +1,390 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using System.Runtime.InteropServices;
+using HPSocketCS;
+
+namespace TcpPullServer
+{
+ public enum AppState
+ {
+ Starting, Started, Stoping, Stoped, Error
+ }
+
+ public partial class frmServer : Form
+ {
+ private AppState appState = AppState.Stoped;
+
+ private delegate void ShowMsg(string msg);
+ private ShowMsg AddMsgDelegate;
+
+ HPSocketCS.TcpPullServer server = new HPSocketCS.TcpPullServer();
+
+
+ // 鍖呭ご澶у皬
+ int pkgHeaderSize = Marshal.SizeOf(new PkgHeader());
+
+ private string title = "Echo-TcpPullServer [ 'C' - clear list box ]";
+ public frmServer()
+ {
+ InitializeComponent();
+ }
+
+ private void Form1_Load(object sender, EventArgs e)
+ {
+ try
+ {
+
+ this.Text = title;
+ // 鏈満娴嬭瘯娌″繀瑕佹敼鍦板潃,鏈夐渶姹傝娉ㄩ噴鎴栧垹闄
+ this.txtIpAddress.ReadOnly = true;
+
+ // 鍔犱釜濮旀墭鏄剧ずmsg,鍥犱负on绯诲垪閮芥槸鍦ㄥ伐浣滅嚎绋嬩腑璋冪敤鐨,ui涓嶅厑璁哥洿鎺ユ搷浣
+ AddMsgDelegate = new ShowMsg(AddMsg);
+
+ // 璁剧疆鏈嶅姟鍣ㄤ簨浠
+ server.OnPrepareListen += new TcpServerEvent.OnPrepareListenEventHandler(OnPrepareListen);
+ server.OnAccept += new TcpServerEvent.OnAcceptEventHandler(OnAccept);
+ server.OnSend += new TcpServerEvent.OnSendEventHandler(OnSend);
+ server.OnReceive += new TcpPullServerEvent.OnReceiveEventHandler(OnReceive);
+ server.OnClose += new TcpServerEvent.OnCloseEventHandler(OnClose);
+ server.OnShutdown += new TcpServerEvent.OnShutdownEventHandler(OnShutdown);
+
+ SetAppState(AppState.Stoped);
+ }
+ catch (Exception ex)
+ {
+ SetAppState(AppState.Error);
+ AddMsg(ex.Message);
+ }
+ }
+
+ private void btnStart_Click(object sender, EventArgs e)
+ {
+ try
+ {
+ String ip = this.txtIpAddress.Text.Trim();
+ ushort port = ushort.Parse(this.txtPort.Text.Trim());
+
+ // 鍐欏湪杩欎釜浣嶇疆鏄笂闈㈠彲鑳戒細寮傚父
+ SetAppState(AppState.Starting);
+
+ server.IpAddress = ip;
+ server.Port = port;
+ // 鍚姩鏈嶅姟
+ if (server.Start())
+ {
+ this.Text = string.Format("{2} - ({0}:{1})", ip, port, title);
+ SetAppState(AppState.Started);
+ AddMsg(string.Format("$Server Start OK -> ({0}:{1})", ip, port));
+ }
+ else
+ {
+ SetAppState(AppState.Stoped);
+ throw new Exception(string.Format("$Server Start Error -> {0}({1})", server.ErrorMessage, server.ErrorCode));
+ }
+ }
+ catch (Exception ex)
+ {
+ AddMsg(ex.Message);
+ }
+ }
+
+ private void btnStop_Click(object sender, EventArgs e)
+ {
+ SetAppState(AppState.Stoping);
+
+ // 鍋滄鏈嶅姟
+ AddMsg("$Server Stop");
+ if (server.Stop())
+ {
+ this.Text = title;
+ SetAppState(AppState.Stoped);
+ }
+ else
+ {
+ AddMsg(string.Format("$Stop Error -> {0}({1})", server.ErrorMessage, server.ErrorCode));
+ }
+ }
+
+ private void btnDisconn_Click(object sender, EventArgs e)
+ {
+ try
+ {
+ IntPtr connId = (IntPtr)Convert.ToUInt32(this.txtDisConn.Text.Trim());
+
+ // 鏂紑鎸囧畾瀹㈡埛
+ if (server.Disconnect(connId, true))
+ {
+ AddMsg(string.Format("$({0}) Disconnect OK", connId));
+ }
+ else
+ {
+ throw new Exception(string.Format("Disconnect({0}) Error", connId));
+ }
+ }
+ catch (Exception ex)
+ {
+ AddMsg(ex.Message);
+ }
+ }
+
+
+ HandleResult OnPrepareListen(IntPtr soListen)
+ {
+ // 鐩戝惉浜嬩欢鍒拌揪浜,涓鑸病浠涔堢敤鍚?
+
+ return HandleResult.Ok;
+ }
+
+ HandleResult OnAccept(IntPtr connId, IntPtr pClient)
+ {
+ // 瀹㈡埛杩涘叆浜
+
+
+ // 鑾峰彇瀹㈡埛绔痠p鍜岀鍙
+ string ip = string.Empty;
+ ushort port = 0;
+ if (server.GetRemoteAddress(connId, ref ip, ref port))
+ {
+ AddMsg(string.Format(" > [{0},OnAccept] -> PASS({1}:{2})", connId, ip.ToString(), port));
+ }
+ else
+ {
+ AddMsg(string.Format(" > [{0},OnAccept] -> Server_GetClientAddress() Error", connId));
+ }
+
+
+ // 璁剧疆闄勫姞鏁版嵁
+ ClientInfo ci = new ClientInfo();
+ ci.ConnId = connId;
+ ci.IpAddress = ip;
+ ci.Port = port;
+ ci.PkgInfo = new PkgInfo()
+ {
+ IsHeader = true,
+ Length = pkgHeaderSize,
+ };
+ if (server.SetConnectionExtra(connId, ci) == false)
+ {
+ AddMsg(string.Format(" > [{0},OnAccept] -> SetConnectionExtra fail", connId));
+ }
+
+ return HandleResult.Ok;
+ }
+
+ HandleResult OnSend(IntPtr connId, byte[] bytes)
+ {
+ // 鏈嶅姟鍣ㄥ彂鏁版嵁浜
+
+
+ AddMsg(string.Format(" > [{0},OnSend] -> ({1} bytes)", connId, bytes.Length));
+
+ return HandleResult.Ok;
+ }
+
+ HandleResult OnReceive(IntPtr connId, int length)
+ {
+ // 鏁版嵁鍒拌揪浜
+ IntPtr clientPtr = IntPtr.Zero;
+ if (server.GetConnectionExtra(connId, ref clientPtr) == false)
+ {
+ return HandleResult.Error;
+ }
+ ClientInfo ci = (ClientInfo)Marshal.PtrToStructure(clientPtr, typeof(ClientInfo));
+ PkgInfo pkgInfo = ci.PkgInfo;
+
+
+ // 闇瑕侀暱搴
+ int required = pkgInfo.Length;
+
+ // 鍓╀綑澶у皬
+ int remain = length;
+
+ while (remain >= required)
+ {
+ IntPtr bufferPtr = IntPtr.Zero;
+ try
+ {
+ remain -= required;
+ bufferPtr = Marshal.AllocHGlobal(required); ;
+ if (server.Fetch(connId, bufferPtr, required) == FetchResult.Ok)
+ {
+ if (pkgInfo.IsHeader == true)
+ {
+ PkgHeader header = (PkgHeader)Marshal.PtrToStructure(bufferPtr, typeof(PkgHeader));
+
+ // 璋冭瘯淇℃伅
+ Console.WriteLine("[Server] head -> Id: {0}, BodySize: {1}\r\n", header.Id, header.BodySize);
+
+ required = header.BodySize;
+ }
+ else
+ {
+ // 璋冭瘯淇℃伅
+ string recvString = Marshal.PtrToStringAnsi(bufferPtr, required);
+ Console.WriteLine("[Server] body -> text: {0}\r\n", recvString);
+
+ // intptr杞瑂tring
+ //Marshal.PtrToStringAnsi(bufferPtr, required);
+
+ //intptr杞琤yte[]
+ // byte[] bytes = new byte[required];
+ // Marshal.Copy(bufferPtr, bytes, 0, required);
+
+ required = pkgHeaderSize;
+
+ }
+
+ AddMsg(string.Format(" > [{0},OnReceive] -> ({1} bytes)", connId, pkgInfo.Length));
+
+ // 鍥炲彂鏁版嵁
+ byte[] sendBytes = new byte[pkgInfo.Length];
+ Marshal.Copy(bufferPtr, sendBytes, 0, sendBytes.Length);
+ if (server.Send(connId, sendBytes, sendBytes.Length) == false)
+ {
+ throw new Exception("server.Send() == false");
+ }
+
+ // 鍦ㄥ悗闈㈣祴鍊,鍥犱负鍓嶉潰闇瑕佺敤鍒皃kgInfo.Length
+ pkgInfo.IsHeader = !pkgInfo.IsHeader;
+ pkgInfo.Length = required;
+ if (server.SetConnectionExtra(connId, ci) == false)
+ {
+ return HandleResult.Error;
+ }
+ }
+
+ }
+ catch
+ {
+ return HandleResult.Error;
+ }
+ finally
+ {
+ if (bufferPtr != IntPtr.Zero)
+ {
+ Marshal.FreeHGlobal(bufferPtr);
+ bufferPtr = IntPtr.Zero;
+ }
+ }
+ }
+
+ return HandleResult.Ok;
+ }
+
+ HandleResult OnClose(IntPtr connId, SocketOperation enOperation, int errorCode)
+ {
+ if(errorCode == 0)
+ // 瀹㈡埛绂诲紑浜
+ AddMsg(string.Format(" > [{0},OnClose]", connId));
+ else
+ // 瀹㈡埛鍑洪敊浜
+ AddMsg(string.Format(" > [{0},OnError] -> OP:{1},CODE:{2}", connId, enOperation, errorCode));
+ // return HPSocketSdk.HandleResult.Ok;
+
+ // 閲婃斁闄勫姞鏁版嵁
+ if (server.SetConnectionExtra(connId, null) == false)
+ {
+ AddMsg(string.Format(" > [{0},OnClose] -> SetConnectionExtra({0}, null) fail", connId));
+ }
+
+ return HandleResult.Ok;
+ }
+
+ HandleResult OnShutdown()
+ {
+ // 鏈嶅姟鍏抽棴浜
+
+
+ AddMsg(" > [OnShutdown]");
+ return HandleResult.Ok;
+ }
+
+
+ ///
+ /// 璁剧疆绋嬪簭鐘舵
+ ///
+ ///
+ void SetAppState(AppState state)
+ {
+ appState = state;
+ this.btnStart.Enabled = (appState == AppState.Stoped);
+ this.btnStop.Enabled = (appState == AppState.Started);
+ this.txtIpAddress.Enabled = (appState == AppState.Stoped);
+ this.txtPort.Enabled = (appState == AppState.Stoped);
+ this.txtDisConn.Enabled = (appState == AppState.Started);
+ this.btnDisconn.Enabled = (appState == AppState.Started && this.txtDisConn.Text.Length > 0);
+ }
+
+ ///
+ /// 寰listbox鍔犱竴鏉¢」鐩
+ ///
+ ///
+ void AddMsg(string msg)
+ {
+ if (this.lbxMsg.InvokeRequired)
+ {
+ // 寰堝竻鐨勮皟鑷繁
+ this.lbxMsg.Invoke(AddMsgDelegate, msg);
+ }
+ else
+ {
+ if (this.lbxMsg.Items.Count > 100)
+ {
+ this.lbxMsg.Items.RemoveAt(0);
+ }
+ this.lbxMsg.Items.Add(msg);
+ this.lbxMsg.TopIndex = this.lbxMsg.Items.Count - (int)(this.lbxMsg.Height / this.lbxMsg.ItemHeight);
+ }
+ }
+
+ private void txtDisConn_TextChanged(object sender, EventArgs e)
+ {
+ // CONNID妗嗚鏀瑰彉浜嬩欢
+ this.btnDisconn.Enabled = (appState == AppState.Started && this.txtDisConn.Text.Length > 0);
+ }
+
+ private void lbxMsg_KeyPress(object sender, KeyPressEventArgs e)
+ {
+ // 娓呯悊listbox
+ if (e.KeyChar == 'c' || e.KeyChar == 'C')
+ {
+ this.lbxMsg.Items.Clear();
+ }
+ }
+
+ private void frmServer_FormClosed(object sender, FormClosedEventArgs e)
+ {
+ server.Destroy();
+ }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ public class ClientInfo
+ {
+ public IntPtr ConnId { get; set; }
+ public string IpAddress { get; set; }
+ public ushort Port { get; set; }
+ public PkgInfo PkgInfo { get; set; }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ public class PkgHeader
+ {
+ public int Id;
+ public int BodySize;
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ public class PkgInfo
+ {
+ public bool IsHeader;
+ public int Length;
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullServer/frmServer.resx b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullServer/frmServer.resx
new file mode 100644
index 000000000..1af7de150
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullServer/frmServer.resx
@@ -0,0 +1,120 @@
+锘
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullServer/obj/x64/Release/DesignTimeResolveAssemblyReferencesInput.cache b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullServer/obj/x64/Release/DesignTimeResolveAssemblyReferencesInput.cache
new file mode 100644
index 000000000..d01556378
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullServer/obj/x64/Release/DesignTimeResolveAssemblyReferencesInput.cache differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullServer/obj/x64/Release/TcpPullServer.Properties.Resources.resources b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullServer/obj/x64/Release/TcpPullServer.Properties.Resources.resources
new file mode 100644
index 000000000..6c05a9776
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullServer/obj/x64/Release/TcpPullServer.Properties.Resources.resources differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullServer/obj/x64/Release/TcpPullServer.csproj.FileListAbsolute.txt b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullServer/obj/x64/Release/TcpPullServer.csproj.FileListAbsolute.txt
new file mode 100644
index 000000000..c5ede8caf
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullServer/obj/x64/Release/TcpPullServer.csproj.FileListAbsolute.txt
@@ -0,0 +1,7 @@
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\bin\x64\Release\TcpPullServer.exe
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\bin\x64\Release\TcpPullServer.pdb
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpPullServer\obj\x64\Release\TcpPullServer.frmServer.resources
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpPullServer\obj\x64\Release\TcpPullServer.Properties.Resources.resources
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpPullServer\obj\x64\Release\TcpPullServer.csproj.GenerateResource.Cache
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpPullServer\obj\x64\Release\TcpPullServer.exe
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpPullServer\obj\x64\Release\TcpPullServer.pdb
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullServer/obj/x64/Release/TcpPullServer.csproj.GenerateResource.Cache b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullServer/obj/x64/Release/TcpPullServer.csproj.GenerateResource.Cache
new file mode 100644
index 000000000..e793f6a97
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullServer/obj/x64/Release/TcpPullServer.csproj.GenerateResource.Cache differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullServer/obj/x64/Release/TcpPullServer.exe b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullServer/obj/x64/Release/TcpPullServer.exe
new file mode 100644
index 000000000..174f0c09d
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullServer/obj/x64/Release/TcpPullServer.exe differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullServer/obj/x64/Release/TcpPullServer.frmServer.resources b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullServer/obj/x64/Release/TcpPullServer.frmServer.resources
new file mode 100644
index 000000000..6c05a9776
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullServer/obj/x64/Release/TcpPullServer.frmServer.resources differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullServer/obj/x86/Release/DesignTimeResolveAssemblyReferencesInput.cache b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullServer/obj/x86/Release/DesignTimeResolveAssemblyReferencesInput.cache
new file mode 100644
index 000000000..74335c9a3
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullServer/obj/x86/Release/DesignTimeResolveAssemblyReferencesInput.cache differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullServer/obj/x86/Release/TcpPullServer.Properties.Resources.resources b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullServer/obj/x86/Release/TcpPullServer.Properties.Resources.resources
new file mode 100644
index 000000000..6c05a9776
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullServer/obj/x86/Release/TcpPullServer.Properties.Resources.resources differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullServer/obj/x86/Release/TcpPullServer.csproj.FileListAbsolute.txt b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullServer/obj/x86/Release/TcpPullServer.csproj.FileListAbsolute.txt
new file mode 100644
index 000000000..2d6ef1cfe
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullServer/obj/x86/Release/TcpPullServer.csproj.FileListAbsolute.txt
@@ -0,0 +1,7 @@
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\bin\x86\Release\TcpPullServer.exe
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\bin\x86\Release\TcpPullServer.pdb
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpPullServer\obj\x86\Release\TcpPullServer.frmServer.resources
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpPullServer\obj\x86\Release\TcpPullServer.Properties.Resources.resources
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpPullServer\obj\x86\Release\TcpPullServer.csproj.GenerateResource.Cache
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpPullServer\obj\x86\Release\TcpPullServer.exe
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpPullServer\obj\x86\Release\TcpPullServer.pdb
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullServer/obj/x86/Release/TcpPullServer.csproj.GenerateResource.Cache b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullServer/obj/x86/Release/TcpPullServer.csproj.GenerateResource.Cache
new file mode 100644
index 000000000..e793f6a97
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullServer/obj/x86/Release/TcpPullServer.csproj.GenerateResource.Cache differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullServer/obj/x86/Release/TcpPullServer.exe b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullServer/obj/x86/Release/TcpPullServer.exe
new file mode 100644
index 000000000..03e41b6a8
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullServer/obj/x86/Release/TcpPullServer.exe differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullServer/obj/x86/Release/TcpPullServer.frmServer.resources b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullServer/obj/x86/Release/TcpPullServer.frmServer.resources
new file mode 100644
index 000000000..6c05a9776
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullServer/obj/x86/Release/TcpPullServer.frmServer.resources differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullServer/obj/x86/Release/TempPE/Properties.Resources.Designer.cs.dll b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullServer/obj/x86/Release/TempPE/Properties.Resources.Designer.cs.dll
new file mode 100644
index 000000000..2b1af042d
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpPullServer/obj/x86/Release/TempPE/Properties.Resources.Designer.cs.dll differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer-PFM/Program.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer-PFM/Program.cs
new file mode 100644
index 000000000..4709309e1
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer-PFM/Program.cs
@@ -0,0 +1,21 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Windows.Forms;
+
+namespace SSLServerNS
+{
+ static class Program
+ {
+ ///
+ /// 搴旂敤绋嬪簭鐨勪富鍏ュ彛鐐广
+ ///
+ [STAThread]
+ static void Main()
+ {
+ Application.EnableVisualStyles();
+ Application.SetCompatibleTextRenderingDefault(false);
+ Application.Run(new frmServer());
+ }
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer-PFM/Properties/AssemblyInfo.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer-PFM/Properties/AssemblyInfo.cs
new file mode 100644
index 000000000..4b7bccb2d
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer-PFM/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+锘縰sing System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 鏈夊叧绋嬪簭闆嗙殑甯歌淇℃伅閫氳繃浠ヤ笅
+// 鐗规ч泦鎺у埗銆傛洿鏀硅繖浜涚壒鎬у煎彲淇敼
+// 涓庣▼搴忛泦鍏宠仈鐨勪俊鎭
+[assembly: AssemblyTitle("Server")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Server")]
+[assembly: AssemblyCopyright("Copyright 漏 2014")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 灏 ComVisible 璁剧疆涓 false 浣挎绋嬪簭闆嗕腑鐨勭被鍨
+// 瀵 COM 缁勪欢涓嶅彲瑙併傚鏋滈渶瑕佷粠 COM 璁块棶姝ょ▼搴忛泦涓殑绫诲瀷锛
+// 鍒欏皢璇ョ被鍨嬩笂鐨 ComVisible 鐗规ц缃负 true銆
+[assembly: ComVisible(false)]
+
+// 濡傛灉姝ら」鐩悜 COM 鍏紑锛屽垯涓嬪垪 GUID 鐢ㄤ簬绫诲瀷搴撶殑 ID
+[assembly: Guid("a8f79261-fd62-4f4b-aed5-01bf44660ad1")]
+
+// 绋嬪簭闆嗙殑鐗堟湰淇℃伅鐢变笅闈㈠洓涓肩粍鎴:
+//
+// 涓荤増鏈
+// 娆$増鏈
+// 鍐呴儴鐗堟湰鍙
+// 淇鍙
+//
+// 鍙互鎸囧畾鎵鏈夎繖浜涘硷紝涔熷彲浠ヤ娇鐢ㄢ滃唴閮ㄧ増鏈彿鈥濆拰鈥滀慨璁㈠彿鈥濈殑榛樿鍊硷紝
+// 鏂规硶鏄寜濡備笅鎵绀轰娇鐢ㄢ*鈥:
+
+[assembly: AssemblyVersion("3.5.2")]
+[assembly: AssemblyFileVersion("3.5.2")]
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer-PFM/Properties/Resources.Designer.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer-PFM/Properties/Resources.Designer.cs
new file mode 100644
index 000000000..a153e347f
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer-PFM/Properties/Resources.Designer.cs
@@ -0,0 +1,63 @@
+锘//------------------------------------------------------------------------------
+//
+// 姝や唬鐮佺敱宸ュ叿鐢熸垚銆
+// 杩愯鏃剁増鏈:4.0.30319.18444
+//
+// 瀵规鏂囦欢鐨勬洿鏀瑰彲鑳戒細瀵艰嚧涓嶆纭殑琛屼负锛屽苟涓斿鏋
+// 閲嶆柊鐢熸垚浠g爜锛岃繖浜涙洿鏀瑰皢浼氫涪澶便
+//
+//------------------------------------------------------------------------------
+
+namespace SSLServerNS.Properties {
+ using System;
+
+
+ ///
+ /// 涓涓己绫诲瀷鐨勮祫婧愮被锛岀敤浜庢煡鎵炬湰鍦板寲鐨勫瓧绗︿覆绛夈
+ ///
+ // 姝ょ被鏄敱 StronglyTypedResourceBuilder
+ // 绫婚氳繃绫讳技浜 ResGen 鎴 Visual Studio 鐨勫伐鍏疯嚜鍔ㄧ敓鎴愮殑銆
+ // 鑻ヨ娣诲姞鎴栫Щ闄ゆ垚鍛橈紝璇风紪杈 .ResX 鏂囦欢锛岀劧鍚庨噸鏂拌繍琛 ResGen
+ // (浠 /str 浣滀负鍛戒护閫夐」)锛屾垨閲嶆柊鐢熸垚 VS 椤圭洰銆
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ internal class Resources {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources() {
+ }
+
+ ///
+ /// 杩斿洖姝ょ被浣跨敤鐨勭紦瀛樼殑 ResourceManager 瀹炰緥銆
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager {
+ get {
+ if (object.ReferenceEquals(resourceMan, null)) {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("TcpServer_PFM.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// 浣跨敤姝ゅ己绫诲瀷璧勬簮绫伙紝涓烘墍鏈夎祫婧愭煡鎵
+ /// 閲嶅啓褰撳墠绾跨▼鐨 CurrentUICulture 灞炴с
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer-PFM/Properties/Resources.resx b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer-PFM/Properties/Resources.resx
new file mode 100644
index 000000000..af7dbebba
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer-PFM/Properties/Resources.resx
@@ -0,0 +1,117 @@
+锘
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer-PFM/Properties/Settings.Designer.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer-PFM/Properties/Settings.Designer.cs
new file mode 100644
index 000000000..e229d5424
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer-PFM/Properties/Settings.Designer.cs
@@ -0,0 +1,26 @@
+锘//------------------------------------------------------------------------------
+//
+// 姝や唬鐮佺敱宸ュ叿鐢熸垚銆
+// 杩愯鏃剁増鏈:4.0.30319.18444
+//
+// 瀵规鏂囦欢鐨勬洿鏀瑰彲鑳戒細瀵艰嚧涓嶆纭殑琛屼负锛屽苟涓斿鏋
+// 閲嶆柊鐢熸垚浠g爜锛岃繖浜涙洿鏀瑰皢浼氫涪澶便
+//
+//------------------------------------------------------------------------------
+
+namespace SSLServerNS.Properties {
+
+
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")]
+ internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+
+ private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+ public static Settings Default {
+ get {
+ return defaultInstance;
+ }
+ }
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer-PFM/Properties/Settings.settings b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer-PFM/Properties/Settings.settings
new file mode 100644
index 000000000..39645652a
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer-PFM/Properties/Settings.settings
@@ -0,0 +1,7 @@
+锘
+
+
+
+
+
+
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer-PFM/TcpServer-PFM.csproj b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer-PFM/TcpServer-PFM.csproj
new file mode 100644
index 000000000..b55bdcd4a
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer-PFM/TcpServer-PFM.csproj
@@ -0,0 +1,122 @@
+锘
+
+
+ Debug
+ x86
+ 8.0.30703
+ 2.0
+ {10426A79-A3B3-4CD2-BD84-02AAEE27FB75}
+ WinExe
+ Properties
+ TcpServer_PFM
+ TcpServer-PFM
+ v4.0
+ Client
+ 512
+
+
+ x86
+ true
+ full
+ false
+ ..\bin\x86\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ x86
+ pdbonly
+ true
+ ..\bin\x86\Release\
+ TRACE
+ prompt
+ 4
+
+
+ true
+ ..\bin\x64\Debug\
+ DEBUG;TRACE
+ full
+ x64
+ ..\bin\Debug\TcpServer-PFM.exe.CodeAnalysisLog.xml
+ true
+ GlobalSuppressions.cs
+ prompt
+ MinimumRecommendedRules.ruleset
+ ;D:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets
+ ;D:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules
+
+
+ ..\bin\x64\Release\
+ TRACE
+ true
+ pdbonly
+ x64
+ ..\bin\Release\TcpServer-PFM.exe.CodeAnalysisLog.xml
+ true
+ GlobalSuppressions.cs
+ prompt
+ MinimumRecommendedRules.ruleset
+ ;D:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets
+ ;D:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Form
+
+
+ frmServer.cs
+
+
+
+
+ frmServer.cs
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+ Designer
+
+
+ True
+ Resources.resx
+ True
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
+ True
+ Settings.settings
+ True
+
+
+
+
+ {DFA935E2-CF37-4E26-B697-D7F3DEE19DD8}
+ HPSocketCS
+
+
+
+
+
\ No newline at end of file
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer-PFM/frmServer.Designer.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer-PFM/frmServer.Designer.cs
new file mode 100644
index 000000000..28f76f2a9
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer-PFM/frmServer.Designer.cs
@@ -0,0 +1,169 @@
+锘縩amespace SSLServerNS
+{
+ partial class frmServer
+ {
+ ///
+ /// 蹇呴渶鐨勮璁″櫒鍙橀噺銆
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// 娓呯悊鎵鏈夋鍦ㄤ娇鐢ㄧ殑璧勬簮銆
+ ///
+ /// 濡傛灉搴旈噴鏀炬墭绠¤祫婧愶紝涓 true锛涘惁鍒欎负 false銆
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows 绐椾綋璁捐鍣ㄧ敓鎴愮殑浠g爜
+
+ ///
+ /// 璁捐鍣ㄦ敮鎸佹墍闇鐨勬柟娉 - 涓嶈
+ /// 浣跨敤浠g爜缂栬緫鍣ㄤ慨鏀规鏂规硶鐨勫唴瀹广
+ ///
+ private void InitializeComponent()
+ {
+ this.lbxMsg = new System.Windows.Forms.ListBox();
+ this.groupBox1 = new System.Windows.Forms.GroupBox();
+ this.label1 = new System.Windows.Forms.Label();
+ this.btnDisconn = new System.Windows.Forms.Button();
+ this.txtDisConn = new System.Windows.Forms.TextBox();
+ this.txtPort = new System.Windows.Forms.TextBox();
+ this.txtIpAddress = new System.Windows.Forms.TextBox();
+ this.btnStop = new System.Windows.Forms.Button();
+ this.btnStart = new System.Windows.Forms.Button();
+ this.groupBox1.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // lbxMsg
+ //
+ this.lbxMsg.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.lbxMsg.FormattingEnabled = true;
+ this.lbxMsg.ItemHeight = 12;
+ this.lbxMsg.Location = new System.Drawing.Point(11, 62);
+ this.lbxMsg.Name = "lbxMsg";
+ this.lbxMsg.Size = new System.Drawing.Size(465, 304);
+ this.lbxMsg.TabIndex = 4;
+ this.lbxMsg.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.lbxMsg_KeyPress);
+ //
+ // groupBox1
+ //
+ this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.groupBox1.Controls.Add(this.label1);
+ this.groupBox1.Controls.Add(this.btnDisconn);
+ this.groupBox1.Controls.Add(this.txtDisConn);
+ this.groupBox1.Controls.Add(this.txtPort);
+ this.groupBox1.Controls.Add(this.txtIpAddress);
+ this.groupBox1.Controls.Add(this.btnStop);
+ this.groupBox1.Controls.Add(this.btnStart);
+ this.groupBox1.Location = new System.Drawing.Point(12, 2);
+ this.groupBox1.Name = "groupBox1";
+ this.groupBox1.Size = new System.Drawing.Size(462, 47);
+ this.groupBox1.TabIndex = 9;
+ this.groupBox1.TabStop = false;
+ //
+ // label1
+ //
+ this.label1.AutoSize = true;
+ this.label1.Location = new System.Drawing.Point(132, 22);
+ this.label1.Name = "label1";
+ this.label1.Size = new System.Drawing.Size(41, 12);
+ this.label1.TabIndex = 15;
+ this.label1.Text = "CONNID";
+ //
+ // btnDisconn
+ //
+ this.btnDisconn.Location = new System.Drawing.Point(223, 15);
+ this.btnDisconn.Name = "btnDisconn";
+ this.btnDisconn.Size = new System.Drawing.Size(33, 26);
+ this.btnDisconn.TabIndex = 14;
+ this.btnDisconn.Text = "Dis";
+ this.btnDisconn.UseVisualStyleBackColor = true;
+ this.btnDisconn.Click += new System.EventHandler(this.btnDisconn_Click);
+ //
+ // txtDisConn
+ //
+ this.txtDisConn.Location = new System.Drawing.Point(178, 18);
+ this.txtDisConn.Name = "txtDisConn";
+ this.txtDisConn.Size = new System.Drawing.Size(40, 21);
+ this.txtDisConn.TabIndex = 13;
+ this.txtDisConn.TextChanged += new System.EventHandler(this.txtDisConn_TextChanged);
+ //
+ // txtPort
+ //
+ this.txtPort.Location = new System.Drawing.Point(88, 18);
+ this.txtPort.Name = "txtPort";
+ this.txtPort.Size = new System.Drawing.Size(40, 21);
+ this.txtPort.TabIndex = 12;
+ this.txtPort.Text = "5555";
+ //
+ // txtIpAddress
+ //
+ this.txtIpAddress.Location = new System.Drawing.Point(11, 18);
+ this.txtIpAddress.Name = "txtIpAddress";
+ this.txtIpAddress.Size = new System.Drawing.Size(71, 21);
+ this.txtIpAddress.TabIndex = 11;
+ this.txtIpAddress.Text = "0.0.0.0";
+ //
+ // btnStop
+ //
+ this.btnStop.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnStop.Location = new System.Drawing.Point(403, 15);
+ this.btnStop.Name = "btnStop";
+ this.btnStop.Size = new System.Drawing.Size(47, 26);
+ this.btnStop.TabIndex = 10;
+ this.btnStop.Text = "Stop";
+ this.btnStop.UseVisualStyleBackColor = true;
+ this.btnStop.Click += new System.EventHandler(this.btnStop_Click);
+ //
+ // btnStart
+ //
+ this.btnStart.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnStart.Location = new System.Drawing.Point(350, 15);
+ this.btnStart.Name = "btnStart";
+ this.btnStart.Size = new System.Drawing.Size(47, 26);
+ this.btnStart.TabIndex = 9;
+ this.btnStart.Text = "Start";
+ this.btnStart.UseVisualStyleBackColor = true;
+ this.btnStart.Click += new System.EventHandler(this.btnStart_Click);
+ //
+ // frmServer
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(486, 377);
+ this.Controls.Add(this.groupBox1);
+ this.Controls.Add(this.lbxMsg);
+ this.Name = "frmServer";
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
+ this.Text = "Form1";
+ this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.frmServer_FormClosed);
+ this.Load += new System.EventHandler(this.Form1_Load);
+ this.groupBox1.ResumeLayout(false);
+ this.groupBox1.PerformLayout();
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.ListBox lbxMsg;
+ private System.Windows.Forms.GroupBox groupBox1;
+ private System.Windows.Forms.Label label1;
+ private System.Windows.Forms.Button btnDisconn;
+ private System.Windows.Forms.TextBox txtDisConn;
+ private System.Windows.Forms.TextBox txtPort;
+ private System.Windows.Forms.Button btnStop;
+ private System.Windows.Forms.Button btnStart;
+ private System.Windows.Forms.TextBox txtIpAddress;
+ }
+}
+
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer-PFM/frmServer.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer-PFM/frmServer.cs
new file mode 100644
index 000000000..b767af1d9
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer-PFM/frmServer.cs
@@ -0,0 +1,338 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using System.Runtime.InteropServices;
+using HPSocketCS;
+using System.Threading;
+
+namespace SSLServerNS
+{
+ public enum AppState
+ {
+ Starting, Started, Stoping, Stoped, Error
+ }
+
+ public partial class frmServer : Form
+ {
+ private AppState appState = AppState.Stoped;
+
+ private delegate void ShowMsg(string msg);
+ private ShowMsg AddMsgDelegate;
+
+ HPSocketCS.TcpServer server = new HPSocketCS.TcpServer();
+
+ private static string title = "Echo-PFM Server [ 'C' - clear list box, 'R' - reset statics data ]";
+
+
+ private long totalReceived = 0;
+ private long totalSent = 0;
+ private long clientCount = 0;
+
+
+
+ public frmServer()
+ {
+ InitializeComponent();
+ }
+
+ private void Form1_Load(object sender, EventArgs e)
+ {
+ try
+ {
+
+ this.Text = title;
+ // 鏈満娴嬭瘯娌″繀瑕佹敼鍦板潃,鏈夐渶姹傝娉ㄩ噴鎴栧垹闄
+ this.txtIpAddress.ReadOnly = true;
+
+ // 鍔犱釜濮旀墭鏄剧ずmsg,鍥犱负on绯诲垪閮芥槸鍦ㄥ伐浣滅嚎绋嬩腑璋冪敤鐨,ui涓嶅厑璁哥洿鎺ユ搷浣
+ AddMsgDelegate = new ShowMsg(AddMsg);
+
+ // 璁剧疆鏈嶅姟鍣ㄤ簨浠
+ server.OnPrepareListen += new TcpServerEvent.OnPrepareListenEventHandler(OnPrepareListen);
+ server.OnAccept += new TcpServerEvent.OnAcceptEventHandler(OnAccept);
+ server.OnSend += new TcpServerEvent.OnSendEventHandler(OnSend);
+ server.OnReceive += new TcpServerEvent.OnReceiveEventHandler(OnReceive);
+ server.OnClose += new TcpServerEvent.OnCloseEventHandler(OnClose);
+ server.OnShutdown += new TcpServerEvent.OnShutdownEventHandler(OnShutdown);
+
+ SetAppState(AppState.Stoped);
+ }
+ catch (Exception ex)
+ {
+ SetAppState(AppState.Error);
+ AddMsg(ex.Message);
+ }
+ }
+
+ private void btnStart_Click(object sender, EventArgs e)
+ {
+ try
+ {
+ String ip = this.txtIpAddress.Text.Trim();
+ ushort port = ushort.Parse(this.txtPort.Text.Trim());
+
+ // 鍐欏湪杩欎釜浣嶇疆鏄笂闈㈠彲鑳戒細寮傚父
+ SetAppState(AppState.Starting);
+
+ Reset();
+
+ server.IpAddress = ip;
+ server.Port = port;
+
+ // 鍚姩鏈嶅姟
+ if (server.Start())
+ {
+ this.Text = string.Format("{2} - ({0}:{1})", ip, port, title);
+ SetAppState(AppState.Started);
+ AddMsg(string.Format("$Server Start OK -> ({0}:{1})", ip, port));
+ }
+ else
+ {
+ SetAppState(AppState.Stoped);
+ throw new Exception(string.Format("$Server Start Error -> {0}({1})", server.ErrorMessage, server.ErrorCode));
+ }
+ }
+ catch (Exception ex)
+ {
+ AddMsg(ex.Message);
+ }
+ }
+
+ private void btnStop_Click(object sender, EventArgs e)
+ {
+ SetAppState(AppState.Stoping);
+
+ // 鍋滄鏈嶅姟
+ AddMsg("$Server Stop");
+ if (server.Stop())
+ {
+ this.Text = title;
+ SetAppState(AppState.Stoped);
+ }
+ else
+ {
+ AddMsg(string.Format("$Stop Error -> {0}({1})", server.ErrorMessage, server.ErrorCode));
+ }
+ }
+
+ private void btnDisconn_Click(object sender, EventArgs e)
+ {
+ try
+ {
+ IntPtr connId = (IntPtr)Convert.ToUInt32(this.txtDisConn.Text.Trim());
+
+ // 鏂紑鎸囧畾瀹㈡埛
+ if (server.Disconnect(connId, true))
+ {
+ AddMsg(string.Format("$({0}) Disconnect OK", connId));
+ }
+ else
+ {
+ throw new Exception(string.Format("Disconnect({0}) Error", connId));
+ }
+ }
+ catch (Exception ex)
+ {
+ AddMsg(ex.Message);
+ }
+ }
+
+ void Reset(bool isSetClientCount = true)
+ {
+ if (isSetClientCount)
+ {
+ clientCount = 0;
+ }
+
+ totalReceived = 0;
+ totalSent = 0;
+ }
+
+ HandleResult OnPrepareListen(IntPtr soListen)
+ {
+ // 鐩戝惉浜嬩欢鍒拌揪浜,涓鑸病浠涔堢敤鍚?
+
+ return HandleResult.Ok;
+ }
+
+ HandleResult OnAccept(IntPtr connId, IntPtr pClient)
+ {
+ // 瀹㈡埛杩涘叆浜
+ if (clientCount == 0)
+ {
+ lock (title)
+ {
+ if (clientCount == 0)
+ {
+ Reset(false);
+ }
+ }
+ }
+
+ Interlocked.Increment(ref clientCount);
+
+ // 鑾峰彇瀹㈡埛绔痠p鍜岀鍙
+ string ip = string.Empty;
+ ushort port = 0;
+ if (server.GetRemoteAddress(connId, ref ip, ref port))
+ {
+ AddMsg(string.Format(" > [{0},OnAccept] -> PASS({1}:{2})", connId, ip.ToString(), port));
+ }
+ else
+ {
+ AddMsg(string.Format(" > [{0},OnAccept] -> Server_GetClientAddress() Error", connId));
+ }
+
+ return HandleResult.Ok;
+ }
+
+ HandleResult OnSend(IntPtr connId, byte[] bytes)
+ {
+ // 鏈嶅姟鍣ㄥ彂鏁版嵁浜
+ Interlocked.Add(ref totalSent, bytes.Length);
+
+ //AddMsg(string.Format(" > [{0},OnSend] -> ({1} bytes)", connId, length));
+
+ return HandleResult.Ok;
+ }
+
+ HandleResult OnReceive(IntPtr connId, byte[] bytes)
+ {
+ // 鏁版嵁鍒拌揪浜
+
+ Interlocked.Add(ref totalReceived, bytes.Length);
+
+ if (server.Send(connId, bytes, bytes.Length))
+ {
+ return HandleResult.Ok;
+ }
+
+ return HandleResult.Error;
+
+ }
+
+ HandleResult OnClose(IntPtr connId, SocketOperation enOperation, int errorCode)
+ {
+ if(errorCode == 0)
+ AddMsg(string.Format(" > [{0},OnClose]", connId));
+ else
+ AddMsg(string.Format(" > [{0},OnError] -> OP:{1},CODE:{2}", connId, enOperation, errorCode));
+
+ Calculate();
+
+ return HandleResult.Ok;
+ }
+
+ HandleResult OnShutdown()
+ {
+ // 鏈嶅姟鍏抽棴浜
+
+
+ AddMsg(" > [OnShutdown]");
+ return HandleResult.Ok;
+ }
+
+ void Calculate()
+ {
+ if(clientCount > 0)
+ {
+ lock(title)
+ {
+
+ if(clientCount > 0)
+ {
+ Interlocked.Decrement(ref clientCount);
+
+ if(clientCount == 0)
+ {
+ //::WaitWithMessageLoop(600L);
+ Thread tmpThread = new Thread(ShowTotalMsg);
+ tmpThread.Start();
+ }
+ }
+ }
+ }
+ }
+
+ void ShowTotalMsg()
+ {
+ Thread.Sleep(600);
+ AddMsg(string.Format(" *** Summary: send - {0}, recv - {1}", totalSent, totalReceived));
+ }
+
+ ///
+ /// 璁剧疆绋嬪簭鐘舵
+ ///
+ ///
+ void SetAppState(AppState state)
+ {
+ appState = state;
+ this.btnStart.Enabled = (appState == AppState.Stoped);
+ this.btnStop.Enabled = (appState == AppState.Started);
+ this.txtIpAddress.Enabled = (appState == AppState.Stoped);
+ this.txtPort.Enabled = (appState == AppState.Stoped);
+ this.txtDisConn.Enabled = (appState == AppState.Started);
+ this.btnDisconn.Enabled = (appState == AppState.Started && this.txtDisConn.Text.Length > 0);
+ }
+
+ ///
+ /// 寰listbox鍔犱竴鏉¢」鐩
+ ///
+ ///
+ void AddMsg(string msg)
+ {
+ if (this.lbxMsg.InvokeRequired)
+ {
+ // 寰堝竻鐨勮皟鑷繁
+ this.lbxMsg.Invoke(AddMsgDelegate, msg);
+ }
+ else
+ {
+ if (this.lbxMsg.Items.Count > 100)
+ {
+ this.lbxMsg.Items.RemoveAt(0);
+ }
+ this.lbxMsg.Items.Add(msg);
+ this.lbxMsg.TopIndex = this.lbxMsg.Items.Count - (int)(this.lbxMsg.Height / this.lbxMsg.ItemHeight);
+ }
+ }
+
+ private void txtDisConn_TextChanged(object sender, EventArgs e)
+ {
+ // CONNID妗嗚鏀瑰彉浜嬩欢
+ this.btnDisconn.Enabled = (appState == AppState.Started && this.txtDisConn.Text.Length > 0);
+ }
+
+ private void lbxMsg_KeyPress(object sender, KeyPressEventArgs e)
+ {
+ // 娓呯悊listbox
+ if (e.KeyChar == 'c' || e.KeyChar == 'C')
+ {
+ this.lbxMsg.Items.Clear();
+ }
+ else if (e.KeyChar == 'r' || e.KeyChar == 'R')
+ {
+ Reset();
+ AddMsg(string.Format(" *** Reset Statics: CC - {0}, TS - {1}, TR - {2}", clientCount, totalSent, totalReceived));
+ }
+ }
+
+ private void frmServer_FormClosed(object sender, FormClosedEventArgs e)
+ {
+ server.Destroy();
+ }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ public class ClientInfo
+ {
+ public uint ConnId { get; set; }
+ public string IpAddress { get; set; }
+ public ushort Port { get; set; }
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer-PFM/frmServer.resx b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer-PFM/frmServer.resx
new file mode 100644
index 000000000..1af7de150
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer-PFM/frmServer.resx
@@ -0,0 +1,120 @@
+锘
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer-PFM/obj/x64/Release/DesignTimeResolveAssemblyReferencesInput.cache b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer-PFM/obj/x64/Release/DesignTimeResolveAssemblyReferencesInput.cache
new file mode 100644
index 000000000..8d0e01c1d
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer-PFM/obj/x64/Release/DesignTimeResolveAssemblyReferencesInput.cache differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer-PFM/obj/x64/Release/SSLServerNS.frmServer.resources b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer-PFM/obj/x64/Release/SSLServerNS.frmServer.resources
new file mode 100644
index 000000000..6c05a9776
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer-PFM/obj/x64/Release/SSLServerNS.frmServer.resources differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer-PFM/obj/x64/Release/TcpServer-PFM.csproj.FileListAbsolute.txt b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer-PFM/obj/x64/Release/TcpServer-PFM.csproj.FileListAbsolute.txt
new file mode 100644
index 000000000..551c7aa06
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer-PFM/obj/x64/Release/TcpServer-PFM.csproj.FileListAbsolute.txt
@@ -0,0 +1,7 @@
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\bin\x64\Release\TcpServer-PFM.exe
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\bin\x64\Release\TcpServer-PFM.pdb
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpServer-PFM\obj\x64\Release\SSLServerNS.frmServer.resources
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpServer-PFM\obj\x64\Release\TcpServer_PFM.Properties.Resources.resources
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpServer-PFM\obj\x64\Release\TcpServer-PFM.csproj.GenerateResource.Cache
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpServer-PFM\obj\x64\Release\TcpServer-PFM.exe
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpServer-PFM\obj\x64\Release\TcpServer-PFM.pdb
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer-PFM/obj/x64/Release/TcpServer-PFM.csproj.GenerateResource.Cache b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer-PFM/obj/x64/Release/TcpServer-PFM.csproj.GenerateResource.Cache
new file mode 100644
index 000000000..e793f6a97
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer-PFM/obj/x64/Release/TcpServer-PFM.csproj.GenerateResource.Cache differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer-PFM/obj/x64/Release/TcpServer-PFM.exe b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer-PFM/obj/x64/Release/TcpServer-PFM.exe
new file mode 100644
index 000000000..c5b5a5a90
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer-PFM/obj/x64/Release/TcpServer-PFM.exe differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer-PFM/obj/x64/Release/TcpServer_PFM.Properties.Resources.resources b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer-PFM/obj/x64/Release/TcpServer_PFM.Properties.Resources.resources
new file mode 100644
index 000000000..6c05a9776
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer-PFM/obj/x64/Release/TcpServer_PFM.Properties.Resources.resources differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer-PFM/obj/x86/Release/DesignTimeResolveAssemblyReferencesInput.cache b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer-PFM/obj/x86/Release/DesignTimeResolveAssemblyReferencesInput.cache
new file mode 100644
index 000000000..854cc22fe
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer-PFM/obj/x86/Release/DesignTimeResolveAssemblyReferencesInput.cache differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer-PFM/obj/x86/Release/SSLServerNS.frmServer.resources b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer-PFM/obj/x86/Release/SSLServerNS.frmServer.resources
new file mode 100644
index 000000000..6c05a9776
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer-PFM/obj/x86/Release/SSLServerNS.frmServer.resources differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer-PFM/obj/x86/Release/TcpServer-PFM.csproj.FileListAbsolute.txt b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer-PFM/obj/x86/Release/TcpServer-PFM.csproj.FileListAbsolute.txt
new file mode 100644
index 000000000..38e4983dc
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer-PFM/obj/x86/Release/TcpServer-PFM.csproj.FileListAbsolute.txt
@@ -0,0 +1,7 @@
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\bin\x86\Release\TcpServer-PFM.exe
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\bin\x86\Release\TcpServer-PFM.pdb
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpServer-PFM\obj\x86\Release\SSLServerNS.frmServer.resources
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpServer-PFM\obj\x86\Release\TcpServer_PFM.Properties.Resources.resources
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpServer-PFM\obj\x86\Release\TcpServer-PFM.csproj.GenerateResource.Cache
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpServer-PFM\obj\x86\Release\TcpServer-PFM.exe
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpServer-PFM\obj\x86\Release\TcpServer-PFM.pdb
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer-PFM/obj/x86/Release/TcpServer-PFM.csproj.GenerateResource.Cache b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer-PFM/obj/x86/Release/TcpServer-PFM.csproj.GenerateResource.Cache
new file mode 100644
index 000000000..e793f6a97
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer-PFM/obj/x86/Release/TcpServer-PFM.csproj.GenerateResource.Cache differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer-PFM/obj/x86/Release/TcpServer-PFM.exe b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer-PFM/obj/x86/Release/TcpServer-PFM.exe
new file mode 100644
index 000000000..5d4f45fbd
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer-PFM/obj/x86/Release/TcpServer-PFM.exe differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer-PFM/obj/x86/Release/TcpServer_PFM.Properties.Resources.resources b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer-PFM/obj/x86/Release/TcpServer_PFM.Properties.Resources.resources
new file mode 100644
index 000000000..6c05a9776
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer-PFM/obj/x86/Release/TcpServer_PFM.Properties.Resources.resources differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer-PFM/obj/x86/Release/TempPE/Properties.Resources.Designer.cs.dll b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer-PFM/obj/x86/Release/TempPE/Properties.Resources.Designer.cs.dll
new file mode 100644
index 000000000..78089d564
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer-PFM/obj/x86/Release/TempPE/Properties.Resources.Designer.cs.dll differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer/Program.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer/Program.cs
new file mode 100644
index 000000000..4709309e1
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer/Program.cs
@@ -0,0 +1,21 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Windows.Forms;
+
+namespace SSLServerNS
+{
+ static class Program
+ {
+ ///
+ /// 搴旂敤绋嬪簭鐨勪富鍏ュ彛鐐广
+ ///
+ [STAThread]
+ static void Main()
+ {
+ Application.EnableVisualStyles();
+ Application.SetCompatibleTextRenderingDefault(false);
+ Application.Run(new frmServer());
+ }
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer/Properties/AssemblyInfo.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer/Properties/AssemblyInfo.cs
new file mode 100644
index 000000000..4b7bccb2d
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+锘縰sing System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 鏈夊叧绋嬪簭闆嗙殑甯歌淇℃伅閫氳繃浠ヤ笅
+// 鐗规ч泦鎺у埗銆傛洿鏀硅繖浜涚壒鎬у煎彲淇敼
+// 涓庣▼搴忛泦鍏宠仈鐨勪俊鎭
+[assembly: AssemblyTitle("Server")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Server")]
+[assembly: AssemblyCopyright("Copyright 漏 2014")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 灏 ComVisible 璁剧疆涓 false 浣挎绋嬪簭闆嗕腑鐨勭被鍨
+// 瀵 COM 缁勪欢涓嶅彲瑙併傚鏋滈渶瑕佷粠 COM 璁块棶姝ょ▼搴忛泦涓殑绫诲瀷锛
+// 鍒欏皢璇ョ被鍨嬩笂鐨 ComVisible 鐗规ц缃负 true銆
+[assembly: ComVisible(false)]
+
+// 濡傛灉姝ら」鐩悜 COM 鍏紑锛屽垯涓嬪垪 GUID 鐢ㄤ簬绫诲瀷搴撶殑 ID
+[assembly: Guid("a8f79261-fd62-4f4b-aed5-01bf44660ad1")]
+
+// 绋嬪簭闆嗙殑鐗堟湰淇℃伅鐢变笅闈㈠洓涓肩粍鎴:
+//
+// 涓荤増鏈
+// 娆$増鏈
+// 鍐呴儴鐗堟湰鍙
+// 淇鍙
+//
+// 鍙互鎸囧畾鎵鏈夎繖浜涘硷紝涔熷彲浠ヤ娇鐢ㄢ滃唴閮ㄧ増鏈彿鈥濆拰鈥滀慨璁㈠彿鈥濈殑榛樿鍊硷紝
+// 鏂规硶鏄寜濡備笅鎵绀轰娇鐢ㄢ*鈥:
+
+[assembly: AssemblyVersion("3.5.2")]
+[assembly: AssemblyFileVersion("3.5.2")]
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer/Properties/Resources.Designer.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer/Properties/Resources.Designer.cs
new file mode 100644
index 000000000..f05ed944f
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer/Properties/Resources.Designer.cs
@@ -0,0 +1,63 @@
+锘//------------------------------------------------------------------------------
+//
+// 姝や唬鐮佺敱宸ュ叿鐢熸垚銆
+// 杩愯鏃剁増鏈:4.0.30319.42000
+//
+// 瀵规鏂囦欢鐨勬洿鏀瑰彲鑳戒細瀵艰嚧涓嶆纭殑琛屼负锛屽苟涓斿鏋
+// 閲嶆柊鐢熸垚浠g爜锛岃繖浜涙洿鏀瑰皢浼氫涪澶便
+//
+//------------------------------------------------------------------------------
+
+namespace TcpServer.Properties {
+ using System;
+
+
+ ///
+ /// 涓涓己绫诲瀷鐨勮祫婧愮被锛岀敤浜庢煡鎵炬湰鍦板寲鐨勫瓧绗︿覆绛夈
+ ///
+ // 姝ょ被鏄敱 StronglyTypedResourceBuilder
+ // 绫婚氳繃绫讳技浜 ResGen 鎴 Visual Studio 鐨勫伐鍏疯嚜鍔ㄧ敓鎴愮殑銆
+ // 鑻ヨ娣诲姞鎴栫Щ闄ゆ垚鍛橈紝璇风紪杈 .ResX 鏂囦欢锛岀劧鍚庨噸鏂拌繍琛 ResGen
+ // (浠 /str 浣滀负鍛戒护閫夐」)锛屾垨閲嶆柊鐢熸垚 VS 椤圭洰銆
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ internal class Resources {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources() {
+ }
+
+ ///
+ /// 杩斿洖姝ょ被浣跨敤鐨勭紦瀛樼殑 ResourceManager 瀹炰緥銆
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager {
+ get {
+ if (object.ReferenceEquals(resourceMan, null)) {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("TcpServer.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// 浣跨敤姝ゅ己绫诲瀷璧勬簮绫伙紝涓烘墍鏈夎祫婧愭煡鎵
+ /// 閲嶅啓褰撳墠绾跨▼鐨 CurrentUICulture 灞炴с
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer/Properties/Resources.resx b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer/Properties/Resources.resx
new file mode 100644
index 000000000..af7dbebba
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer/Properties/Resources.resx
@@ -0,0 +1,117 @@
+锘
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer/Properties/Settings.Designer.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer/Properties/Settings.Designer.cs
new file mode 100644
index 000000000..9c3530897
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer/Properties/Settings.Designer.cs
@@ -0,0 +1,26 @@
+锘//------------------------------------------------------------------------------
+//
+// 姝や唬鐮佺敱宸ュ叿鐢熸垚銆
+// 杩愯鏃剁増鏈:4.0.30319.42000
+//
+// 瀵规鏂囦欢鐨勬洿鏀瑰彲鑳戒細瀵艰嚧涓嶆纭殑琛屼负锛屽苟涓斿鏋
+// 閲嶆柊鐢熸垚浠g爜锛岃繖浜涙洿鏀瑰皢浼氫涪澶便
+//
+//------------------------------------------------------------------------------
+
+namespace TcpServer.Properties {
+
+
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")]
+ internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+
+ private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+ public static Settings Default {
+ get {
+ return defaultInstance;
+ }
+ }
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer/Properties/Settings.settings b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer/Properties/Settings.settings
new file mode 100644
index 000000000..39645652a
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer/Properties/Settings.settings
@@ -0,0 +1,7 @@
+锘
+
+
+
+
+
+
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer/TcpServer.csproj b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer/TcpServer.csproj
new file mode 100644
index 000000000..135e01d38
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer/TcpServer.csproj
@@ -0,0 +1,122 @@
+锘
+
+
+ Debug
+ x86
+ 8.0.30703
+ 2.0
+ {9A3339BC-37F0-4D03-9ACE-51CC4CF75277}
+ WinExe
+ Properties
+ TcpServer
+ TcpServer
+ v4.0
+ Client
+ 512
+
+
+ x86
+ true
+ full
+ false
+ ..\bin\x86\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ x86
+ pdbonly
+ true
+ ..\bin\x86\Release\
+ TRACE
+ prompt
+ 4
+
+
+ true
+ ..\bin\x64\Debug\
+ DEBUG;TRACE
+ full
+ x64
+ ..\bin\Debug\TcpServer.exe.CodeAnalysisLog.xml
+ true
+ GlobalSuppressions.cs
+ prompt
+ MinimumRecommendedRules.ruleset
+ ;D:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets
+ ;D:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules
+
+
+ ..\bin\x64\Release\
+ TRACE
+ true
+ pdbonly
+ x64
+ ..\bin\Release\TcpServer.exe.CodeAnalysisLog.xml
+ true
+ GlobalSuppressions.cs
+ prompt
+ MinimumRecommendedRules.ruleset
+ ;D:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets
+ ;D:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Form
+
+
+ frmServer.cs
+
+
+
+
+ frmServer.cs
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+ Designer
+
+
+ True
+ Resources.resx
+ True
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
+ True
+ Settings.settings
+ True
+
+
+
+
+ {DFA935E2-CF37-4E26-B697-D7F3DEE19DD8}
+ HPSocketCS
+
+
+
+
+
\ No newline at end of file
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer/frmServer.Designer.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer/frmServer.Designer.cs
new file mode 100644
index 000000000..28f76f2a9
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer/frmServer.Designer.cs
@@ -0,0 +1,169 @@
+锘縩amespace SSLServerNS
+{
+ partial class frmServer
+ {
+ ///
+ /// 蹇呴渶鐨勮璁″櫒鍙橀噺銆
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// 娓呯悊鎵鏈夋鍦ㄤ娇鐢ㄧ殑璧勬簮銆
+ ///
+ /// 濡傛灉搴旈噴鏀炬墭绠¤祫婧愶紝涓 true锛涘惁鍒欎负 false銆
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows 绐椾綋璁捐鍣ㄧ敓鎴愮殑浠g爜
+
+ ///
+ /// 璁捐鍣ㄦ敮鎸佹墍闇鐨勬柟娉 - 涓嶈
+ /// 浣跨敤浠g爜缂栬緫鍣ㄤ慨鏀规鏂规硶鐨勫唴瀹广
+ ///
+ private void InitializeComponent()
+ {
+ this.lbxMsg = new System.Windows.Forms.ListBox();
+ this.groupBox1 = new System.Windows.Forms.GroupBox();
+ this.label1 = new System.Windows.Forms.Label();
+ this.btnDisconn = new System.Windows.Forms.Button();
+ this.txtDisConn = new System.Windows.Forms.TextBox();
+ this.txtPort = new System.Windows.Forms.TextBox();
+ this.txtIpAddress = new System.Windows.Forms.TextBox();
+ this.btnStop = new System.Windows.Forms.Button();
+ this.btnStart = new System.Windows.Forms.Button();
+ this.groupBox1.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // lbxMsg
+ //
+ this.lbxMsg.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.lbxMsg.FormattingEnabled = true;
+ this.lbxMsg.ItemHeight = 12;
+ this.lbxMsg.Location = new System.Drawing.Point(11, 62);
+ this.lbxMsg.Name = "lbxMsg";
+ this.lbxMsg.Size = new System.Drawing.Size(465, 304);
+ this.lbxMsg.TabIndex = 4;
+ this.lbxMsg.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.lbxMsg_KeyPress);
+ //
+ // groupBox1
+ //
+ this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.groupBox1.Controls.Add(this.label1);
+ this.groupBox1.Controls.Add(this.btnDisconn);
+ this.groupBox1.Controls.Add(this.txtDisConn);
+ this.groupBox1.Controls.Add(this.txtPort);
+ this.groupBox1.Controls.Add(this.txtIpAddress);
+ this.groupBox1.Controls.Add(this.btnStop);
+ this.groupBox1.Controls.Add(this.btnStart);
+ this.groupBox1.Location = new System.Drawing.Point(12, 2);
+ this.groupBox1.Name = "groupBox1";
+ this.groupBox1.Size = new System.Drawing.Size(462, 47);
+ this.groupBox1.TabIndex = 9;
+ this.groupBox1.TabStop = false;
+ //
+ // label1
+ //
+ this.label1.AutoSize = true;
+ this.label1.Location = new System.Drawing.Point(132, 22);
+ this.label1.Name = "label1";
+ this.label1.Size = new System.Drawing.Size(41, 12);
+ this.label1.TabIndex = 15;
+ this.label1.Text = "CONNID";
+ //
+ // btnDisconn
+ //
+ this.btnDisconn.Location = new System.Drawing.Point(223, 15);
+ this.btnDisconn.Name = "btnDisconn";
+ this.btnDisconn.Size = new System.Drawing.Size(33, 26);
+ this.btnDisconn.TabIndex = 14;
+ this.btnDisconn.Text = "Dis";
+ this.btnDisconn.UseVisualStyleBackColor = true;
+ this.btnDisconn.Click += new System.EventHandler(this.btnDisconn_Click);
+ //
+ // txtDisConn
+ //
+ this.txtDisConn.Location = new System.Drawing.Point(178, 18);
+ this.txtDisConn.Name = "txtDisConn";
+ this.txtDisConn.Size = new System.Drawing.Size(40, 21);
+ this.txtDisConn.TabIndex = 13;
+ this.txtDisConn.TextChanged += new System.EventHandler(this.txtDisConn_TextChanged);
+ //
+ // txtPort
+ //
+ this.txtPort.Location = new System.Drawing.Point(88, 18);
+ this.txtPort.Name = "txtPort";
+ this.txtPort.Size = new System.Drawing.Size(40, 21);
+ this.txtPort.TabIndex = 12;
+ this.txtPort.Text = "5555";
+ //
+ // txtIpAddress
+ //
+ this.txtIpAddress.Location = new System.Drawing.Point(11, 18);
+ this.txtIpAddress.Name = "txtIpAddress";
+ this.txtIpAddress.Size = new System.Drawing.Size(71, 21);
+ this.txtIpAddress.TabIndex = 11;
+ this.txtIpAddress.Text = "0.0.0.0";
+ //
+ // btnStop
+ //
+ this.btnStop.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnStop.Location = new System.Drawing.Point(403, 15);
+ this.btnStop.Name = "btnStop";
+ this.btnStop.Size = new System.Drawing.Size(47, 26);
+ this.btnStop.TabIndex = 10;
+ this.btnStop.Text = "Stop";
+ this.btnStop.UseVisualStyleBackColor = true;
+ this.btnStop.Click += new System.EventHandler(this.btnStop_Click);
+ //
+ // btnStart
+ //
+ this.btnStart.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnStart.Location = new System.Drawing.Point(350, 15);
+ this.btnStart.Name = "btnStart";
+ this.btnStart.Size = new System.Drawing.Size(47, 26);
+ this.btnStart.TabIndex = 9;
+ this.btnStart.Text = "Start";
+ this.btnStart.UseVisualStyleBackColor = true;
+ this.btnStart.Click += new System.EventHandler(this.btnStart_Click);
+ //
+ // frmServer
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(486, 377);
+ this.Controls.Add(this.groupBox1);
+ this.Controls.Add(this.lbxMsg);
+ this.Name = "frmServer";
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
+ this.Text = "Form1";
+ this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.frmServer_FormClosed);
+ this.Load += new System.EventHandler(this.Form1_Load);
+ this.groupBox1.ResumeLayout(false);
+ this.groupBox1.PerformLayout();
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.ListBox lbxMsg;
+ private System.Windows.Forms.GroupBox groupBox1;
+ private System.Windows.Forms.Label label1;
+ private System.Windows.Forms.Button btnDisconn;
+ private System.Windows.Forms.TextBox txtDisConn;
+ private System.Windows.Forms.TextBox txtPort;
+ private System.Windows.Forms.Button btnStop;
+ private System.Windows.Forms.Button btnStart;
+ private System.Windows.Forms.TextBox txtIpAddress;
+ }
+}
+
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer/frmServer.cs b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer/frmServer.cs
new file mode 100644
index 000000000..f0165768d
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer/frmServer.cs
@@ -0,0 +1,304 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using System.Runtime.InteropServices;
+using HPSocketCS;
+
+namespace SSLServerNS
+{
+ public enum AppState
+ {
+ Starting, Started, Stoping, Stoped, Error
+ }
+
+ public partial class frmServer : Form
+ {
+ private AppState appState = AppState.Stoped;
+
+ private delegate void ShowMsg(string msg);
+ private ShowMsg AddMsgDelegate;
+
+ HPSocketCS.TcpServer server = new HPSocketCS.TcpServer();
+
+ private string title = "Echo-TcpServer [ 'C' - clear list box ]";
+ public frmServer()
+ {
+ InitializeComponent();
+ }
+
+ private void Form1_Load(object sender, EventArgs e)
+ {
+ try
+ {
+
+ this.Text = title;
+ // 鏈満娴嬭瘯娌″繀瑕佹敼鍦板潃,鏈夐渶姹傝娉ㄩ噴鎴栧垹闄
+ this.txtIpAddress.ReadOnly = true;
+
+ // 鍔犱釜濮旀墭鏄剧ずmsg,鍥犱负on绯诲垪閮芥槸鍦ㄥ伐浣滅嚎绋嬩腑璋冪敤鐨,ui涓嶅厑璁哥洿鎺ユ搷浣
+ AddMsgDelegate = new ShowMsg(AddMsg);
+
+
+ // 璁剧疆鏈嶅姟鍣ㄤ簨浠
+ server.OnPrepareListen += new TcpServerEvent.OnPrepareListenEventHandler(OnPrepareListen);
+ server.OnAccept += new TcpServerEvent.OnAcceptEventHandler(OnAccept);
+ server.OnSend += new TcpServerEvent.OnSendEventHandler(OnSend);
+ server.OnReceive += new TcpServerEvent.OnReceiveEventHandler(OnReceive);
+ server.OnClose += new TcpServerEvent.OnCloseEventHandler(OnClose);
+ server.OnShutdown += new TcpServerEvent.OnShutdownEventHandler(OnShutdown);
+
+ SetAppState(AppState.Stoped);
+ }
+ catch (Exception ex)
+ {
+ SetAppState(AppState.Error);
+ AddMsg(ex.Message);
+ }
+ }
+
+ private void btnStart_Click(object sender, EventArgs e)
+ {
+ try
+ {
+ String ip = this.txtIpAddress.Text.Trim();
+ ushort port = ushort.Parse(this.txtPort.Text.Trim());
+
+ // 鍐欏湪杩欎釜浣嶇疆鏄笂闈㈠彲鑳戒細寮傚父
+ SetAppState(AppState.Starting);
+ server.IpAddress = ip;
+ server.Port = port;
+ // 鍚姩鏈嶅姟
+ if (server.Start())
+ {
+ this.Text = string.Format("{2} - ({0}:{1})", ip, port, title);
+ SetAppState(AppState.Started);
+ AddMsg(string.Format("$Server Start OK -> ({0}:{1})", ip, port));
+ }
+ else
+ {
+ SetAppState(AppState.Stoped);
+ throw new Exception(string.Format("$Server Start Error -> {0}({1})", server.ErrorMessage, server.ErrorCode));
+ }
+ }
+ catch (Exception ex)
+ {
+ AddMsg(ex.Message);
+ }
+ }
+
+ private void btnStop_Click(object sender, EventArgs e)
+ {
+ SetAppState(AppState.Stoping);
+
+ // 鍋滄鏈嶅姟
+ AddMsg("$Server Stop");
+ if (server.Stop())
+ {
+ this.Text = title;
+ SetAppState(AppState.Stoped);
+ }
+ else
+ {
+ AddMsg(string.Format("$Stop Error -> {0}({1})", server.ErrorMessage, server.ErrorCode));
+ }
+ }
+
+ private void btnDisconn_Click(object sender, EventArgs e)
+ {
+ try
+ {
+ IntPtr connId = (IntPtr)Convert.ToInt32(this.txtDisConn.Text.Trim());
+ // 鏂紑鎸囧畾瀹㈡埛
+ if (server.Disconnect(connId, true))
+ {
+ AddMsg(string.Format("$({0}) Disconnect OK", connId));
+ }
+ else
+ {
+ throw new Exception(string.Format("Disconnect({0}) Error", connId));
+ }
+ }
+ catch (Exception ex)
+ {
+ AddMsg(ex.Message);
+ }
+ }
+
+
+ HandleResult OnPrepareListen(IntPtr soListen)
+ {
+ // 鐩戝惉浜嬩欢鍒拌揪浜,涓鑸病浠涔堢敤鍚?
+
+ return HandleResult.Ok;
+ }
+
+ HandleResult OnAccept(IntPtr connId, IntPtr pClient)
+ {
+ // 瀹㈡埛杩涘叆浜
+
+
+ // 鑾峰彇瀹㈡埛绔痠p鍜岀鍙
+ string ip = string.Empty;
+ ushort port = 0;
+ if (server.GetRemoteAddress(connId, ref ip, ref port))
+ {
+ AddMsg(string.Format(" > [{0},OnAccept] -> PASS({1}:{2})", connId, ip.ToString(), port));
+ }
+ else
+ {
+ AddMsg(string.Format(" > [{0},OnAccept] -> Server_GetClientAddress() Error", connId));
+ }
+
+
+ // 璁剧疆闄勫姞鏁版嵁
+ ClientInfo ci = new ClientInfo();
+ ci.ConnId = connId;
+ ci.IpAddress = ip;
+ ci.Port = port;
+ if (server.SetConnectionExtra(connId, ci) == false)
+ {
+ AddMsg(string.Format(" > [{0},OnAccept] -> SetConnectionExtra fail", connId));
+ }
+
+ return HandleResult.Ok;
+ }
+
+ HandleResult OnSend(IntPtr connId, byte[] bytes)
+ {
+ // 鏈嶅姟鍣ㄥ彂鏁版嵁浜
+
+
+ AddMsg(string.Format(" > [{0},OnSend] -> ({1} bytes)", connId, bytes.Length));
+
+ return HandleResult.Ok;
+ }
+
+ HandleResult OnReceive(IntPtr connId, byte[] bytes)
+ {
+ // 鏁版嵁鍒拌揪浜
+ try
+ {
+ // 鑾峰彇闄勫姞鏁版嵁
+ IntPtr clientPtr = IntPtr.Zero;
+ if (server.GetConnectionExtra(connId, ref clientPtr))
+ {
+ // ci 灏辨槸accept閲屼紶鍏ョ殑闄勫姞鏁版嵁浜
+ ClientInfo ci = (ClientInfo)Marshal.PtrToStructure(clientPtr, typeof(ClientInfo));
+ AddMsg(string.Format(" > [{0},OnReceive] -> {1}:{2} ({3} bytes)", ci.ConnId, ci.IpAddress, ci.Port, bytes.Length));
+ }
+ else
+ {
+ AddMsg(string.Format(" > [{0},OnReceive] -> ({1} bytes)", connId, bytes.Length));
+ }
+
+ if (server.Send(connId, bytes, bytes.Length))
+ {
+ return HandleResult.Ok;
+ }
+
+ return HandleResult.Error;
+ }
+ catch (Exception)
+ {
+
+ return HandleResult.Ignore;
+ }
+ }
+
+ HandleResult OnClose(IntPtr connId, SocketOperation enOperation, int errorCode)
+ {
+ if(errorCode == 0)
+ AddMsg(string.Format(" > [{0},OnClose]", connId));
+ else
+ AddMsg(string.Format(" > [{0},OnError] -> OP:{1},CODE:{2}", connId, enOperation, errorCode));
+
+ if (server.SetConnectionExtra(connId, null) == false)
+ {
+ AddMsg(string.Format(" > [{0},OnClose] -> SetConnectionExtra({0}, null) fail", connId));
+ }
+
+ return HandleResult.Ok;
+ }
+
+ HandleResult OnShutdown()
+ {
+ // 鏈嶅姟鍏抽棴浜
+
+
+ AddMsg(" > [OnShutdown]");
+ return HandleResult.Ok;
+ }
+
+
+
+ ///
+ /// 璁剧疆绋嬪簭鐘舵
+ ///
+ ///
+ void SetAppState(AppState state)
+ {
+ appState = state;
+ this.btnStart.Enabled = (appState == AppState.Stoped);
+ this.btnStop.Enabled = (appState == AppState.Started);
+ this.txtIpAddress.Enabled = (appState == AppState.Stoped);
+ this.txtPort.Enabled = (appState == AppState.Stoped);
+ this.txtDisConn.Enabled = (appState == AppState.Started);
+ this.btnDisconn.Enabled = (appState == AppState.Started && this.txtDisConn.Text.Length > 0);
+ }
+
+ ///
+ /// 寰listbox鍔犱竴鏉¢」鐩
+ ///
+ ///
+ void AddMsg(string msg)
+ {
+ if (this.lbxMsg.InvokeRequired)
+ {
+ // 寰堝竻鐨勮皟鑷繁
+ this.lbxMsg.Invoke(AddMsgDelegate, msg);
+ }
+ else
+ {
+ if (this.lbxMsg.Items.Count > 100)
+ {
+ this.lbxMsg.Items.RemoveAt(0);
+ }
+ this.lbxMsg.Items.Add(msg);
+ this.lbxMsg.TopIndex = this.lbxMsg.Items.Count - (int)(this.lbxMsg.Height / this.lbxMsg.ItemHeight);
+ }
+ }
+
+ private void txtDisConn_TextChanged(object sender, EventArgs e)
+ {
+ // CONNID妗嗚鏀瑰彉浜嬩欢
+ this.btnDisconn.Enabled = (appState == AppState.Started && this.txtDisConn.Text.Length > 0);
+ }
+
+ private void lbxMsg_KeyPress(object sender, KeyPressEventArgs e)
+ {
+ // 娓呯悊listbox
+ if (e.KeyChar == 'c' || e.KeyChar == 'C')
+ {
+ this.lbxMsg.Items.Clear();
+ }
+ }
+
+ private void frmServer_FormClosed(object sender, FormClosedEventArgs e)
+ {
+ server.Destroy();
+ }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ public class ClientInfo
+ {
+ public IntPtr ConnId { get; set; }
+ public string IpAddress { get; set; }
+ public ushort Port { get; set; }
+ }
+}
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer/frmServer.resx b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer/frmServer.resx
new file mode 100644
index 000000000..1af7de150
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer/frmServer.resx
@@ -0,0 +1,120 @@
+锘
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer/obj/x64/Release/DesignTimeResolveAssemblyReferencesInput.cache b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer/obj/x64/Release/DesignTimeResolveAssemblyReferencesInput.cache
new file mode 100644
index 000000000..bcca0129e
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer/obj/x64/Release/DesignTimeResolveAssemblyReferencesInput.cache differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer/obj/x64/Release/SSLServerNS.frmServer.resources b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer/obj/x64/Release/SSLServerNS.frmServer.resources
new file mode 100644
index 000000000..6c05a9776
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer/obj/x64/Release/SSLServerNS.frmServer.resources differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer/obj/x64/Release/TcpServer.Properties.Resources.resources b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer/obj/x64/Release/TcpServer.Properties.Resources.resources
new file mode 100644
index 000000000..6c05a9776
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer/obj/x64/Release/TcpServer.Properties.Resources.resources differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer/obj/x64/Release/TcpServer.csproj.FileListAbsolute.txt b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer/obj/x64/Release/TcpServer.csproj.FileListAbsolute.txt
new file mode 100644
index 000000000..5e88f1e38
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer/obj/x64/Release/TcpServer.csproj.FileListAbsolute.txt
@@ -0,0 +1,7 @@
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\bin\x64\Release\TcpServer.exe
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\bin\x64\Release\TcpServer.pdb
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpServer\obj\x64\Release\SSLServerNS.frmServer.resources
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpServer\obj\x64\Release\TcpServer.Properties.Resources.resources
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpServer\obj\x64\Release\TcpServer.csproj.GenerateResource.Cache
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpServer\obj\x64\Release\TcpServer.exe
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpServer\obj\x64\Release\TcpServer.pdb
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer/obj/x64/Release/TcpServer.csproj.GenerateResource.Cache b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer/obj/x64/Release/TcpServer.csproj.GenerateResource.Cache
new file mode 100644
index 000000000..e793f6a97
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer/obj/x64/Release/TcpServer.csproj.GenerateResource.Cache differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer/obj/x64/Release/TcpServer.exe b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer/obj/x64/Release/TcpServer.exe
new file mode 100644
index 000000000..cc1651576
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer/obj/x64/Release/TcpServer.exe differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer/obj/x86/Release/DesignTimeResolveAssemblyReferencesInput.cache b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer/obj/x86/Release/DesignTimeResolveAssemblyReferencesInput.cache
new file mode 100644
index 000000000..5eb602726
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer/obj/x86/Release/DesignTimeResolveAssemblyReferencesInput.cache differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer/obj/x86/Release/SSLServerNS.frmServer.resources b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer/obj/x86/Release/SSLServerNS.frmServer.resources
new file mode 100644
index 000000000..6c05a9776
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer/obj/x86/Release/SSLServerNS.frmServer.resources differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer/obj/x86/Release/TcpServer.Properties.Resources.resources b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer/obj/x86/Release/TcpServer.Properties.Resources.resources
new file mode 100644
index 000000000..6c05a9776
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer/obj/x86/Release/TcpServer.Properties.Resources.resources differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer/obj/x86/Release/TcpServer.csproj.FileListAbsolute.txt b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer/obj/x86/Release/TcpServer.csproj.FileListAbsolute.txt
new file mode 100644
index 000000000..f12d9ea9f
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer/obj/x86/Release/TcpServer.csproj.FileListAbsolute.txt
@@ -0,0 +1,7 @@
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\bin\x86\Release\TcpServer.exe
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\bin\x86\Release\TcpServer.pdb
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpServer\obj\x86\Release\SSLServerNS.frmServer.resources
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpServer\obj\x86\Release\TcpServer.Properties.Resources.resources
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpServer\obj\x86\Release\TcpServer.csproj.GenerateResource.Cache
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpServer\obj\x86\Release\TcpServer.exe
+E:\MyWork\Cpp\HP-Socket\Demo\Other Languages Demos\C#\HPSocket4CS\TcpServer\obj\x86\Release\TcpServer.pdb
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer/obj/x86/Release/TcpServer.csproj.GenerateResource.Cache b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer/obj/x86/Release/TcpServer.csproj.GenerateResource.Cache
new file mode 100644
index 000000000..e793f6a97
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer/obj/x86/Release/TcpServer.csproj.GenerateResource.Cache differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer/obj/x86/Release/TcpServer.exe b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer/obj/x86/Release/TcpServer.exe
new file mode 100644
index 000000000..bbb576063
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer/obj/x86/Release/TcpServer.exe differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer/obj/x86/Release/TempPE/Properties.Resources.Designer.cs.dll b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer/obj/x86/Release/TempPE/Properties.Resources.Designer.cs.dll
new file mode 100644
index 000000000..4a36100cd
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/TcpServer/obj/x86/Release/TempPE/Properties.Resources.Designer.cs.dll differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Debug/HPSocket4C-SSL_UD.dll b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Debug/HPSocket4C-SSL_UD.dll
new file mode 100644
index 000000000..9feb115d8
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Debug/HPSocket4C-SSL_UD.dll differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Debug/HPSocket4C_UD.dll b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Debug/HPSocket4C_UD.dll
new file mode 100644
index 000000000..135ff4bed
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Debug/HPSocket4C_UD.dll differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Debug/HPSocketCS.dll b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Debug/HPSocketCS.dll
new file mode 100644
index 000000000..f19364069
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Debug/HPSocketCS.dll differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/HPSocket4C-SSL_U.dll b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/HPSocket4C-SSL_U.dll
new file mode 100644
index 000000000..fa6c884a0
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/HPSocket4C-SSL_U.dll differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/HPSocket4C_U.dll b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/HPSocket4C_U.dll
new file mode 100644
index 000000000..44331014f
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/HPSocket4C_U.dll differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/HPSocketCS.dll b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/HPSocketCS.dll
new file mode 100644
index 000000000..76adccd6c
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/HPSocketCS.dll differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/SSLClient.exe b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/SSLClient.exe
new file mode 100644
index 000000000..74e288dc7
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/SSLClient.exe differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/SSLPackClient.exe b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/SSLPackClient.exe
new file mode 100644
index 000000000..fb176ac98
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/SSLPackClient.exe differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/SSLPackServer.exe b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/SSLPackServer.exe
new file mode 100644
index 000000000..52b34adbd
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/SSLPackServer.exe differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/SSLServer.exe b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/SSLServer.exe
new file mode 100644
index 000000000..5184d59e4
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/SSLServer.exe differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/TcpClient-PFM.exe b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/TcpClient-PFM.exe
new file mode 100644
index 000000000..6d0939202
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/TcpClient-PFM.exe differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/TcpClient.exe b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/TcpClient.exe
new file mode 100644
index 000000000..344f7d52d
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/TcpClient.exe differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/TcpPackClient.exe b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/TcpPackClient.exe
new file mode 100644
index 000000000..9792b262b
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/TcpPackClient.exe differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/TcpPackServer.exe b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/TcpPackServer.exe
new file mode 100644
index 000000000..d2059f77c
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/TcpPackServer.exe differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/TcpPortForwarding.exe b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/TcpPortForwarding.exe
new file mode 100644
index 000000000..99c62a33d
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/TcpPortForwarding.exe differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/TcpPullClient.exe b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/TcpPullClient.exe
new file mode 100644
index 000000000..4f66008cc
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/TcpPullClient.exe differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/TcpPullServer.exe b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/TcpPullServer.exe
new file mode 100644
index 000000000..174f0c09d
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/TcpPullServer.exe differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/TcpServer-PFM.exe b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/TcpServer-PFM.exe
new file mode 100644
index 000000000..c5b5a5a90
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/TcpServer-PFM.exe differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/TcpServer.exe b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/TcpServer.exe
new file mode 100644
index 000000000..cc1651576
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/TcpServer.exe differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/ssl-cert/ca.crt b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/ssl-cert/ca.crt
new file mode 100644
index 000000000..c31217076
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/ssl-cert/ca.crt
@@ -0,0 +1,23 @@
+-----BEGIN CERTIFICATE-----
+MIID0TCCArmgAwIBAgIJALFGobpzN5MdMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNV
+BAYTAkNOMQswCQYDVQQIDAJHRDELMAkGA1UEBwwCR1oxDDAKBgNVBAoMA1NTVDEP
+MA0GA1UECwwGSmVzc01BMRcwFQYDVQQDDA53d3cuamVzc21hLm9yZzEeMBwGCSqG
+SIb3DQEJARYPbGRjc2FhQDIxY24uY29tMB4XDTE2MDQwMTE1MDIwMFoXDTI0MDYx
+ODE1MDIwMFowfzELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQswCQYDVQQHDAJH
+WjEMMAoGA1UECgwDU1NUMQ8wDQYDVQQLDAZKZXNzTUExFzAVBgNVBAMMDnd3dy5q
+ZXNzbWEub3JnMR4wHAYJKoZIhvcNAQkBFg9sZGNzYWFAMjFjbi5jb20wggEiMA0G
+CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDht6llexLtFkV8ijjdJGaHXXQysWOJ
+UM/YQFYP52nviurJSpMbWSXnuaDlfidk76B66Np5mlnN5BiHqbBj34GCVKz5VQtx
+3kMY1y30YWyiHAEZiV3PLQc8/A9MnJM/q/mHaulmTuJi8A85TWadqUNXgiaIMkqz
+bKaauR1/GCxXuEVroqtyR99RCWhfakTz04KfIbt83QR0imWC6uhmvD/DXJ03XFzd
+XkK5aNp+ef1sBQgFKjeXV6EMuq+UgEDPXlCDUJAqsZt6W/ohrCAHWQYZ/RSvvaMJ
+O7aWROGAC/lh6ATOIbFlGVppw6zUGdIDkB5FVF1MC7CyDndncFrY+OJzAgMBAAGj
+UDBOMB0GA1UdDgQWBBT8fu6QFIfxlQvMWjl5pmfBjL6ciDAfBgNVHSMEGDAWgBT8
+fu6QFIfxlQvMWjl5pmfBjL6ciDAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUA
+A4IBAQDI+f6GMBJxRJNKrgbUYLD1U6LWEQJQ50g2NxGy0j+TL6oypoo/kyME3tOR
+EmXEDzytGcSaQ78xYcg97UQd8OhXYQr0qwZ/JLarmhCVK/bfbGTIn4Mk4ZgDqcOU
+46jsJeEZwUSrrq7svKO5d7+wV0VGPO+Ww4yzRCPwm2puXFY1+KpTxYX31+wwMB8p
+7GuJEDgV08qzLfcBAfSFFYiOHL3tJ+XNKFNRqigjeYrWuAMphOhpYfYnU0d0upe8
+wWx9Unm8qSkc7hiS/vvs1v7Pv1sqMFRBoaKOTqZ7Wz/5AySGPQjeMV/atmArDEkx
+z58OEgTzg1J/Keztxwj7I2KnYHyH
+-----END CERTIFICATE-----
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/ssl-cert/ca.key b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/ssl-cert/ca.key
new file mode 100644
index 000000000..e0a85b46b
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/ssl-cert/ca.key
@@ -0,0 +1,30 @@
+-----BEGIN RSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: AES-256-CBC,ABBC3A36C737CF487C5C36CA5ACA4A5D
+
+zv/FdREV9tlLsPPzIrm5EIbGaTiReEz+9jlgplyVLkAZe7MNF868t5g93Ve46ehy
+XzBf2QtBE12xAgKmjTvK7RnO1Rih5LqY7VTrEhIFSkYdDTqTV8I8cWig7Hmg+qNw
+EymXdrCYjBQB1U3jmOxBqQrDw75KYJFq5vN+vAmnreA9m9NdOAWOQ+n5K0sJLQpk
+6F9a4pzym7v4mMmP67Ddf/qHVcbWPLOo3QkBUItGJYPpBL1ODu+rd/3f9EyJspVw
+3dQNAaT0OzA0RZ9Pew7+ZxzgFFDHA4sh6r4fcfpEfXTr1QQUg0F4B66+OTE1duoE
+T+PIwYWp4yyuYgUA7txpDsGaENbvfnsP81oLMIvU0TicKJoYxr2Zxa+lK2MWCa5D
+L9VbRMQM0bXTF1qCgjnPmFhxhdYgidxPEZPahyMmFU3LB9W5ils/DK+AXW1gC4ZY
+O8hpUGaZ7Lj5H6suMSYIX7CAEi0NXXdRMXw7bOBecRFy+fhgHmMF1fGgBG2Fd1lP
+wgHlydLQDZoUpTnZrifDzlH8oDqEbCCOSUYc82fVKeNNORePHLGuV8utz0UTR9Rq
+Ko9ZYEN7j+JsPBdG3CnrjDILrZA3peKPhEifrRL2mjHdMdwFsE/fetyvUssgh9VY
+o2Bi25khVu+2TwBMEO1nlS6U+TWOU8u4qxGtSj5xN1Fdplb098VXY1T08+NvDJUN
+7S52KPAyeXY6V2/Q7IyDpsnmM9SWiLrvf2C/niEHRLfWoNP5bt6r/e8RIjFPc0KV
+E8KvANWXSArM359F4+ucvMzrYEtkgnldf6UIN007qqr2eEREeVwxVWIpJZJauVDV
+1uOvTQCDU7O4cIV/FiK1+oVt9MQYAHnnG3revFzqcZtH2x3qWNEGwiyfDZh7qx7c
+8LFYiFLIQX2HGYcEpcKAbj65sJLecz7VtNQ2GMoXHh09BQ5VnleVInmAfAv6r01k
+OdTJ3CNf8YcW/PAKTGrgmsncGp8EvHbmDC4r1ecxxp3Mu7M7T9XfQ41nk1nCLmOp
++3B9ecnJx6bSkg6wrrofl2MifCyl6AvxyKUeAt+dNV319QL/imgV3VQiD+Gu5i+c
+1tveD4cKNm01izEZz6xPBZ9sH4G8TFYFOx572q2DdSZe2MXy/h6QfKUADPOkvPyr
+0dqNbPQKJDL7YJOG39k0L/GOe6uH+JxXlvYLtqSLznLTQkm9kkWVOB54gV+v2NBp
+831BnDdlwv9AnScDY7o4fG1qAaWIZyMWntmORfpHkOMRbrBqK5TeczpoV2jr1iGl
+h1oIbbANJzaXEydnWcnUPujopP7oYG2KGhDbzhhR/PGlvLknIoAA55BqL23dzHct
+1/xaaHqxcjGNymgSPPD9Kjx0qQZovOb5WKDyg5+D5GIfRqq+c1SQeZw+5jcoMBIF
+TSdfiwAxhLkT8SQf72C6tAYsxkTubbcU1gc0Vkdd5Q2FWc6YgCb6XVPYC5jHATwV
+V4v5JVqGLRFi056heSpA0EFWp/AuSoaYaQRwGfBnUysaocDlEE4kTNzzJIwgbWrt
+iTL5qB7LIexqUVWVjmUmx6S0+f6qVYovDjFHVg61Xb6zdL04LmU0VrMCwgUBEt2j
+-----END RSA PRIVATE KEY-----
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/ssl-cert/ca.pem b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/ssl-cert/ca.pem
new file mode 100644
index 000000000..57f3b363b
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/ssl-cert/ca.pem
@@ -0,0 +1,53 @@
+-----BEGIN RSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: AES-256-CBC,ABBC3A36C737CF487C5C36CA5ACA4A5D
+
+zv/FdREV9tlLsPPzIrm5EIbGaTiReEz+9jlgplyVLkAZe7MNF868t5g93Ve46ehy
+XzBf2QtBE12xAgKmjTvK7RnO1Rih5LqY7VTrEhIFSkYdDTqTV8I8cWig7Hmg+qNw
+EymXdrCYjBQB1U3jmOxBqQrDw75KYJFq5vN+vAmnreA9m9NdOAWOQ+n5K0sJLQpk
+6F9a4pzym7v4mMmP67Ddf/qHVcbWPLOo3QkBUItGJYPpBL1ODu+rd/3f9EyJspVw
+3dQNAaT0OzA0RZ9Pew7+ZxzgFFDHA4sh6r4fcfpEfXTr1QQUg0F4B66+OTE1duoE
+T+PIwYWp4yyuYgUA7txpDsGaENbvfnsP81oLMIvU0TicKJoYxr2Zxa+lK2MWCa5D
+L9VbRMQM0bXTF1qCgjnPmFhxhdYgidxPEZPahyMmFU3LB9W5ils/DK+AXW1gC4ZY
+O8hpUGaZ7Lj5H6suMSYIX7CAEi0NXXdRMXw7bOBecRFy+fhgHmMF1fGgBG2Fd1lP
+wgHlydLQDZoUpTnZrifDzlH8oDqEbCCOSUYc82fVKeNNORePHLGuV8utz0UTR9Rq
+Ko9ZYEN7j+JsPBdG3CnrjDILrZA3peKPhEifrRL2mjHdMdwFsE/fetyvUssgh9VY
+o2Bi25khVu+2TwBMEO1nlS6U+TWOU8u4qxGtSj5xN1Fdplb098VXY1T08+NvDJUN
+7S52KPAyeXY6V2/Q7IyDpsnmM9SWiLrvf2C/niEHRLfWoNP5bt6r/e8RIjFPc0KV
+E8KvANWXSArM359F4+ucvMzrYEtkgnldf6UIN007qqr2eEREeVwxVWIpJZJauVDV
+1uOvTQCDU7O4cIV/FiK1+oVt9MQYAHnnG3revFzqcZtH2x3qWNEGwiyfDZh7qx7c
+8LFYiFLIQX2HGYcEpcKAbj65sJLecz7VtNQ2GMoXHh09BQ5VnleVInmAfAv6r01k
+OdTJ3CNf8YcW/PAKTGrgmsncGp8EvHbmDC4r1ecxxp3Mu7M7T9XfQ41nk1nCLmOp
++3B9ecnJx6bSkg6wrrofl2MifCyl6AvxyKUeAt+dNV319QL/imgV3VQiD+Gu5i+c
+1tveD4cKNm01izEZz6xPBZ9sH4G8TFYFOx572q2DdSZe2MXy/h6QfKUADPOkvPyr
+0dqNbPQKJDL7YJOG39k0L/GOe6uH+JxXlvYLtqSLznLTQkm9kkWVOB54gV+v2NBp
+831BnDdlwv9AnScDY7o4fG1qAaWIZyMWntmORfpHkOMRbrBqK5TeczpoV2jr1iGl
+h1oIbbANJzaXEydnWcnUPujopP7oYG2KGhDbzhhR/PGlvLknIoAA55BqL23dzHct
+1/xaaHqxcjGNymgSPPD9Kjx0qQZovOb5WKDyg5+D5GIfRqq+c1SQeZw+5jcoMBIF
+TSdfiwAxhLkT8SQf72C6tAYsxkTubbcU1gc0Vkdd5Q2FWc6YgCb6XVPYC5jHATwV
+V4v5JVqGLRFi056heSpA0EFWp/AuSoaYaQRwGfBnUysaocDlEE4kTNzzJIwgbWrt
+iTL5qB7LIexqUVWVjmUmx6S0+f6qVYovDjFHVg61Xb6zdL04LmU0VrMCwgUBEt2j
+-----END RSA PRIVATE KEY-----
+-----BEGIN CERTIFICATE-----
+MIID0TCCArmgAwIBAgIJALFGobpzN5MdMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNV
+BAYTAkNOMQswCQYDVQQIDAJHRDELMAkGA1UEBwwCR1oxDDAKBgNVBAoMA1NTVDEP
+MA0GA1UECwwGSmVzc01BMRcwFQYDVQQDDA53d3cuamVzc21hLm9yZzEeMBwGCSqG
+SIb3DQEJARYPbGRjc2FhQDIxY24uY29tMB4XDTE2MDQwMTE1MDIwMFoXDTI0MDYx
+ODE1MDIwMFowfzELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQswCQYDVQQHDAJH
+WjEMMAoGA1UECgwDU1NUMQ8wDQYDVQQLDAZKZXNzTUExFzAVBgNVBAMMDnd3dy5q
+ZXNzbWEub3JnMR4wHAYJKoZIhvcNAQkBFg9sZGNzYWFAMjFjbi5jb20wggEiMA0G
+CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDht6llexLtFkV8ijjdJGaHXXQysWOJ
+UM/YQFYP52nviurJSpMbWSXnuaDlfidk76B66Np5mlnN5BiHqbBj34GCVKz5VQtx
+3kMY1y30YWyiHAEZiV3PLQc8/A9MnJM/q/mHaulmTuJi8A85TWadqUNXgiaIMkqz
+bKaauR1/GCxXuEVroqtyR99RCWhfakTz04KfIbt83QR0imWC6uhmvD/DXJ03XFzd
+XkK5aNp+ef1sBQgFKjeXV6EMuq+UgEDPXlCDUJAqsZt6W/ohrCAHWQYZ/RSvvaMJ
+O7aWROGAC/lh6ATOIbFlGVppw6zUGdIDkB5FVF1MC7CyDndncFrY+OJzAgMBAAGj
+UDBOMB0GA1UdDgQWBBT8fu6QFIfxlQvMWjl5pmfBjL6ciDAfBgNVHSMEGDAWgBT8
+fu6QFIfxlQvMWjl5pmfBjL6ciDAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUA
+A4IBAQDI+f6GMBJxRJNKrgbUYLD1U6LWEQJQ50g2NxGy0j+TL6oypoo/kyME3tOR
+EmXEDzytGcSaQ78xYcg97UQd8OhXYQr0qwZ/JLarmhCVK/bfbGTIn4Mk4ZgDqcOU
+46jsJeEZwUSrrq7svKO5d7+wV0VGPO+Ww4yzRCPwm2puXFY1+KpTxYX31+wwMB8p
+7GuJEDgV08qzLfcBAfSFFYiOHL3tJ+XNKFNRqigjeYrWuAMphOhpYfYnU0d0upe8
+wWx9Unm8qSkc7hiS/vvs1v7Pv1sqMFRBoaKOTqZ7Wz/5AySGPQjeMV/atmArDEkx
+z58OEgTzg1J/Keztxwj7I2KnYHyH
+-----END CERTIFICATE-----
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/ssl-cert/client.cer b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/ssl-cert/client.cer
new file mode 100644
index 000000000..33a266a82
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/ssl-cert/client.cer
@@ -0,0 +1,23 @@
+-----BEGIN CERTIFICATE-----
+MIID6TCCAtGgAwIBAgIDAIFpMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNVBAYTAkNO
+MQswCQYDVQQIDAJHRDELMAkGA1UEBwwCR1oxDDAKBgNVBAoMA1NTVDEPMA0GA1UE
+CwwGSmVzc01BMRcwFQYDVQQDDA53d3cuamVzc21hLm9yZzEeMBwGCSqGSIb3DQEJ
+ARYPbGRjc2FhQDIxY24uY29tMB4XDTE2MDEwMTAwMDAwMFoXDTI2MDEwMTAwMDAw
+MFowcjELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQwwCgYDVQQKDANTU1QxDzAN
+BgNVBAsMBkplc3NNQTEXMBUGA1UEAwwOd3d3Lmplc3NtYS5vcmcxHjAcBgkqhkiG
+9w0BCQEWD2xkY3NhYUAyMWNuLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBAOFlDuWj95Nov+48W0ZaUp69GVB+U3orPuVm+fU5gXgl0tJbNbXS0GOM
+MspmMB0WxciTfj+t/WufpcHKzryHwrbqmMgrZiSyrp4ulA2mQuTPR32vgQ3/2eBs
+O884GmKOUbiaORgHGBoRAdOnoWarM7B/igS6WGqPetaUz12QAv2vzw9Qn0xxIBpr
+SVJumTo9HtOvuRj0BNXMRRYp+lfX2+96cftidyU1q+2Y2v3Fedzlo8Lr7m1ZkPcp
+ugQDz3R0kXvigDPAKhbTj6eAXJ/hcPOCGQ5RTIZJH4JnJ2jKw5lTjJ6y0rbt9Jq9
+NuIqz3GORHYWY4xBmbdTZy0BrbQOePECAwEAAaN7MHkwCQYDVR0TBAIwADAsBglg
+hkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0O
+BBYEFHYUdE6SbzXIWA8m3TwdgUJfAT6+MB8GA1UdIwQYMBaAFPx+7pAUh/GVC8xa
+OXmmZ8GMvpyIMA0GCSqGSIb3DQEBCwUAA4IBAQCZWaDrHbRHNNEaCVVFl5WCNqyd
+y1MpI2iErmfiCTNiG4v9wImTGWIWRHc3dZowniwSb43OuuhlpdWCxeal9nTL6iCP
+B486EMOsVWcfUZkPeK4cBgRXbHTmjxfmQEHHA6NTQdRc7LGq4tjhYs8zmxBVI2HO
+uIp0Qbj/Mb2j8r13IC91Z5Ontq0mQTIg0vvffZsqvcjs3Mmrxr2iX/EYpKNR2DP+
+9msWTZH734tZ2I7vORZOprpdAwELOyVLXkKIcP9qkRPAcFNk0Fl5peBQtBuP1ky5
+kUzWMQq2eoy73miPRnQ8ZjZ/3xTXhMKJ6bCn3tbWrjvc1TwpobfwyfsFH9sq
+-----END CERTIFICATE-----
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/ssl-cert/client.crt b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/ssl-cert/client.crt
new file mode 100644
index 000000000..a87d4f3f7
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/ssl-cert/client.crt
@@ -0,0 +1,82 @@
+Certificate:
+ Data:
+ Version: 3 (0x2)
+ Serial Number: 33129 (0x8169)
+ Signature Algorithm: sha256WithRSAEncryption
+ Issuer: C=CN, ST=GD, L=GZ, O=SST, OU=JessMA, CN=www.jessma.org/emailAddress=ldcsaa@21cn.com
+ Validity
+ Not Before: Jan 1 00:00:00 2016 GMT
+ Not After : Jan 1 00:00:00 2026 GMT
+ Subject: C=CN, ST=GD, O=SST, OU=JessMA, CN=www.jessma.org/emailAddress=ldcsaa@21cn.com
+ Subject Public Key Info:
+ Public Key Algorithm: rsaEncryption
+ Public-Key: (2048 bit)
+ Modulus:
+ 00:e1:65:0e:e5:a3:f7:93:68:bf:ee:3c:5b:46:5a:
+ 52:9e:bd:19:50:7e:53:7a:2b:3e:e5:66:f9:f5:39:
+ 81:78:25:d2:d2:5b:35:b5:d2:d0:63:8c:32:ca:66:
+ 30:1d:16:c5:c8:93:7e:3f:ad:fd:6b:9f:a5:c1:ca:
+ ce:bc:87:c2:b6:ea:98:c8:2b:66:24:b2:ae:9e:2e:
+ 94:0d:a6:42:e4:cf:47:7d:af:81:0d:ff:d9:e0:6c:
+ 3b:cf:38:1a:62:8e:51:b8:9a:39:18:07:18:1a:11:
+ 01:d3:a7:a1:66:ab:33:b0:7f:8a:04:ba:58:6a:8f:
+ 7a:d6:94:cf:5d:90:02:fd:af:cf:0f:50:9f:4c:71:
+ 20:1a:6b:49:52:6e:99:3a:3d:1e:d3:af:b9:18:f4:
+ 04:d5:cc:45:16:29:fa:57:d7:db:ef:7a:71:fb:62:
+ 77:25:35:ab:ed:98:da:fd:c5:79:dc:e5:a3:c2:eb:
+ ee:6d:59:90:f7:29:ba:04:03:cf:74:74:91:7b:e2:
+ 80:33:c0:2a:16:d3:8f:a7:80:5c:9f:e1:70:f3:82:
+ 19:0e:51:4c:86:49:1f:82:67:27:68:ca:c3:99:53:
+ 8c:9e:b2:d2:b6:ed:f4:9a:bd:36:e2:2a:cf:71:8e:
+ 44:76:16:63:8c:41:99:b7:53:67:2d:01:ad:b4:0e:
+ 78:f1
+ Exponent: 65537 (0x10001)
+ X509v3 extensions:
+ X509v3 Basic Constraints:
+ CA:FALSE
+ Netscape Comment:
+ OpenSSL Generated Certificate
+ X509v3 Subject Key Identifier:
+ 76:14:74:4E:92:6F:35:C8:58:0F:26:DD:3C:1D:81:42:5F:01:3E:BE
+ X509v3 Authority Key Identifier:
+ keyid:FC:7E:EE:90:14:87:F1:95:0B:CC:5A:39:79:A6:67:C1:8C:BE:9C:88
+
+ Signature Algorithm: sha256WithRSAEncryption
+ 99:59:a0:eb:1d:b4:47:34:d1:1a:09:55:45:97:95:82:36:ac:
+ 9d:cb:53:29:23:68:84:ae:67:e2:09:33:62:1b:8b:fd:c0:89:
+ 93:19:62:16:44:77:37:75:9a:30:9e:2c:12:6f:8d:ce:ba:e8:
+ 65:a5:d5:82:c5:e6:a5:f6:74:cb:ea:20:8f:07:8f:3a:10:c3:
+ ac:55:67:1f:51:99:0f:78:ae:1c:06:04:57:6c:74:e6:8f:17:
+ e6:40:41:c7:03:a3:53:41:d4:5c:ec:b1:aa:e2:d8:e1:62:cf:
+ 33:9b:10:55:23:61:ce:b8:8a:74:41:b8:ff:31:bd:a3:f2:bd:
+ 77:20:2f:75:67:93:a7:b6:ad:26:41:32:20:d2:fb:df:7d:9b:
+ 2a:bd:c8:ec:dc:c9:ab:c6:bd:a2:5f:f1:18:a4:a3:51:d8:33:
+ fe:f6:6b:16:4d:91:fb:df:8b:59:d8:8e:ef:39:16:4e:a6:ba:
+ 5d:03:01:0b:3b:25:4b:5e:42:88:70:ff:6a:91:13:c0:70:53:
+ 64:d0:59:79:a5:e0:50:b4:1b:8f:d6:4c:b9:91:4c:d6:31:0a:
+ b6:7a:8c:bb:de:68:8f:46:74:3c:66:36:7f:df:14:d7:84:c2:
+ 89:e9:b0:a7:de:d6:d6:ae:3b:dc:d5:3c:29:a1:b7:f0:c9:fb:
+ 05:1f:db:2a
+-----BEGIN CERTIFICATE-----
+MIID6TCCAtGgAwIBAgIDAIFpMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNVBAYTAkNO
+MQswCQYDVQQIDAJHRDELMAkGA1UEBwwCR1oxDDAKBgNVBAoMA1NTVDEPMA0GA1UE
+CwwGSmVzc01BMRcwFQYDVQQDDA53d3cuamVzc21hLm9yZzEeMBwGCSqGSIb3DQEJ
+ARYPbGRjc2FhQDIxY24uY29tMB4XDTE2MDEwMTAwMDAwMFoXDTI2MDEwMTAwMDAw
+MFowcjELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQwwCgYDVQQKDANTU1QxDzAN
+BgNVBAsMBkplc3NNQTEXMBUGA1UEAwwOd3d3Lmplc3NtYS5vcmcxHjAcBgkqhkiG
+9w0BCQEWD2xkY3NhYUAyMWNuLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBAOFlDuWj95Nov+48W0ZaUp69GVB+U3orPuVm+fU5gXgl0tJbNbXS0GOM
+MspmMB0WxciTfj+t/WufpcHKzryHwrbqmMgrZiSyrp4ulA2mQuTPR32vgQ3/2eBs
+O884GmKOUbiaORgHGBoRAdOnoWarM7B/igS6WGqPetaUz12QAv2vzw9Qn0xxIBpr
+SVJumTo9HtOvuRj0BNXMRRYp+lfX2+96cftidyU1q+2Y2v3Fedzlo8Lr7m1ZkPcp
+ugQDz3R0kXvigDPAKhbTj6eAXJ/hcPOCGQ5RTIZJH4JnJ2jKw5lTjJ6y0rbt9Jq9
+NuIqz3GORHYWY4xBmbdTZy0BrbQOePECAwEAAaN7MHkwCQYDVR0TBAIwADAsBglg
+hkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0O
+BBYEFHYUdE6SbzXIWA8m3TwdgUJfAT6+MB8GA1UdIwQYMBaAFPx+7pAUh/GVC8xa
+OXmmZ8GMvpyIMA0GCSqGSIb3DQEBCwUAA4IBAQCZWaDrHbRHNNEaCVVFl5WCNqyd
+y1MpI2iErmfiCTNiG4v9wImTGWIWRHc3dZowniwSb43OuuhlpdWCxeal9nTL6iCP
+B486EMOsVWcfUZkPeK4cBgRXbHTmjxfmQEHHA6NTQdRc7LGq4tjhYs8zmxBVI2HO
+uIp0Qbj/Mb2j8r13IC91Z5Ontq0mQTIg0vvffZsqvcjs3Mmrxr2iX/EYpKNR2DP+
+9msWTZH734tZ2I7vORZOprpdAwELOyVLXkKIcP9qkRPAcFNk0Fl5peBQtBuP1ky5
+kUzWMQq2eoy73miPRnQ8ZjZ/3xTXhMKJ6bCn3tbWrjvc1TwpobfwyfsFH9sq
+-----END CERTIFICATE-----
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/ssl-cert/client.csr b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/ssl-cert/client.csr
new file mode 100644
index 000000000..d35803d5b
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/ssl-cert/client.csr
@@ -0,0 +1,18 @@
+-----BEGIN CERTIFICATE REQUEST-----
+MIIC8TCCAdkCAQAwfzELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQswCQYDVQQH
+DAJHWjEMMAoGA1UECgwDU1NUMQ8wDQYDVQQLDAZKZXNzTUExFzAVBgNVBAMMDnd3
+dy5qZXNzbWEub3JnMR4wHAYJKoZIhvcNAQkBFg9sZGNzYWFAMjFjbi5jb20wggEi
+MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDhZQ7lo/eTaL/uPFtGWlKevRlQ
+flN6Kz7lZvn1OYF4JdLSWzW10tBjjDLKZjAdFsXIk34/rf1rn6XBys68h8K26pjI
+K2Yksq6eLpQNpkLkz0d9r4EN/9ngbDvPOBpijlG4mjkYBxgaEQHTp6FmqzOwf4oE
+ulhqj3rWlM9dkAL9r88PUJ9McSAaa0lSbpk6PR7Tr7kY9ATVzEUWKfpX19vvenH7
+YnclNavtmNr9xXnc5aPC6+5tWZD3KboEA890dJF74oAzwCoW04+ngFyf4XDzghkO
+UUyGSR+CZydoysOZU4yestK27fSavTbiKs9xjkR2FmOMQZm3U2ctAa20DnjxAgMB
+AAGgLTASBgkqhkiG9w0BCQIxBQwDU1NUMBcGCSqGSIb3DQEJBzEKDAhwcG1tQHNz
+dDANBgkqhkiG9w0BAQsFAAOCAQEAtHiWz0XuqZi/2aoinH472W/sqG7S7YizbcQC
+kCRgYqQw32U0ujI2ndTt2WYDgFUlI1KY5N4b5pl2pdDepFWXLcLyG3nyCjXlJng5
+8YLENg02+xsLOZUjZEsY5pxEkrKYBBjt537P+fA83jtxakC+9xvTEC94CxICWMvx
+OVw1mWjUE3a7Hby7ChkOX/PhJdNzHdsMU9fKCWEFFmyJgrNkFc1nB1omt0j+OkXA
+scwFqhji7yJuwxboaDLdnTNIGGBbDLcw44s7udWB4QayvHwuNgcZ8shxlm686Xi5
+K+SXJTi0DPFKcucU2LA+VCLnMtefghCxbrU7fcFyPsJuT+jdsg==
+-----END CERTIFICATE REQUEST-----
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/ssl-cert/client.key b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/ssl-cert/client.key
new file mode 100644
index 000000000..a9f3dd0ca
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/ssl-cert/client.key
@@ -0,0 +1,30 @@
+-----BEGIN RSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: AES-256-CBC,5F6ACADA6B6B1238FD34A0EC0C5EC2ED
+
+F0JylDtptlBaFpbCP9Qa2pRf5z8sBbUta6G+rBwuWn7GxU//Nub49/Mf0uRm3YTN
+PmCbIQKRyn/u92Yk6cJ9vLCiWe89pa+qlv+kF9PWmYo8Lt6dvtSr1TNAjelGvQjC
+HAi58BHoXXIRrZJQKjzFKGcwhWExCAOct5UDuHu64IvWg+LDccd+tTU/kdKEI9QY
+3POohP6etBBsFIoJFd23yxxNrvxK/v0as7EI/SeFzv7Mfn7haL4LxEsN+9XPN/Ap
+U0IxOT84dMgtIsvW2gvit+qNuaSvrocyEOr5uEfpoS58/yyb0VyNg94itkc6IK3X
+Yeokm2YOJk/4yMoZAeNMMDdR82csCzpTTHurMIZLgtr+SO1ChtreKm0XQB8QNyJ+
+CouAAHOBsxTPgVY/QS1TDrmEZv7cHOAvJp7BYvKroD/pi5Wu2IHAlIEXhdW3Evwn
+jyzUgMUHdXJIcngkkopYEoTPVEXsYX6aHvPJI+jDDKIfDM75SOOw1z7Divsb77I8
+n1jMYDUH4i2g2BixfwFRPxZ6NnRLtqM+TD4yecu3zsqvs0UIlrZFuVIl98Guqa1H
+tJKCxWEaJNb5YZg8GgdZFXYWXUN/HtFqWJelhGcjy48RjOy7LHJ30fkXV07b2s6M
+XcXj9g4jRRyAiZ/kmTqs+Oj6hn+iI4vdGumc2sG0+ZkUwDkj3zfn1N1+J/htVM1z
+Y2kHpKGZzQZ4eriy6CM++FrZ9CSNIPqh5AzayPuMxvEtd27vBnO8nKMwThbhGPtj
+fd7uPPzfG/W7Zo55lYL5opEzvOdULWm8+31ojitN7GSjsFW46HWoyYfTOlTAzP5+
+yPlUGxUyBhlqeXnQNTiLtRb22I2FF41HYH7GsYcxonHw3rKCcJedzL5BMg6Ic2xN
+ZxwXdj20rkugtcSAPxp3OGrmBiCX0wYiZaSgNg5zqI1SIhiWzkq64xoiIFlmxGEo
+Q/Vv7mpRmf1X0eTjiTYz4tYU6TPgtAqLLpmVNbozPnb5eGaMDbRlJnGJjqlXzPAw
+7qUhsb/KZ/k7yZLE+rseicwtAYA0th9A2tpc0CY3/EiL0w5E3zR0SPMinCJeO0rJ
+91njgDPxJ5lPXC04Dlgt/a1WK6D/yQ2kpIiNBUIlGZtr+nD9GqPYiGTqND53TL5f
+PJrr1PibL2l3fyhNDgNhgmY1CGpB6hNkqPOpit+XhGq6X0PlELcj7zYN3acW47jp
+KVm2lT1AXhzqemTWqPQL1+3s8ix0nGVNlmzsOFHqCkmr7FZb76hD5YTtGkOU/Kn3
+I5GqS5GHSCAVJnJWuFk2Y8qqg69mJREcoKThoYsuo8hw9JqZM34JIqqT029Nj35B
+xau4hSXkmHuUCGpwbr0yvsz3ikRfM6y0cT3T6oBiWgfYktpX//89YbyYGcQX7tK0
+aaHW2zvAfMyCWT0CxRen5GAyVeb+WFBdo+xD0HpQcRFtByiNNXmm4kJAoZujeHpe
+ZWcu3xkVcTqWMixAYHcDv3L0EXUnVeWplovRh1+OSm7YvdaLL3cctHoW3a8Kzdc1
+rtoGVI+f4xSEDheB5P4NX6UYbDLIGMPPuR0F5EliL+vmyJcEMuLY8KTPJ0uwf7Ns
+-----END RSA PRIVATE KEY-----
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/ssl-cert/client.pem b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/ssl-cert/client.pem
new file mode 100644
index 000000000..600dc8514
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/ssl-cert/client.pem
@@ -0,0 +1,53 @@
+-----BEGIN RSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: AES-256-CBC,5F6ACADA6B6B1238FD34A0EC0C5EC2ED
+
+F0JylDtptlBaFpbCP9Qa2pRf5z8sBbUta6G+rBwuWn7GxU//Nub49/Mf0uRm3YTN
+PmCbIQKRyn/u92Yk6cJ9vLCiWe89pa+qlv+kF9PWmYo8Lt6dvtSr1TNAjelGvQjC
+HAi58BHoXXIRrZJQKjzFKGcwhWExCAOct5UDuHu64IvWg+LDccd+tTU/kdKEI9QY
+3POohP6etBBsFIoJFd23yxxNrvxK/v0as7EI/SeFzv7Mfn7haL4LxEsN+9XPN/Ap
+U0IxOT84dMgtIsvW2gvit+qNuaSvrocyEOr5uEfpoS58/yyb0VyNg94itkc6IK3X
+Yeokm2YOJk/4yMoZAeNMMDdR82csCzpTTHurMIZLgtr+SO1ChtreKm0XQB8QNyJ+
+CouAAHOBsxTPgVY/QS1TDrmEZv7cHOAvJp7BYvKroD/pi5Wu2IHAlIEXhdW3Evwn
+jyzUgMUHdXJIcngkkopYEoTPVEXsYX6aHvPJI+jDDKIfDM75SOOw1z7Divsb77I8
+n1jMYDUH4i2g2BixfwFRPxZ6NnRLtqM+TD4yecu3zsqvs0UIlrZFuVIl98Guqa1H
+tJKCxWEaJNb5YZg8GgdZFXYWXUN/HtFqWJelhGcjy48RjOy7LHJ30fkXV07b2s6M
+XcXj9g4jRRyAiZ/kmTqs+Oj6hn+iI4vdGumc2sG0+ZkUwDkj3zfn1N1+J/htVM1z
+Y2kHpKGZzQZ4eriy6CM++FrZ9CSNIPqh5AzayPuMxvEtd27vBnO8nKMwThbhGPtj
+fd7uPPzfG/W7Zo55lYL5opEzvOdULWm8+31ojitN7GSjsFW46HWoyYfTOlTAzP5+
+yPlUGxUyBhlqeXnQNTiLtRb22I2FF41HYH7GsYcxonHw3rKCcJedzL5BMg6Ic2xN
+ZxwXdj20rkugtcSAPxp3OGrmBiCX0wYiZaSgNg5zqI1SIhiWzkq64xoiIFlmxGEo
+Q/Vv7mpRmf1X0eTjiTYz4tYU6TPgtAqLLpmVNbozPnb5eGaMDbRlJnGJjqlXzPAw
+7qUhsb/KZ/k7yZLE+rseicwtAYA0th9A2tpc0CY3/EiL0w5E3zR0SPMinCJeO0rJ
+91njgDPxJ5lPXC04Dlgt/a1WK6D/yQ2kpIiNBUIlGZtr+nD9GqPYiGTqND53TL5f
+PJrr1PibL2l3fyhNDgNhgmY1CGpB6hNkqPOpit+XhGq6X0PlELcj7zYN3acW47jp
+KVm2lT1AXhzqemTWqPQL1+3s8ix0nGVNlmzsOFHqCkmr7FZb76hD5YTtGkOU/Kn3
+I5GqS5GHSCAVJnJWuFk2Y8qqg69mJREcoKThoYsuo8hw9JqZM34JIqqT029Nj35B
+xau4hSXkmHuUCGpwbr0yvsz3ikRfM6y0cT3T6oBiWgfYktpX//89YbyYGcQX7tK0
+aaHW2zvAfMyCWT0CxRen5GAyVeb+WFBdo+xD0HpQcRFtByiNNXmm4kJAoZujeHpe
+ZWcu3xkVcTqWMixAYHcDv3L0EXUnVeWplovRh1+OSm7YvdaLL3cctHoW3a8Kzdc1
+rtoGVI+f4xSEDheB5P4NX6UYbDLIGMPPuR0F5EliL+vmyJcEMuLY8KTPJ0uwf7Ns
+-----END RSA PRIVATE KEY-----
+-----BEGIN CERTIFICATE-----
+MIID6TCCAtGgAwIBAgIDAIFpMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNVBAYTAkNO
+MQswCQYDVQQIDAJHRDELMAkGA1UEBwwCR1oxDDAKBgNVBAoMA1NTVDEPMA0GA1UE
+CwwGSmVzc01BMRcwFQYDVQQDDA53d3cuamVzc21hLm9yZzEeMBwGCSqGSIb3DQEJ
+ARYPbGRjc2FhQDIxY24uY29tMB4XDTE2MDEwMTAwMDAwMFoXDTI2MDEwMTAwMDAw
+MFowcjELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQwwCgYDVQQKDANTU1QxDzAN
+BgNVBAsMBkplc3NNQTEXMBUGA1UEAwwOd3d3Lmplc3NtYS5vcmcxHjAcBgkqhkiG
+9w0BCQEWD2xkY3NhYUAyMWNuLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBAOFlDuWj95Nov+48W0ZaUp69GVB+U3orPuVm+fU5gXgl0tJbNbXS0GOM
+MspmMB0WxciTfj+t/WufpcHKzryHwrbqmMgrZiSyrp4ulA2mQuTPR32vgQ3/2eBs
+O884GmKOUbiaORgHGBoRAdOnoWarM7B/igS6WGqPetaUz12QAv2vzw9Qn0xxIBpr
+SVJumTo9HtOvuRj0BNXMRRYp+lfX2+96cftidyU1q+2Y2v3Fedzlo8Lr7m1ZkPcp
+ugQDz3R0kXvigDPAKhbTj6eAXJ/hcPOCGQ5RTIZJH4JnJ2jKw5lTjJ6y0rbt9Jq9
+NuIqz3GORHYWY4xBmbdTZy0BrbQOePECAwEAAaN7MHkwCQYDVR0TBAIwADAsBglg
+hkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0O
+BBYEFHYUdE6SbzXIWA8m3TwdgUJfAT6+MB8GA1UdIwQYMBaAFPx+7pAUh/GVC8xa
+OXmmZ8GMvpyIMA0GCSqGSIb3DQEBCwUAA4IBAQCZWaDrHbRHNNEaCVVFl5WCNqyd
+y1MpI2iErmfiCTNiG4v9wImTGWIWRHc3dZowniwSb43OuuhlpdWCxeal9nTL6iCP
+B486EMOsVWcfUZkPeK4cBgRXbHTmjxfmQEHHA6NTQdRc7LGq4tjhYs8zmxBVI2HO
+uIp0Qbj/Mb2j8r13IC91Z5Ontq0mQTIg0vvffZsqvcjs3Mmrxr2iX/EYpKNR2DP+
+9msWTZH734tZ2I7vORZOprpdAwELOyVLXkKIcP9qkRPAcFNk0Fl5peBQtBuP1ky5
+kUzWMQq2eoy73miPRnQ8ZjZ/3xTXhMKJ6bCn3tbWrjvc1TwpobfwyfsFH9sq
+-----END CERTIFICATE-----
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/ssl-cert/server.cer b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/ssl-cert/server.cer
new file mode 100644
index 000000000..0f8fe3b83
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/ssl-cert/server.cer
@@ -0,0 +1,23 @@
+-----BEGIN CERTIFICATE-----
+MIID6TCCAtGgAwIBAgIDAIFoMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNVBAYTAkNO
+MQswCQYDVQQIDAJHRDELMAkGA1UEBwwCR1oxDDAKBgNVBAoMA1NTVDEPMA0GA1UE
+CwwGSmVzc01BMRcwFQYDVQQDDA53d3cuamVzc21hLm9yZzEeMBwGCSqGSIb3DQEJ
+ARYPbGRjc2FhQDIxY24uY29tMB4XDTE2MDEwMTAwMDAwMFoXDTI2MDEwMTAwMDAw
+MFowcjELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQwwCgYDVQQKDANTU1QxDzAN
+BgNVBAsMBkplc3NNQTEXMBUGA1UEAwwOd3d3Lmplc3NtYS5vcmcxHjAcBgkqhkiG
+9w0BCQEWD2xkY3NhYUAyMWNuLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBALEOPuYKEl/iN3ub/QNaaqo0Hynk62znTp5kXj0zQAqxLxwHU117xHBk
+0LCZux0LnDFl9JAlilvqfeaXRWmQd6hrvV+1mNpnIe2xfyNWwa37QDNjXB7mEg3V
+O/dN9KeVxq9RlH/dQJ7qZlYy4i7wznYMUlz38378wYoOvdAQBX1UrdjWA5T4q0Da
+cRRAV0fIp45hBarp6T1nhDEvttU8yud2lIEV9jWblkyGIhU4FisGOIRRGhnKzCAh
+CYSZ59mq8Wf4FawMyz/H4noHcWWJu4ID1oAE+VFGXKm78qjp/T71/myn5lcGquTx
+oSoJrx7og+529eaJwgeJd2JF7OQ5NysCAwEAAaN7MHkwCQYDVR0TBAIwADAsBglg
+hkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0O
+BBYEFO0CmyFtrGLrkNkkA62QPzSp8vgJMB8GA1UdIwQYMBaAFPx+7pAUh/GVC8xa
+OXmmZ8GMvpyIMA0GCSqGSIb3DQEBCwUAA4IBAQBT1JGXn7HMyNHZntM4kCp7kwN9
+HSpcbQxbWFtk+l8ANP9SqCIEd4xc4rAaUDDDMdD2S0wF9iio1MA1KC5OoJ5Dqw6C
+yTa08LRowlmnw+NNZC2xzaSRmzLGlPDHNauZ/G2ScdWsqR5v2+pKF7bYxAajRkk5
+oqRRDI6X7vHsvX/kqTn9Prk0sFmU0EU64az2iUe/MG9v1WY8eOV+tTEq29GuYYjJ
+E3H8vaeq1fTB0vYgT5xoCc36xVXju/3l17CE12n5of004u4eRi3/T0wbp9WgG2ns
+wjetaYeIAWS/AJQzIK22tztGAbAk6kTgsO5YLx2h6GLGpytDXWvgzr2PdEu1
+-----END CERTIFICATE-----
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/ssl-cert/server.crt b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/ssl-cert/server.crt
new file mode 100644
index 000000000..a6213ed40
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/ssl-cert/server.crt
@@ -0,0 +1,82 @@
+Certificate:
+ Data:
+ Version: 3 (0x2)
+ Serial Number: 33128 (0x8168)
+ Signature Algorithm: sha256WithRSAEncryption
+ Issuer: C=CN, ST=GD, L=GZ, O=SST, OU=JessMA, CN=www.jessma.org/emailAddress=ldcsaa@21cn.com
+ Validity
+ Not Before: Jan 1 00:00:00 2016 GMT
+ Not After : Jan 1 00:00:00 2026 GMT
+ Subject: C=CN, ST=GD, O=SST, OU=JessMA, CN=www.jessma.org/emailAddress=ldcsaa@21cn.com
+ Subject Public Key Info:
+ Public Key Algorithm: rsaEncryption
+ Public-Key: (2048 bit)
+ Modulus:
+ 00:b1:0e:3e:e6:0a:12:5f:e2:37:7b:9b:fd:03:5a:
+ 6a:aa:34:1f:29:e4:eb:6c:e7:4e:9e:64:5e:3d:33:
+ 40:0a:b1:2f:1c:07:53:5d:7b:c4:70:64:d0:b0:99:
+ bb:1d:0b:9c:31:65:f4:90:25:8a:5b:ea:7d:e6:97:
+ 45:69:90:77:a8:6b:bd:5f:b5:98:da:67:21:ed:b1:
+ 7f:23:56:c1:ad:fb:40:33:63:5c:1e:e6:12:0d:d5:
+ 3b:f7:4d:f4:a7:95:c6:af:51:94:7f:dd:40:9e:ea:
+ 66:56:32:e2:2e:f0:ce:76:0c:52:5c:f7:f3:7e:fc:
+ c1:8a:0e:bd:d0:10:05:7d:54:ad:d8:d6:03:94:f8:
+ ab:40:da:71:14:40:57:47:c8:a7:8e:61:05:aa:e9:
+ e9:3d:67:84:31:2f:b6:d5:3c:ca:e7:76:94:81:15:
+ f6:35:9b:96:4c:86:22:15:38:16:2b:06:38:84:51:
+ 1a:19:ca:cc:20:21:09:84:99:e7:d9:aa:f1:67:f8:
+ 15:ac:0c:cb:3f:c7:e2:7a:07:71:65:89:bb:82:03:
+ d6:80:04:f9:51:46:5c:a9:bb:f2:a8:e9:fd:3e:f5:
+ fe:6c:a7:e6:57:06:aa:e4:f1:a1:2a:09:af:1e:e8:
+ 83:ee:76:f5:e6:89:c2:07:89:77:62:45:ec:e4:39:
+ 37:2b
+ Exponent: 65537 (0x10001)
+ X509v3 extensions:
+ X509v3 Basic Constraints:
+ CA:FALSE
+ Netscape Comment:
+ OpenSSL Generated Certificate
+ X509v3 Subject Key Identifier:
+ ED:02:9B:21:6D:AC:62:EB:90:D9:24:03:AD:90:3F:34:A9:F2:F8:09
+ X509v3 Authority Key Identifier:
+ keyid:FC:7E:EE:90:14:87:F1:95:0B:CC:5A:39:79:A6:67:C1:8C:BE:9C:88
+
+ Signature Algorithm: sha256WithRSAEncryption
+ 53:d4:91:97:9f:b1:cc:c8:d1:d9:9e:d3:38:90:2a:7b:93:03:
+ 7d:1d:2a:5c:6d:0c:5b:58:5b:64:fa:5f:00:34:ff:52:a8:22:
+ 04:77:8c:5c:e2:b0:1a:50:30:c3:31:d0:f6:4b:4c:05:f6:28:
+ a8:d4:c0:35:28:2e:4e:a0:9e:43:ab:0e:82:c9:36:b4:f0:b4:
+ 68:c2:59:a7:c3:e3:4d:64:2d:b1:cd:a4:91:9b:32:c6:94:f0:
+ c7:35:ab:99:fc:6d:92:71:d5:ac:a9:1e:6f:db:ea:4a:17:b6:
+ d8:c4:06:a3:46:49:39:a2:a4:51:0c:8e:97:ee:f1:ec:bd:7f:
+ e4:a9:39:fd:3e:b9:34:b0:59:94:d0:45:3a:e1:ac:f6:89:47:
+ bf:30:6f:6f:d5:66:3c:78:e5:7e:b5:31:2a:db:d1:ae:61:88:
+ c9:13:71:fc:bd:a7:aa:d5:f4:c1:d2:f6:20:4f:9c:68:09:cd:
+ fa:c5:55:e3:bb:fd:e5:d7:b0:84:d7:69:f9:a1:fd:34:e2:ee:
+ 1e:46:2d:ff:4f:4c:1b:a7:d5:a0:1b:69:ec:c2:37:ad:69:87:
+ 88:01:64:bf:00:94:33:20:ad:b6:b7:3b:46:01:b0:24:ea:44:
+ e0:b0:ee:58:2f:1d:a1:e8:62:c6:a7:2b:43:5d:6b:e0:ce:bd:
+ 8f:74:4b:b5
+-----BEGIN CERTIFICATE-----
+MIID6TCCAtGgAwIBAgIDAIFoMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNVBAYTAkNO
+MQswCQYDVQQIDAJHRDELMAkGA1UEBwwCR1oxDDAKBgNVBAoMA1NTVDEPMA0GA1UE
+CwwGSmVzc01BMRcwFQYDVQQDDA53d3cuamVzc21hLm9yZzEeMBwGCSqGSIb3DQEJ
+ARYPbGRjc2FhQDIxY24uY29tMB4XDTE2MDEwMTAwMDAwMFoXDTI2MDEwMTAwMDAw
+MFowcjELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQwwCgYDVQQKDANTU1QxDzAN
+BgNVBAsMBkplc3NNQTEXMBUGA1UEAwwOd3d3Lmplc3NtYS5vcmcxHjAcBgkqhkiG
+9w0BCQEWD2xkY3NhYUAyMWNuLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBALEOPuYKEl/iN3ub/QNaaqo0Hynk62znTp5kXj0zQAqxLxwHU117xHBk
+0LCZux0LnDFl9JAlilvqfeaXRWmQd6hrvV+1mNpnIe2xfyNWwa37QDNjXB7mEg3V
+O/dN9KeVxq9RlH/dQJ7qZlYy4i7wznYMUlz38378wYoOvdAQBX1UrdjWA5T4q0Da
+cRRAV0fIp45hBarp6T1nhDEvttU8yud2lIEV9jWblkyGIhU4FisGOIRRGhnKzCAh
+CYSZ59mq8Wf4FawMyz/H4noHcWWJu4ID1oAE+VFGXKm78qjp/T71/myn5lcGquTx
+oSoJrx7og+529eaJwgeJd2JF7OQ5NysCAwEAAaN7MHkwCQYDVR0TBAIwADAsBglg
+hkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0O
+BBYEFO0CmyFtrGLrkNkkA62QPzSp8vgJMB8GA1UdIwQYMBaAFPx+7pAUh/GVC8xa
+OXmmZ8GMvpyIMA0GCSqGSIb3DQEBCwUAA4IBAQBT1JGXn7HMyNHZntM4kCp7kwN9
+HSpcbQxbWFtk+l8ANP9SqCIEd4xc4rAaUDDDMdD2S0wF9iio1MA1KC5OoJ5Dqw6C
+yTa08LRowlmnw+NNZC2xzaSRmzLGlPDHNauZ/G2ScdWsqR5v2+pKF7bYxAajRkk5
+oqRRDI6X7vHsvX/kqTn9Prk0sFmU0EU64az2iUe/MG9v1WY8eOV+tTEq29GuYYjJ
+E3H8vaeq1fTB0vYgT5xoCc36xVXju/3l17CE12n5of004u4eRi3/T0wbp9WgG2ns
+wjetaYeIAWS/AJQzIK22tztGAbAk6kTgsO5YLx2h6GLGpytDXWvgzr2PdEu1
+-----END CERTIFICATE-----
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/ssl-cert/server.csr b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/ssl-cert/server.csr
new file mode 100644
index 000000000..0306648a3
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/ssl-cert/server.csr
@@ -0,0 +1,18 @@
+-----BEGIN CERTIFICATE REQUEST-----
+MIIC8TCCAdkCAQAwfzELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQswCQYDVQQH
+DAJHWjEMMAoGA1UECgwDU1NUMQ8wDQYDVQQLDAZKZXNzTUExFzAVBgNVBAMMDnd3
+dy5qZXNzbWEub3JnMR4wHAYJKoZIhvcNAQkBFg9sZGNzYWFAMjFjbi5jb20wggEi
+MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCxDj7mChJf4jd7m/0DWmqqNB8p
+5Ots506eZF49M0AKsS8cB1Nde8RwZNCwmbsdC5wxZfSQJYpb6n3ml0VpkHeoa71f
+tZjaZyHtsX8jVsGt+0AzY1we5hIN1Tv3TfSnlcavUZR/3UCe6mZWMuIu8M52DFJc
+9/N+/MGKDr3QEAV9VK3Y1gOU+KtA2nEUQFdHyKeOYQWq6ek9Z4QxL7bVPMrndpSB
+FfY1m5ZMhiIVOBYrBjiEURoZyswgIQmEmefZqvFn+BWsDMs/x+J6B3FlibuCA9aA
+BPlRRlypu/Ko6f0+9f5sp+ZXBqrk8aEqCa8e6IPudvXmicIHiXdiRezkOTcrAgMB
+AAGgLTASBgkqhkiG9w0BCQIxBQwDU1NUMBcGCSqGSIb3DQEJBzEKDAhwcG1tQHNz
+dDANBgkqhkiG9w0BAQsFAAOCAQEAk9/S/9YUKjayh62Tagnk3hcJ5+YKJLHRtvv0
+Qu2HyPzpvyxORjQpnHaf+vpUj1W1amVQl7NSlNV181VzITtrySJyOdjvxTOvmITY
+stgCOXQiZeR6I9s2cZsh0yDcpiytlwnjWrFTgtIQ1dZgBRAvvJQIqoyrpgb22fva
+S3jilbFASColhEBeO0S8matO50qYwil7BabgQoUiu4QT6MhCXsJpNwi1qDD2rC/o
+Kffj63s4dRyJgqdbiYXMTDSfZvbx7UfnNCATBlniaoOTqbut1vmRGDYE+mkxly5X
+3KgcLvgpBoq0uUXNwsTNWo6CNthD8kY0fAkz34LG2aTKGy8Now==
+-----END CERTIFICATE REQUEST-----
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/ssl-cert/server.key b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/ssl-cert/server.key
new file mode 100644
index 000000000..2f36a1915
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/ssl-cert/server.key
@@ -0,0 +1,30 @@
+-----BEGIN RSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: AES-256-CBC,107800C9B21513D8F642A394FAD9047E
+
+bmaTCBYAzKzpUrdaT6sb/dbH5o3JbFu2d8s1NfKhghYUG/RWgzx5H8QWSsh1Ll+8
+701HwSwauwbKaBWzWP5bj4mjw9hXcva8l1QWeuW+Q0GsE7uWNZGFQZbCxER/9jOu
+36KMlx0twcIEGs9PNwnY7d9oS/BMVpiUqhL8sPihMLCFK0fm6VGjMrfdIZJuZXEv
+BKt+c0UPkkPmivZjSm6iTPKI6VpGeyg0sM/uZr+mRj7IOAD6vsSQnCfUOq00Rm14
+ABrer8dCWJDKrx1iLq7tFojII+JcB7oBy+8KC/t0MlqmIP2jx93/MVW5lbZ3mj2v
+BanVQvklHTLe/WHjoaltqBEKN0sIzfyed6qWudKHUa8yjAr0PS4rsTbO0S4fFz+A
+KFWEs8fuXsanFHt5akWDTMiw1n4HaiioT4jjhWRRIKGEndztyGMklShYAdSTqsZO
+vzPO+xqLlg6wOgCGZ3Kl/c243XyLMCI+lJlzu3ccqzQJbNfPADXUcxSTqaEByWG3
+YIXttKY5WFBcNjf9B3c1qfJMt3nGY2QewnL+rNm/qpose/AsFS+2aqMeRw7fYh3R
+O+H+G+0gxrSK0E3WiewMIvUqFI6W300MWx6O7d87OkbfwMLpLPumsfLKswOKaAIF
+p0RxSABSe5ixqnErsoiYGNf3bln4tsQ+v5jYUY+Gn/9mVTPEYs6uwC78UW5Gj+Za
+lB3V8aRxQjWBerhLhf3iCmkkOVaG5JvVJDmvwo6iBRZ4NNzkAqOJm/UvfWoKN91b
+riHAWNayqvOfzaK6KYiJlOR9D779pK6xL+gZ0zo3rIA2yzs5MJAvJmaq6SQmQFl1
+Vzhnf3hIGJFtJYQJhlr36pkPgG9jVdJPhZisY9EsIAHvDbbLlBNexSmZc2RZmsVL
+VG6WqOm85DzuZxGULK/CnXCLpBMKWf9y5YPJrLkuwQILrr2btnAivPfUU80S3E0c
+VslBodCkSGVx3iQoAVJv2+6ZNMRNLVzpLnlaVtHl/gvw+InJlXmzBlZQFKOCaOny
+sz67qKmK1KWui2G3AzuvTEL9O++FVO+irpSNSLozxif/erLJl7R60pBkrWwd6jGB
+8qQv7ni+xIeXDBLSu26zPunLR/2PhrrCv49KmqNmF7sSNx6xmcc3CfgEy+5+Tm97
+KPE4JlaH/ZW61TlzXojbZMaiJltkFkpagFgm2bXrN1nMk2d6R+Yfe78lSvPKoB8k
+1m7LY1lNXFZJh2hxQRhdV9oTokFahUSitQCg1S3eASuE2jFRRL4jrh4LcBWUHZnJ
+OOAwBDOF4RfGyfiDs0IlrnLvK3a2KorlHfvUyj+cwkRmgI8sWgkJuNpz1mKDn5UZ
+yGn2JczHY0CiInRGgwMnS1Z/WpJZYGNh7pP7Hm1RnzVslkWSJGaKJv9jDNUCyy8R
+L+nwUSd6m6r8YWcs3zdBYsDHGOO5MgAU5Q8yuLbEgaK5NJSJgGkm+ya5oB88Y6T0
+JcL/u5xKw4kJiKgiLr3zrWe5qV6+lpH7fGKy7fucJWltDkfQSD3Dp0b64TW4FuQq
+VQhDR+KykLK6QxM2x3/maMfG578Ku1F6g4RboDR/6uCFu6hQuCoNYBk/QB0XpY13
+-----END RSA PRIVATE KEY-----
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/ssl-cert/server.pem b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/ssl-cert/server.pem
new file mode 100644
index 000000000..1d6040ca9
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x64/Release/ssl-cert/server.pem
@@ -0,0 +1,53 @@
+-----BEGIN RSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: AES-256-CBC,107800C9B21513D8F642A394FAD9047E
+
+bmaTCBYAzKzpUrdaT6sb/dbH5o3JbFu2d8s1NfKhghYUG/RWgzx5H8QWSsh1Ll+8
+701HwSwauwbKaBWzWP5bj4mjw9hXcva8l1QWeuW+Q0GsE7uWNZGFQZbCxER/9jOu
+36KMlx0twcIEGs9PNwnY7d9oS/BMVpiUqhL8sPihMLCFK0fm6VGjMrfdIZJuZXEv
+BKt+c0UPkkPmivZjSm6iTPKI6VpGeyg0sM/uZr+mRj7IOAD6vsSQnCfUOq00Rm14
+ABrer8dCWJDKrx1iLq7tFojII+JcB7oBy+8KC/t0MlqmIP2jx93/MVW5lbZ3mj2v
+BanVQvklHTLe/WHjoaltqBEKN0sIzfyed6qWudKHUa8yjAr0PS4rsTbO0S4fFz+A
+KFWEs8fuXsanFHt5akWDTMiw1n4HaiioT4jjhWRRIKGEndztyGMklShYAdSTqsZO
+vzPO+xqLlg6wOgCGZ3Kl/c243XyLMCI+lJlzu3ccqzQJbNfPADXUcxSTqaEByWG3
+YIXttKY5WFBcNjf9B3c1qfJMt3nGY2QewnL+rNm/qpose/AsFS+2aqMeRw7fYh3R
+O+H+G+0gxrSK0E3WiewMIvUqFI6W300MWx6O7d87OkbfwMLpLPumsfLKswOKaAIF
+p0RxSABSe5ixqnErsoiYGNf3bln4tsQ+v5jYUY+Gn/9mVTPEYs6uwC78UW5Gj+Za
+lB3V8aRxQjWBerhLhf3iCmkkOVaG5JvVJDmvwo6iBRZ4NNzkAqOJm/UvfWoKN91b
+riHAWNayqvOfzaK6KYiJlOR9D779pK6xL+gZ0zo3rIA2yzs5MJAvJmaq6SQmQFl1
+Vzhnf3hIGJFtJYQJhlr36pkPgG9jVdJPhZisY9EsIAHvDbbLlBNexSmZc2RZmsVL
+VG6WqOm85DzuZxGULK/CnXCLpBMKWf9y5YPJrLkuwQILrr2btnAivPfUU80S3E0c
+VslBodCkSGVx3iQoAVJv2+6ZNMRNLVzpLnlaVtHl/gvw+InJlXmzBlZQFKOCaOny
+sz67qKmK1KWui2G3AzuvTEL9O++FVO+irpSNSLozxif/erLJl7R60pBkrWwd6jGB
+8qQv7ni+xIeXDBLSu26zPunLR/2PhrrCv49KmqNmF7sSNx6xmcc3CfgEy+5+Tm97
+KPE4JlaH/ZW61TlzXojbZMaiJltkFkpagFgm2bXrN1nMk2d6R+Yfe78lSvPKoB8k
+1m7LY1lNXFZJh2hxQRhdV9oTokFahUSitQCg1S3eASuE2jFRRL4jrh4LcBWUHZnJ
+OOAwBDOF4RfGyfiDs0IlrnLvK3a2KorlHfvUyj+cwkRmgI8sWgkJuNpz1mKDn5UZ
+yGn2JczHY0CiInRGgwMnS1Z/WpJZYGNh7pP7Hm1RnzVslkWSJGaKJv9jDNUCyy8R
+L+nwUSd6m6r8YWcs3zdBYsDHGOO5MgAU5Q8yuLbEgaK5NJSJgGkm+ya5oB88Y6T0
+JcL/u5xKw4kJiKgiLr3zrWe5qV6+lpH7fGKy7fucJWltDkfQSD3Dp0b64TW4FuQq
+VQhDR+KykLK6QxM2x3/maMfG578Ku1F6g4RboDR/6uCFu6hQuCoNYBk/QB0XpY13
+-----END RSA PRIVATE KEY-----
+-----BEGIN CERTIFICATE-----
+MIID6TCCAtGgAwIBAgIDAIFoMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNVBAYTAkNO
+MQswCQYDVQQIDAJHRDELMAkGA1UEBwwCR1oxDDAKBgNVBAoMA1NTVDEPMA0GA1UE
+CwwGSmVzc01BMRcwFQYDVQQDDA53d3cuamVzc21hLm9yZzEeMBwGCSqGSIb3DQEJ
+ARYPbGRjc2FhQDIxY24uY29tMB4XDTE2MDEwMTAwMDAwMFoXDTI2MDEwMTAwMDAw
+MFowcjELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQwwCgYDVQQKDANTU1QxDzAN
+BgNVBAsMBkplc3NNQTEXMBUGA1UEAwwOd3d3Lmplc3NtYS5vcmcxHjAcBgkqhkiG
+9w0BCQEWD2xkY3NhYUAyMWNuLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBALEOPuYKEl/iN3ub/QNaaqo0Hynk62znTp5kXj0zQAqxLxwHU117xHBk
+0LCZux0LnDFl9JAlilvqfeaXRWmQd6hrvV+1mNpnIe2xfyNWwa37QDNjXB7mEg3V
+O/dN9KeVxq9RlH/dQJ7qZlYy4i7wznYMUlz38378wYoOvdAQBX1UrdjWA5T4q0Da
+cRRAV0fIp45hBarp6T1nhDEvttU8yud2lIEV9jWblkyGIhU4FisGOIRRGhnKzCAh
+CYSZ59mq8Wf4FawMyz/H4noHcWWJu4ID1oAE+VFGXKm78qjp/T71/myn5lcGquTx
+oSoJrx7og+529eaJwgeJd2JF7OQ5NysCAwEAAaN7MHkwCQYDVR0TBAIwADAsBglg
+hkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0O
+BBYEFO0CmyFtrGLrkNkkA62QPzSp8vgJMB8GA1UdIwQYMBaAFPx+7pAUh/GVC8xa
+OXmmZ8GMvpyIMA0GCSqGSIb3DQEBCwUAA4IBAQBT1JGXn7HMyNHZntM4kCp7kwN9
+HSpcbQxbWFtk+l8ANP9SqCIEd4xc4rAaUDDDMdD2S0wF9iio1MA1KC5OoJ5Dqw6C
+yTa08LRowlmnw+NNZC2xzaSRmzLGlPDHNauZ/G2ScdWsqR5v2+pKF7bYxAajRkk5
+oqRRDI6X7vHsvX/kqTn9Prk0sFmU0EU64az2iUe/MG9v1WY8eOV+tTEq29GuYYjJ
+E3H8vaeq1fTB0vYgT5xoCc36xVXju/3l17CE12n5of004u4eRi3/T0wbp9WgG2ns
+wjetaYeIAWS/AJQzIK22tztGAbAk6kTgsO5YLx2h6GLGpytDXWvgzr2PdEu1
+-----END CERTIFICATE-----
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Debug/HPSocket4C-SSL_UD.dll b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Debug/HPSocket4C-SSL_UD.dll
new file mode 100644
index 000000000..90d0af161
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Debug/HPSocket4C-SSL_UD.dll differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Debug/HPSocket4C_UD.dll b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Debug/HPSocket4C_UD.dll
new file mode 100644
index 000000000..12444b20f
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Debug/HPSocket4C_UD.dll differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Debug/HPSocketCS.dll b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Debug/HPSocketCS.dll
new file mode 100644
index 000000000..72317150e
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Debug/HPSocketCS.dll differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/HPSocket4C-SSL_U.dll b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/HPSocket4C-SSL_U.dll
new file mode 100644
index 000000000..d2e1b187e
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/HPSocket4C-SSL_U.dll differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/HPSocket4C_U.dll b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/HPSocket4C_U.dll
new file mode 100644
index 000000000..bd55ff24b
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/HPSocket4C_U.dll differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/HPSocketCS.dll b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/HPSocketCS.dll
new file mode 100644
index 000000000..76adccd6c
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/HPSocketCS.dll differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/SSLClient.exe b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/SSLClient.exe
new file mode 100644
index 000000000..cb12540c2
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/SSLClient.exe differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/SSLPackClient.exe b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/SSLPackClient.exe
new file mode 100644
index 000000000..e214e2486
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/SSLPackClient.exe differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/SSLPackServer.exe b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/SSLPackServer.exe
new file mode 100644
index 000000000..c6cb7989e
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/SSLPackServer.exe differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/SSLServer.exe b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/SSLServer.exe
new file mode 100644
index 000000000..1d631aee9
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/SSLServer.exe differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/TcpClient-PFM.exe b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/TcpClient-PFM.exe
new file mode 100644
index 000000000..6c1024ef7
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/TcpClient-PFM.exe differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/TcpClient.exe b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/TcpClient.exe
new file mode 100644
index 000000000..91c504d3f
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/TcpClient.exe differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/TcpPackClient.exe b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/TcpPackClient.exe
new file mode 100644
index 000000000..3816eba17
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/TcpPackClient.exe differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/TcpPackServer.exe b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/TcpPackServer.exe
new file mode 100644
index 000000000..6a445dfd4
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/TcpPackServer.exe differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/TcpPortForwarding.exe b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/TcpPortForwarding.exe
new file mode 100644
index 000000000..894f26065
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/TcpPortForwarding.exe differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/TcpPullClient.exe b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/TcpPullClient.exe
new file mode 100644
index 000000000..7a8b3c906
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/TcpPullClient.exe differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/TcpPullServer.exe b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/TcpPullServer.exe
new file mode 100644
index 000000000..03e41b6a8
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/TcpPullServer.exe differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/TcpServer-PFM.exe b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/TcpServer-PFM.exe
new file mode 100644
index 000000000..5d4f45fbd
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/TcpServer-PFM.exe differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/TcpServer.exe b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/TcpServer.exe
new file mode 100644
index 000000000..bbb576063
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/TcpServer.exe differ
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/ssl-cert/ca.crt b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/ssl-cert/ca.crt
new file mode 100644
index 000000000..c31217076
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/ssl-cert/ca.crt
@@ -0,0 +1,23 @@
+-----BEGIN CERTIFICATE-----
+MIID0TCCArmgAwIBAgIJALFGobpzN5MdMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNV
+BAYTAkNOMQswCQYDVQQIDAJHRDELMAkGA1UEBwwCR1oxDDAKBgNVBAoMA1NTVDEP
+MA0GA1UECwwGSmVzc01BMRcwFQYDVQQDDA53d3cuamVzc21hLm9yZzEeMBwGCSqG
+SIb3DQEJARYPbGRjc2FhQDIxY24uY29tMB4XDTE2MDQwMTE1MDIwMFoXDTI0MDYx
+ODE1MDIwMFowfzELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQswCQYDVQQHDAJH
+WjEMMAoGA1UECgwDU1NUMQ8wDQYDVQQLDAZKZXNzTUExFzAVBgNVBAMMDnd3dy5q
+ZXNzbWEub3JnMR4wHAYJKoZIhvcNAQkBFg9sZGNzYWFAMjFjbi5jb20wggEiMA0G
+CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDht6llexLtFkV8ijjdJGaHXXQysWOJ
+UM/YQFYP52nviurJSpMbWSXnuaDlfidk76B66Np5mlnN5BiHqbBj34GCVKz5VQtx
+3kMY1y30YWyiHAEZiV3PLQc8/A9MnJM/q/mHaulmTuJi8A85TWadqUNXgiaIMkqz
+bKaauR1/GCxXuEVroqtyR99RCWhfakTz04KfIbt83QR0imWC6uhmvD/DXJ03XFzd
+XkK5aNp+ef1sBQgFKjeXV6EMuq+UgEDPXlCDUJAqsZt6W/ohrCAHWQYZ/RSvvaMJ
+O7aWROGAC/lh6ATOIbFlGVppw6zUGdIDkB5FVF1MC7CyDndncFrY+OJzAgMBAAGj
+UDBOMB0GA1UdDgQWBBT8fu6QFIfxlQvMWjl5pmfBjL6ciDAfBgNVHSMEGDAWgBT8
+fu6QFIfxlQvMWjl5pmfBjL6ciDAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUA
+A4IBAQDI+f6GMBJxRJNKrgbUYLD1U6LWEQJQ50g2NxGy0j+TL6oypoo/kyME3tOR
+EmXEDzytGcSaQ78xYcg97UQd8OhXYQr0qwZ/JLarmhCVK/bfbGTIn4Mk4ZgDqcOU
+46jsJeEZwUSrrq7svKO5d7+wV0VGPO+Ww4yzRCPwm2puXFY1+KpTxYX31+wwMB8p
+7GuJEDgV08qzLfcBAfSFFYiOHL3tJ+XNKFNRqigjeYrWuAMphOhpYfYnU0d0upe8
+wWx9Unm8qSkc7hiS/vvs1v7Pv1sqMFRBoaKOTqZ7Wz/5AySGPQjeMV/atmArDEkx
+z58OEgTzg1J/Keztxwj7I2KnYHyH
+-----END CERTIFICATE-----
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/ssl-cert/ca.key b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/ssl-cert/ca.key
new file mode 100644
index 000000000..e0a85b46b
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/ssl-cert/ca.key
@@ -0,0 +1,30 @@
+-----BEGIN RSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: AES-256-CBC,ABBC3A36C737CF487C5C36CA5ACA4A5D
+
+zv/FdREV9tlLsPPzIrm5EIbGaTiReEz+9jlgplyVLkAZe7MNF868t5g93Ve46ehy
+XzBf2QtBE12xAgKmjTvK7RnO1Rih5LqY7VTrEhIFSkYdDTqTV8I8cWig7Hmg+qNw
+EymXdrCYjBQB1U3jmOxBqQrDw75KYJFq5vN+vAmnreA9m9NdOAWOQ+n5K0sJLQpk
+6F9a4pzym7v4mMmP67Ddf/qHVcbWPLOo3QkBUItGJYPpBL1ODu+rd/3f9EyJspVw
+3dQNAaT0OzA0RZ9Pew7+ZxzgFFDHA4sh6r4fcfpEfXTr1QQUg0F4B66+OTE1duoE
+T+PIwYWp4yyuYgUA7txpDsGaENbvfnsP81oLMIvU0TicKJoYxr2Zxa+lK2MWCa5D
+L9VbRMQM0bXTF1qCgjnPmFhxhdYgidxPEZPahyMmFU3LB9W5ils/DK+AXW1gC4ZY
+O8hpUGaZ7Lj5H6suMSYIX7CAEi0NXXdRMXw7bOBecRFy+fhgHmMF1fGgBG2Fd1lP
+wgHlydLQDZoUpTnZrifDzlH8oDqEbCCOSUYc82fVKeNNORePHLGuV8utz0UTR9Rq
+Ko9ZYEN7j+JsPBdG3CnrjDILrZA3peKPhEifrRL2mjHdMdwFsE/fetyvUssgh9VY
+o2Bi25khVu+2TwBMEO1nlS6U+TWOU8u4qxGtSj5xN1Fdplb098VXY1T08+NvDJUN
+7S52KPAyeXY6V2/Q7IyDpsnmM9SWiLrvf2C/niEHRLfWoNP5bt6r/e8RIjFPc0KV
+E8KvANWXSArM359F4+ucvMzrYEtkgnldf6UIN007qqr2eEREeVwxVWIpJZJauVDV
+1uOvTQCDU7O4cIV/FiK1+oVt9MQYAHnnG3revFzqcZtH2x3qWNEGwiyfDZh7qx7c
+8LFYiFLIQX2HGYcEpcKAbj65sJLecz7VtNQ2GMoXHh09BQ5VnleVInmAfAv6r01k
+OdTJ3CNf8YcW/PAKTGrgmsncGp8EvHbmDC4r1ecxxp3Mu7M7T9XfQ41nk1nCLmOp
++3B9ecnJx6bSkg6wrrofl2MifCyl6AvxyKUeAt+dNV319QL/imgV3VQiD+Gu5i+c
+1tveD4cKNm01izEZz6xPBZ9sH4G8TFYFOx572q2DdSZe2MXy/h6QfKUADPOkvPyr
+0dqNbPQKJDL7YJOG39k0L/GOe6uH+JxXlvYLtqSLznLTQkm9kkWVOB54gV+v2NBp
+831BnDdlwv9AnScDY7o4fG1qAaWIZyMWntmORfpHkOMRbrBqK5TeczpoV2jr1iGl
+h1oIbbANJzaXEydnWcnUPujopP7oYG2KGhDbzhhR/PGlvLknIoAA55BqL23dzHct
+1/xaaHqxcjGNymgSPPD9Kjx0qQZovOb5WKDyg5+D5GIfRqq+c1SQeZw+5jcoMBIF
+TSdfiwAxhLkT8SQf72C6tAYsxkTubbcU1gc0Vkdd5Q2FWc6YgCb6XVPYC5jHATwV
+V4v5JVqGLRFi056heSpA0EFWp/AuSoaYaQRwGfBnUysaocDlEE4kTNzzJIwgbWrt
+iTL5qB7LIexqUVWVjmUmx6S0+f6qVYovDjFHVg61Xb6zdL04LmU0VrMCwgUBEt2j
+-----END RSA PRIVATE KEY-----
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/ssl-cert/ca.pem b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/ssl-cert/ca.pem
new file mode 100644
index 000000000..57f3b363b
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/ssl-cert/ca.pem
@@ -0,0 +1,53 @@
+-----BEGIN RSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: AES-256-CBC,ABBC3A36C737CF487C5C36CA5ACA4A5D
+
+zv/FdREV9tlLsPPzIrm5EIbGaTiReEz+9jlgplyVLkAZe7MNF868t5g93Ve46ehy
+XzBf2QtBE12xAgKmjTvK7RnO1Rih5LqY7VTrEhIFSkYdDTqTV8I8cWig7Hmg+qNw
+EymXdrCYjBQB1U3jmOxBqQrDw75KYJFq5vN+vAmnreA9m9NdOAWOQ+n5K0sJLQpk
+6F9a4pzym7v4mMmP67Ddf/qHVcbWPLOo3QkBUItGJYPpBL1ODu+rd/3f9EyJspVw
+3dQNAaT0OzA0RZ9Pew7+ZxzgFFDHA4sh6r4fcfpEfXTr1QQUg0F4B66+OTE1duoE
+T+PIwYWp4yyuYgUA7txpDsGaENbvfnsP81oLMIvU0TicKJoYxr2Zxa+lK2MWCa5D
+L9VbRMQM0bXTF1qCgjnPmFhxhdYgidxPEZPahyMmFU3LB9W5ils/DK+AXW1gC4ZY
+O8hpUGaZ7Lj5H6suMSYIX7CAEi0NXXdRMXw7bOBecRFy+fhgHmMF1fGgBG2Fd1lP
+wgHlydLQDZoUpTnZrifDzlH8oDqEbCCOSUYc82fVKeNNORePHLGuV8utz0UTR9Rq
+Ko9ZYEN7j+JsPBdG3CnrjDILrZA3peKPhEifrRL2mjHdMdwFsE/fetyvUssgh9VY
+o2Bi25khVu+2TwBMEO1nlS6U+TWOU8u4qxGtSj5xN1Fdplb098VXY1T08+NvDJUN
+7S52KPAyeXY6V2/Q7IyDpsnmM9SWiLrvf2C/niEHRLfWoNP5bt6r/e8RIjFPc0KV
+E8KvANWXSArM359F4+ucvMzrYEtkgnldf6UIN007qqr2eEREeVwxVWIpJZJauVDV
+1uOvTQCDU7O4cIV/FiK1+oVt9MQYAHnnG3revFzqcZtH2x3qWNEGwiyfDZh7qx7c
+8LFYiFLIQX2HGYcEpcKAbj65sJLecz7VtNQ2GMoXHh09BQ5VnleVInmAfAv6r01k
+OdTJ3CNf8YcW/PAKTGrgmsncGp8EvHbmDC4r1ecxxp3Mu7M7T9XfQ41nk1nCLmOp
++3B9ecnJx6bSkg6wrrofl2MifCyl6AvxyKUeAt+dNV319QL/imgV3VQiD+Gu5i+c
+1tveD4cKNm01izEZz6xPBZ9sH4G8TFYFOx572q2DdSZe2MXy/h6QfKUADPOkvPyr
+0dqNbPQKJDL7YJOG39k0L/GOe6uH+JxXlvYLtqSLznLTQkm9kkWVOB54gV+v2NBp
+831BnDdlwv9AnScDY7o4fG1qAaWIZyMWntmORfpHkOMRbrBqK5TeczpoV2jr1iGl
+h1oIbbANJzaXEydnWcnUPujopP7oYG2KGhDbzhhR/PGlvLknIoAA55BqL23dzHct
+1/xaaHqxcjGNymgSPPD9Kjx0qQZovOb5WKDyg5+D5GIfRqq+c1SQeZw+5jcoMBIF
+TSdfiwAxhLkT8SQf72C6tAYsxkTubbcU1gc0Vkdd5Q2FWc6YgCb6XVPYC5jHATwV
+V4v5JVqGLRFi056heSpA0EFWp/AuSoaYaQRwGfBnUysaocDlEE4kTNzzJIwgbWrt
+iTL5qB7LIexqUVWVjmUmx6S0+f6qVYovDjFHVg61Xb6zdL04LmU0VrMCwgUBEt2j
+-----END RSA PRIVATE KEY-----
+-----BEGIN CERTIFICATE-----
+MIID0TCCArmgAwIBAgIJALFGobpzN5MdMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNV
+BAYTAkNOMQswCQYDVQQIDAJHRDELMAkGA1UEBwwCR1oxDDAKBgNVBAoMA1NTVDEP
+MA0GA1UECwwGSmVzc01BMRcwFQYDVQQDDA53d3cuamVzc21hLm9yZzEeMBwGCSqG
+SIb3DQEJARYPbGRjc2FhQDIxY24uY29tMB4XDTE2MDQwMTE1MDIwMFoXDTI0MDYx
+ODE1MDIwMFowfzELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQswCQYDVQQHDAJH
+WjEMMAoGA1UECgwDU1NUMQ8wDQYDVQQLDAZKZXNzTUExFzAVBgNVBAMMDnd3dy5q
+ZXNzbWEub3JnMR4wHAYJKoZIhvcNAQkBFg9sZGNzYWFAMjFjbi5jb20wggEiMA0G
+CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDht6llexLtFkV8ijjdJGaHXXQysWOJ
+UM/YQFYP52nviurJSpMbWSXnuaDlfidk76B66Np5mlnN5BiHqbBj34GCVKz5VQtx
+3kMY1y30YWyiHAEZiV3PLQc8/A9MnJM/q/mHaulmTuJi8A85TWadqUNXgiaIMkqz
+bKaauR1/GCxXuEVroqtyR99RCWhfakTz04KfIbt83QR0imWC6uhmvD/DXJ03XFzd
+XkK5aNp+ef1sBQgFKjeXV6EMuq+UgEDPXlCDUJAqsZt6W/ohrCAHWQYZ/RSvvaMJ
+O7aWROGAC/lh6ATOIbFlGVppw6zUGdIDkB5FVF1MC7CyDndncFrY+OJzAgMBAAGj
+UDBOMB0GA1UdDgQWBBT8fu6QFIfxlQvMWjl5pmfBjL6ciDAfBgNVHSMEGDAWgBT8
+fu6QFIfxlQvMWjl5pmfBjL6ciDAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUA
+A4IBAQDI+f6GMBJxRJNKrgbUYLD1U6LWEQJQ50g2NxGy0j+TL6oypoo/kyME3tOR
+EmXEDzytGcSaQ78xYcg97UQd8OhXYQr0qwZ/JLarmhCVK/bfbGTIn4Mk4ZgDqcOU
+46jsJeEZwUSrrq7svKO5d7+wV0VGPO+Ww4yzRCPwm2puXFY1+KpTxYX31+wwMB8p
+7GuJEDgV08qzLfcBAfSFFYiOHL3tJ+XNKFNRqigjeYrWuAMphOhpYfYnU0d0upe8
+wWx9Unm8qSkc7hiS/vvs1v7Pv1sqMFRBoaKOTqZ7Wz/5AySGPQjeMV/atmArDEkx
+z58OEgTzg1J/Keztxwj7I2KnYHyH
+-----END CERTIFICATE-----
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/ssl-cert/client.cer b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/ssl-cert/client.cer
new file mode 100644
index 000000000..33a266a82
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/ssl-cert/client.cer
@@ -0,0 +1,23 @@
+-----BEGIN CERTIFICATE-----
+MIID6TCCAtGgAwIBAgIDAIFpMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNVBAYTAkNO
+MQswCQYDVQQIDAJHRDELMAkGA1UEBwwCR1oxDDAKBgNVBAoMA1NTVDEPMA0GA1UE
+CwwGSmVzc01BMRcwFQYDVQQDDA53d3cuamVzc21hLm9yZzEeMBwGCSqGSIb3DQEJ
+ARYPbGRjc2FhQDIxY24uY29tMB4XDTE2MDEwMTAwMDAwMFoXDTI2MDEwMTAwMDAw
+MFowcjELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQwwCgYDVQQKDANTU1QxDzAN
+BgNVBAsMBkplc3NNQTEXMBUGA1UEAwwOd3d3Lmplc3NtYS5vcmcxHjAcBgkqhkiG
+9w0BCQEWD2xkY3NhYUAyMWNuLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBAOFlDuWj95Nov+48W0ZaUp69GVB+U3orPuVm+fU5gXgl0tJbNbXS0GOM
+MspmMB0WxciTfj+t/WufpcHKzryHwrbqmMgrZiSyrp4ulA2mQuTPR32vgQ3/2eBs
+O884GmKOUbiaORgHGBoRAdOnoWarM7B/igS6WGqPetaUz12QAv2vzw9Qn0xxIBpr
+SVJumTo9HtOvuRj0BNXMRRYp+lfX2+96cftidyU1q+2Y2v3Fedzlo8Lr7m1ZkPcp
+ugQDz3R0kXvigDPAKhbTj6eAXJ/hcPOCGQ5RTIZJH4JnJ2jKw5lTjJ6y0rbt9Jq9
+NuIqz3GORHYWY4xBmbdTZy0BrbQOePECAwEAAaN7MHkwCQYDVR0TBAIwADAsBglg
+hkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0O
+BBYEFHYUdE6SbzXIWA8m3TwdgUJfAT6+MB8GA1UdIwQYMBaAFPx+7pAUh/GVC8xa
+OXmmZ8GMvpyIMA0GCSqGSIb3DQEBCwUAA4IBAQCZWaDrHbRHNNEaCVVFl5WCNqyd
+y1MpI2iErmfiCTNiG4v9wImTGWIWRHc3dZowniwSb43OuuhlpdWCxeal9nTL6iCP
+B486EMOsVWcfUZkPeK4cBgRXbHTmjxfmQEHHA6NTQdRc7LGq4tjhYs8zmxBVI2HO
+uIp0Qbj/Mb2j8r13IC91Z5Ontq0mQTIg0vvffZsqvcjs3Mmrxr2iX/EYpKNR2DP+
+9msWTZH734tZ2I7vORZOprpdAwELOyVLXkKIcP9qkRPAcFNk0Fl5peBQtBuP1ky5
+kUzWMQq2eoy73miPRnQ8ZjZ/3xTXhMKJ6bCn3tbWrjvc1TwpobfwyfsFH9sq
+-----END CERTIFICATE-----
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/ssl-cert/client.crt b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/ssl-cert/client.crt
new file mode 100644
index 000000000..a87d4f3f7
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/ssl-cert/client.crt
@@ -0,0 +1,82 @@
+Certificate:
+ Data:
+ Version: 3 (0x2)
+ Serial Number: 33129 (0x8169)
+ Signature Algorithm: sha256WithRSAEncryption
+ Issuer: C=CN, ST=GD, L=GZ, O=SST, OU=JessMA, CN=www.jessma.org/emailAddress=ldcsaa@21cn.com
+ Validity
+ Not Before: Jan 1 00:00:00 2016 GMT
+ Not After : Jan 1 00:00:00 2026 GMT
+ Subject: C=CN, ST=GD, O=SST, OU=JessMA, CN=www.jessma.org/emailAddress=ldcsaa@21cn.com
+ Subject Public Key Info:
+ Public Key Algorithm: rsaEncryption
+ Public-Key: (2048 bit)
+ Modulus:
+ 00:e1:65:0e:e5:a3:f7:93:68:bf:ee:3c:5b:46:5a:
+ 52:9e:bd:19:50:7e:53:7a:2b:3e:e5:66:f9:f5:39:
+ 81:78:25:d2:d2:5b:35:b5:d2:d0:63:8c:32:ca:66:
+ 30:1d:16:c5:c8:93:7e:3f:ad:fd:6b:9f:a5:c1:ca:
+ ce:bc:87:c2:b6:ea:98:c8:2b:66:24:b2:ae:9e:2e:
+ 94:0d:a6:42:e4:cf:47:7d:af:81:0d:ff:d9:e0:6c:
+ 3b:cf:38:1a:62:8e:51:b8:9a:39:18:07:18:1a:11:
+ 01:d3:a7:a1:66:ab:33:b0:7f:8a:04:ba:58:6a:8f:
+ 7a:d6:94:cf:5d:90:02:fd:af:cf:0f:50:9f:4c:71:
+ 20:1a:6b:49:52:6e:99:3a:3d:1e:d3:af:b9:18:f4:
+ 04:d5:cc:45:16:29:fa:57:d7:db:ef:7a:71:fb:62:
+ 77:25:35:ab:ed:98:da:fd:c5:79:dc:e5:a3:c2:eb:
+ ee:6d:59:90:f7:29:ba:04:03:cf:74:74:91:7b:e2:
+ 80:33:c0:2a:16:d3:8f:a7:80:5c:9f:e1:70:f3:82:
+ 19:0e:51:4c:86:49:1f:82:67:27:68:ca:c3:99:53:
+ 8c:9e:b2:d2:b6:ed:f4:9a:bd:36:e2:2a:cf:71:8e:
+ 44:76:16:63:8c:41:99:b7:53:67:2d:01:ad:b4:0e:
+ 78:f1
+ Exponent: 65537 (0x10001)
+ X509v3 extensions:
+ X509v3 Basic Constraints:
+ CA:FALSE
+ Netscape Comment:
+ OpenSSL Generated Certificate
+ X509v3 Subject Key Identifier:
+ 76:14:74:4E:92:6F:35:C8:58:0F:26:DD:3C:1D:81:42:5F:01:3E:BE
+ X509v3 Authority Key Identifier:
+ keyid:FC:7E:EE:90:14:87:F1:95:0B:CC:5A:39:79:A6:67:C1:8C:BE:9C:88
+
+ Signature Algorithm: sha256WithRSAEncryption
+ 99:59:a0:eb:1d:b4:47:34:d1:1a:09:55:45:97:95:82:36:ac:
+ 9d:cb:53:29:23:68:84:ae:67:e2:09:33:62:1b:8b:fd:c0:89:
+ 93:19:62:16:44:77:37:75:9a:30:9e:2c:12:6f:8d:ce:ba:e8:
+ 65:a5:d5:82:c5:e6:a5:f6:74:cb:ea:20:8f:07:8f:3a:10:c3:
+ ac:55:67:1f:51:99:0f:78:ae:1c:06:04:57:6c:74:e6:8f:17:
+ e6:40:41:c7:03:a3:53:41:d4:5c:ec:b1:aa:e2:d8:e1:62:cf:
+ 33:9b:10:55:23:61:ce:b8:8a:74:41:b8:ff:31:bd:a3:f2:bd:
+ 77:20:2f:75:67:93:a7:b6:ad:26:41:32:20:d2:fb:df:7d:9b:
+ 2a:bd:c8:ec:dc:c9:ab:c6:bd:a2:5f:f1:18:a4:a3:51:d8:33:
+ fe:f6:6b:16:4d:91:fb:df:8b:59:d8:8e:ef:39:16:4e:a6:ba:
+ 5d:03:01:0b:3b:25:4b:5e:42:88:70:ff:6a:91:13:c0:70:53:
+ 64:d0:59:79:a5:e0:50:b4:1b:8f:d6:4c:b9:91:4c:d6:31:0a:
+ b6:7a:8c:bb:de:68:8f:46:74:3c:66:36:7f:df:14:d7:84:c2:
+ 89:e9:b0:a7:de:d6:d6:ae:3b:dc:d5:3c:29:a1:b7:f0:c9:fb:
+ 05:1f:db:2a
+-----BEGIN CERTIFICATE-----
+MIID6TCCAtGgAwIBAgIDAIFpMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNVBAYTAkNO
+MQswCQYDVQQIDAJHRDELMAkGA1UEBwwCR1oxDDAKBgNVBAoMA1NTVDEPMA0GA1UE
+CwwGSmVzc01BMRcwFQYDVQQDDA53d3cuamVzc21hLm9yZzEeMBwGCSqGSIb3DQEJ
+ARYPbGRjc2FhQDIxY24uY29tMB4XDTE2MDEwMTAwMDAwMFoXDTI2MDEwMTAwMDAw
+MFowcjELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQwwCgYDVQQKDANTU1QxDzAN
+BgNVBAsMBkplc3NNQTEXMBUGA1UEAwwOd3d3Lmplc3NtYS5vcmcxHjAcBgkqhkiG
+9w0BCQEWD2xkY3NhYUAyMWNuLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBAOFlDuWj95Nov+48W0ZaUp69GVB+U3orPuVm+fU5gXgl0tJbNbXS0GOM
+MspmMB0WxciTfj+t/WufpcHKzryHwrbqmMgrZiSyrp4ulA2mQuTPR32vgQ3/2eBs
+O884GmKOUbiaORgHGBoRAdOnoWarM7B/igS6WGqPetaUz12QAv2vzw9Qn0xxIBpr
+SVJumTo9HtOvuRj0BNXMRRYp+lfX2+96cftidyU1q+2Y2v3Fedzlo8Lr7m1ZkPcp
+ugQDz3R0kXvigDPAKhbTj6eAXJ/hcPOCGQ5RTIZJH4JnJ2jKw5lTjJ6y0rbt9Jq9
+NuIqz3GORHYWY4xBmbdTZy0BrbQOePECAwEAAaN7MHkwCQYDVR0TBAIwADAsBglg
+hkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0O
+BBYEFHYUdE6SbzXIWA8m3TwdgUJfAT6+MB8GA1UdIwQYMBaAFPx+7pAUh/GVC8xa
+OXmmZ8GMvpyIMA0GCSqGSIb3DQEBCwUAA4IBAQCZWaDrHbRHNNEaCVVFl5WCNqyd
+y1MpI2iErmfiCTNiG4v9wImTGWIWRHc3dZowniwSb43OuuhlpdWCxeal9nTL6iCP
+B486EMOsVWcfUZkPeK4cBgRXbHTmjxfmQEHHA6NTQdRc7LGq4tjhYs8zmxBVI2HO
+uIp0Qbj/Mb2j8r13IC91Z5Ontq0mQTIg0vvffZsqvcjs3Mmrxr2iX/EYpKNR2DP+
+9msWTZH734tZ2I7vORZOprpdAwELOyVLXkKIcP9qkRPAcFNk0Fl5peBQtBuP1ky5
+kUzWMQq2eoy73miPRnQ8ZjZ/3xTXhMKJ6bCn3tbWrjvc1TwpobfwyfsFH9sq
+-----END CERTIFICATE-----
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/ssl-cert/client.csr b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/ssl-cert/client.csr
new file mode 100644
index 000000000..d35803d5b
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/ssl-cert/client.csr
@@ -0,0 +1,18 @@
+-----BEGIN CERTIFICATE REQUEST-----
+MIIC8TCCAdkCAQAwfzELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQswCQYDVQQH
+DAJHWjEMMAoGA1UECgwDU1NUMQ8wDQYDVQQLDAZKZXNzTUExFzAVBgNVBAMMDnd3
+dy5qZXNzbWEub3JnMR4wHAYJKoZIhvcNAQkBFg9sZGNzYWFAMjFjbi5jb20wggEi
+MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDhZQ7lo/eTaL/uPFtGWlKevRlQ
+flN6Kz7lZvn1OYF4JdLSWzW10tBjjDLKZjAdFsXIk34/rf1rn6XBys68h8K26pjI
+K2Yksq6eLpQNpkLkz0d9r4EN/9ngbDvPOBpijlG4mjkYBxgaEQHTp6FmqzOwf4oE
+ulhqj3rWlM9dkAL9r88PUJ9McSAaa0lSbpk6PR7Tr7kY9ATVzEUWKfpX19vvenH7
+YnclNavtmNr9xXnc5aPC6+5tWZD3KboEA890dJF74oAzwCoW04+ngFyf4XDzghkO
+UUyGSR+CZydoysOZU4yestK27fSavTbiKs9xjkR2FmOMQZm3U2ctAa20DnjxAgMB
+AAGgLTASBgkqhkiG9w0BCQIxBQwDU1NUMBcGCSqGSIb3DQEJBzEKDAhwcG1tQHNz
+dDANBgkqhkiG9w0BAQsFAAOCAQEAtHiWz0XuqZi/2aoinH472W/sqG7S7YizbcQC
+kCRgYqQw32U0ujI2ndTt2WYDgFUlI1KY5N4b5pl2pdDepFWXLcLyG3nyCjXlJng5
+8YLENg02+xsLOZUjZEsY5pxEkrKYBBjt537P+fA83jtxakC+9xvTEC94CxICWMvx
+OVw1mWjUE3a7Hby7ChkOX/PhJdNzHdsMU9fKCWEFFmyJgrNkFc1nB1omt0j+OkXA
+scwFqhji7yJuwxboaDLdnTNIGGBbDLcw44s7udWB4QayvHwuNgcZ8shxlm686Xi5
+K+SXJTi0DPFKcucU2LA+VCLnMtefghCxbrU7fcFyPsJuT+jdsg==
+-----END CERTIFICATE REQUEST-----
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/ssl-cert/client.key b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/ssl-cert/client.key
new file mode 100644
index 000000000..a9f3dd0ca
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/ssl-cert/client.key
@@ -0,0 +1,30 @@
+-----BEGIN RSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: AES-256-CBC,5F6ACADA6B6B1238FD34A0EC0C5EC2ED
+
+F0JylDtptlBaFpbCP9Qa2pRf5z8sBbUta6G+rBwuWn7GxU//Nub49/Mf0uRm3YTN
+PmCbIQKRyn/u92Yk6cJ9vLCiWe89pa+qlv+kF9PWmYo8Lt6dvtSr1TNAjelGvQjC
+HAi58BHoXXIRrZJQKjzFKGcwhWExCAOct5UDuHu64IvWg+LDccd+tTU/kdKEI9QY
+3POohP6etBBsFIoJFd23yxxNrvxK/v0as7EI/SeFzv7Mfn7haL4LxEsN+9XPN/Ap
+U0IxOT84dMgtIsvW2gvit+qNuaSvrocyEOr5uEfpoS58/yyb0VyNg94itkc6IK3X
+Yeokm2YOJk/4yMoZAeNMMDdR82csCzpTTHurMIZLgtr+SO1ChtreKm0XQB8QNyJ+
+CouAAHOBsxTPgVY/QS1TDrmEZv7cHOAvJp7BYvKroD/pi5Wu2IHAlIEXhdW3Evwn
+jyzUgMUHdXJIcngkkopYEoTPVEXsYX6aHvPJI+jDDKIfDM75SOOw1z7Divsb77I8
+n1jMYDUH4i2g2BixfwFRPxZ6NnRLtqM+TD4yecu3zsqvs0UIlrZFuVIl98Guqa1H
+tJKCxWEaJNb5YZg8GgdZFXYWXUN/HtFqWJelhGcjy48RjOy7LHJ30fkXV07b2s6M
+XcXj9g4jRRyAiZ/kmTqs+Oj6hn+iI4vdGumc2sG0+ZkUwDkj3zfn1N1+J/htVM1z
+Y2kHpKGZzQZ4eriy6CM++FrZ9CSNIPqh5AzayPuMxvEtd27vBnO8nKMwThbhGPtj
+fd7uPPzfG/W7Zo55lYL5opEzvOdULWm8+31ojitN7GSjsFW46HWoyYfTOlTAzP5+
+yPlUGxUyBhlqeXnQNTiLtRb22I2FF41HYH7GsYcxonHw3rKCcJedzL5BMg6Ic2xN
+ZxwXdj20rkugtcSAPxp3OGrmBiCX0wYiZaSgNg5zqI1SIhiWzkq64xoiIFlmxGEo
+Q/Vv7mpRmf1X0eTjiTYz4tYU6TPgtAqLLpmVNbozPnb5eGaMDbRlJnGJjqlXzPAw
+7qUhsb/KZ/k7yZLE+rseicwtAYA0th9A2tpc0CY3/EiL0w5E3zR0SPMinCJeO0rJ
+91njgDPxJ5lPXC04Dlgt/a1WK6D/yQ2kpIiNBUIlGZtr+nD9GqPYiGTqND53TL5f
+PJrr1PibL2l3fyhNDgNhgmY1CGpB6hNkqPOpit+XhGq6X0PlELcj7zYN3acW47jp
+KVm2lT1AXhzqemTWqPQL1+3s8ix0nGVNlmzsOFHqCkmr7FZb76hD5YTtGkOU/Kn3
+I5GqS5GHSCAVJnJWuFk2Y8qqg69mJREcoKThoYsuo8hw9JqZM34JIqqT029Nj35B
+xau4hSXkmHuUCGpwbr0yvsz3ikRfM6y0cT3T6oBiWgfYktpX//89YbyYGcQX7tK0
+aaHW2zvAfMyCWT0CxRen5GAyVeb+WFBdo+xD0HpQcRFtByiNNXmm4kJAoZujeHpe
+ZWcu3xkVcTqWMixAYHcDv3L0EXUnVeWplovRh1+OSm7YvdaLL3cctHoW3a8Kzdc1
+rtoGVI+f4xSEDheB5P4NX6UYbDLIGMPPuR0F5EliL+vmyJcEMuLY8KTPJ0uwf7Ns
+-----END RSA PRIVATE KEY-----
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/ssl-cert/client.pem b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/ssl-cert/client.pem
new file mode 100644
index 000000000..600dc8514
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/ssl-cert/client.pem
@@ -0,0 +1,53 @@
+-----BEGIN RSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: AES-256-CBC,5F6ACADA6B6B1238FD34A0EC0C5EC2ED
+
+F0JylDtptlBaFpbCP9Qa2pRf5z8sBbUta6G+rBwuWn7GxU//Nub49/Mf0uRm3YTN
+PmCbIQKRyn/u92Yk6cJ9vLCiWe89pa+qlv+kF9PWmYo8Lt6dvtSr1TNAjelGvQjC
+HAi58BHoXXIRrZJQKjzFKGcwhWExCAOct5UDuHu64IvWg+LDccd+tTU/kdKEI9QY
+3POohP6etBBsFIoJFd23yxxNrvxK/v0as7EI/SeFzv7Mfn7haL4LxEsN+9XPN/Ap
+U0IxOT84dMgtIsvW2gvit+qNuaSvrocyEOr5uEfpoS58/yyb0VyNg94itkc6IK3X
+Yeokm2YOJk/4yMoZAeNMMDdR82csCzpTTHurMIZLgtr+SO1ChtreKm0XQB8QNyJ+
+CouAAHOBsxTPgVY/QS1TDrmEZv7cHOAvJp7BYvKroD/pi5Wu2IHAlIEXhdW3Evwn
+jyzUgMUHdXJIcngkkopYEoTPVEXsYX6aHvPJI+jDDKIfDM75SOOw1z7Divsb77I8
+n1jMYDUH4i2g2BixfwFRPxZ6NnRLtqM+TD4yecu3zsqvs0UIlrZFuVIl98Guqa1H
+tJKCxWEaJNb5YZg8GgdZFXYWXUN/HtFqWJelhGcjy48RjOy7LHJ30fkXV07b2s6M
+XcXj9g4jRRyAiZ/kmTqs+Oj6hn+iI4vdGumc2sG0+ZkUwDkj3zfn1N1+J/htVM1z
+Y2kHpKGZzQZ4eriy6CM++FrZ9CSNIPqh5AzayPuMxvEtd27vBnO8nKMwThbhGPtj
+fd7uPPzfG/W7Zo55lYL5opEzvOdULWm8+31ojitN7GSjsFW46HWoyYfTOlTAzP5+
+yPlUGxUyBhlqeXnQNTiLtRb22I2FF41HYH7GsYcxonHw3rKCcJedzL5BMg6Ic2xN
+ZxwXdj20rkugtcSAPxp3OGrmBiCX0wYiZaSgNg5zqI1SIhiWzkq64xoiIFlmxGEo
+Q/Vv7mpRmf1X0eTjiTYz4tYU6TPgtAqLLpmVNbozPnb5eGaMDbRlJnGJjqlXzPAw
+7qUhsb/KZ/k7yZLE+rseicwtAYA0th9A2tpc0CY3/EiL0w5E3zR0SPMinCJeO0rJ
+91njgDPxJ5lPXC04Dlgt/a1WK6D/yQ2kpIiNBUIlGZtr+nD9GqPYiGTqND53TL5f
+PJrr1PibL2l3fyhNDgNhgmY1CGpB6hNkqPOpit+XhGq6X0PlELcj7zYN3acW47jp
+KVm2lT1AXhzqemTWqPQL1+3s8ix0nGVNlmzsOFHqCkmr7FZb76hD5YTtGkOU/Kn3
+I5GqS5GHSCAVJnJWuFk2Y8qqg69mJREcoKThoYsuo8hw9JqZM34JIqqT029Nj35B
+xau4hSXkmHuUCGpwbr0yvsz3ikRfM6y0cT3T6oBiWgfYktpX//89YbyYGcQX7tK0
+aaHW2zvAfMyCWT0CxRen5GAyVeb+WFBdo+xD0HpQcRFtByiNNXmm4kJAoZujeHpe
+ZWcu3xkVcTqWMixAYHcDv3L0EXUnVeWplovRh1+OSm7YvdaLL3cctHoW3a8Kzdc1
+rtoGVI+f4xSEDheB5P4NX6UYbDLIGMPPuR0F5EliL+vmyJcEMuLY8KTPJ0uwf7Ns
+-----END RSA PRIVATE KEY-----
+-----BEGIN CERTIFICATE-----
+MIID6TCCAtGgAwIBAgIDAIFpMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNVBAYTAkNO
+MQswCQYDVQQIDAJHRDELMAkGA1UEBwwCR1oxDDAKBgNVBAoMA1NTVDEPMA0GA1UE
+CwwGSmVzc01BMRcwFQYDVQQDDA53d3cuamVzc21hLm9yZzEeMBwGCSqGSIb3DQEJ
+ARYPbGRjc2FhQDIxY24uY29tMB4XDTE2MDEwMTAwMDAwMFoXDTI2MDEwMTAwMDAw
+MFowcjELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQwwCgYDVQQKDANTU1QxDzAN
+BgNVBAsMBkplc3NNQTEXMBUGA1UEAwwOd3d3Lmplc3NtYS5vcmcxHjAcBgkqhkiG
+9w0BCQEWD2xkY3NhYUAyMWNuLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBAOFlDuWj95Nov+48W0ZaUp69GVB+U3orPuVm+fU5gXgl0tJbNbXS0GOM
+MspmMB0WxciTfj+t/WufpcHKzryHwrbqmMgrZiSyrp4ulA2mQuTPR32vgQ3/2eBs
+O884GmKOUbiaORgHGBoRAdOnoWarM7B/igS6WGqPetaUz12QAv2vzw9Qn0xxIBpr
+SVJumTo9HtOvuRj0BNXMRRYp+lfX2+96cftidyU1q+2Y2v3Fedzlo8Lr7m1ZkPcp
+ugQDz3R0kXvigDPAKhbTj6eAXJ/hcPOCGQ5RTIZJH4JnJ2jKw5lTjJ6y0rbt9Jq9
+NuIqz3GORHYWY4xBmbdTZy0BrbQOePECAwEAAaN7MHkwCQYDVR0TBAIwADAsBglg
+hkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0O
+BBYEFHYUdE6SbzXIWA8m3TwdgUJfAT6+MB8GA1UdIwQYMBaAFPx+7pAUh/GVC8xa
+OXmmZ8GMvpyIMA0GCSqGSIb3DQEBCwUAA4IBAQCZWaDrHbRHNNEaCVVFl5WCNqyd
+y1MpI2iErmfiCTNiG4v9wImTGWIWRHc3dZowniwSb43OuuhlpdWCxeal9nTL6iCP
+B486EMOsVWcfUZkPeK4cBgRXbHTmjxfmQEHHA6NTQdRc7LGq4tjhYs8zmxBVI2HO
+uIp0Qbj/Mb2j8r13IC91Z5Ontq0mQTIg0vvffZsqvcjs3Mmrxr2iX/EYpKNR2DP+
+9msWTZH734tZ2I7vORZOprpdAwELOyVLXkKIcP9qkRPAcFNk0Fl5peBQtBuP1ky5
+kUzWMQq2eoy73miPRnQ8ZjZ/3xTXhMKJ6bCn3tbWrjvc1TwpobfwyfsFH9sq
+-----END CERTIFICATE-----
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/ssl-cert/server.cer b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/ssl-cert/server.cer
new file mode 100644
index 000000000..0f8fe3b83
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/ssl-cert/server.cer
@@ -0,0 +1,23 @@
+-----BEGIN CERTIFICATE-----
+MIID6TCCAtGgAwIBAgIDAIFoMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNVBAYTAkNO
+MQswCQYDVQQIDAJHRDELMAkGA1UEBwwCR1oxDDAKBgNVBAoMA1NTVDEPMA0GA1UE
+CwwGSmVzc01BMRcwFQYDVQQDDA53d3cuamVzc21hLm9yZzEeMBwGCSqGSIb3DQEJ
+ARYPbGRjc2FhQDIxY24uY29tMB4XDTE2MDEwMTAwMDAwMFoXDTI2MDEwMTAwMDAw
+MFowcjELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQwwCgYDVQQKDANTU1QxDzAN
+BgNVBAsMBkplc3NNQTEXMBUGA1UEAwwOd3d3Lmplc3NtYS5vcmcxHjAcBgkqhkiG
+9w0BCQEWD2xkY3NhYUAyMWNuLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBALEOPuYKEl/iN3ub/QNaaqo0Hynk62znTp5kXj0zQAqxLxwHU117xHBk
+0LCZux0LnDFl9JAlilvqfeaXRWmQd6hrvV+1mNpnIe2xfyNWwa37QDNjXB7mEg3V
+O/dN9KeVxq9RlH/dQJ7qZlYy4i7wznYMUlz38378wYoOvdAQBX1UrdjWA5T4q0Da
+cRRAV0fIp45hBarp6T1nhDEvttU8yud2lIEV9jWblkyGIhU4FisGOIRRGhnKzCAh
+CYSZ59mq8Wf4FawMyz/H4noHcWWJu4ID1oAE+VFGXKm78qjp/T71/myn5lcGquTx
+oSoJrx7og+529eaJwgeJd2JF7OQ5NysCAwEAAaN7MHkwCQYDVR0TBAIwADAsBglg
+hkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0O
+BBYEFO0CmyFtrGLrkNkkA62QPzSp8vgJMB8GA1UdIwQYMBaAFPx+7pAUh/GVC8xa
+OXmmZ8GMvpyIMA0GCSqGSIb3DQEBCwUAA4IBAQBT1JGXn7HMyNHZntM4kCp7kwN9
+HSpcbQxbWFtk+l8ANP9SqCIEd4xc4rAaUDDDMdD2S0wF9iio1MA1KC5OoJ5Dqw6C
+yTa08LRowlmnw+NNZC2xzaSRmzLGlPDHNauZ/G2ScdWsqR5v2+pKF7bYxAajRkk5
+oqRRDI6X7vHsvX/kqTn9Prk0sFmU0EU64az2iUe/MG9v1WY8eOV+tTEq29GuYYjJ
+E3H8vaeq1fTB0vYgT5xoCc36xVXju/3l17CE12n5of004u4eRi3/T0wbp9WgG2ns
+wjetaYeIAWS/AJQzIK22tztGAbAk6kTgsO5YLx2h6GLGpytDXWvgzr2PdEu1
+-----END CERTIFICATE-----
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/ssl-cert/server.crt b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/ssl-cert/server.crt
new file mode 100644
index 000000000..a6213ed40
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/ssl-cert/server.crt
@@ -0,0 +1,82 @@
+Certificate:
+ Data:
+ Version: 3 (0x2)
+ Serial Number: 33128 (0x8168)
+ Signature Algorithm: sha256WithRSAEncryption
+ Issuer: C=CN, ST=GD, L=GZ, O=SST, OU=JessMA, CN=www.jessma.org/emailAddress=ldcsaa@21cn.com
+ Validity
+ Not Before: Jan 1 00:00:00 2016 GMT
+ Not After : Jan 1 00:00:00 2026 GMT
+ Subject: C=CN, ST=GD, O=SST, OU=JessMA, CN=www.jessma.org/emailAddress=ldcsaa@21cn.com
+ Subject Public Key Info:
+ Public Key Algorithm: rsaEncryption
+ Public-Key: (2048 bit)
+ Modulus:
+ 00:b1:0e:3e:e6:0a:12:5f:e2:37:7b:9b:fd:03:5a:
+ 6a:aa:34:1f:29:e4:eb:6c:e7:4e:9e:64:5e:3d:33:
+ 40:0a:b1:2f:1c:07:53:5d:7b:c4:70:64:d0:b0:99:
+ bb:1d:0b:9c:31:65:f4:90:25:8a:5b:ea:7d:e6:97:
+ 45:69:90:77:a8:6b:bd:5f:b5:98:da:67:21:ed:b1:
+ 7f:23:56:c1:ad:fb:40:33:63:5c:1e:e6:12:0d:d5:
+ 3b:f7:4d:f4:a7:95:c6:af:51:94:7f:dd:40:9e:ea:
+ 66:56:32:e2:2e:f0:ce:76:0c:52:5c:f7:f3:7e:fc:
+ c1:8a:0e:bd:d0:10:05:7d:54:ad:d8:d6:03:94:f8:
+ ab:40:da:71:14:40:57:47:c8:a7:8e:61:05:aa:e9:
+ e9:3d:67:84:31:2f:b6:d5:3c:ca:e7:76:94:81:15:
+ f6:35:9b:96:4c:86:22:15:38:16:2b:06:38:84:51:
+ 1a:19:ca:cc:20:21:09:84:99:e7:d9:aa:f1:67:f8:
+ 15:ac:0c:cb:3f:c7:e2:7a:07:71:65:89:bb:82:03:
+ d6:80:04:f9:51:46:5c:a9:bb:f2:a8:e9:fd:3e:f5:
+ fe:6c:a7:e6:57:06:aa:e4:f1:a1:2a:09:af:1e:e8:
+ 83:ee:76:f5:e6:89:c2:07:89:77:62:45:ec:e4:39:
+ 37:2b
+ Exponent: 65537 (0x10001)
+ X509v3 extensions:
+ X509v3 Basic Constraints:
+ CA:FALSE
+ Netscape Comment:
+ OpenSSL Generated Certificate
+ X509v3 Subject Key Identifier:
+ ED:02:9B:21:6D:AC:62:EB:90:D9:24:03:AD:90:3F:34:A9:F2:F8:09
+ X509v3 Authority Key Identifier:
+ keyid:FC:7E:EE:90:14:87:F1:95:0B:CC:5A:39:79:A6:67:C1:8C:BE:9C:88
+
+ Signature Algorithm: sha256WithRSAEncryption
+ 53:d4:91:97:9f:b1:cc:c8:d1:d9:9e:d3:38:90:2a:7b:93:03:
+ 7d:1d:2a:5c:6d:0c:5b:58:5b:64:fa:5f:00:34:ff:52:a8:22:
+ 04:77:8c:5c:e2:b0:1a:50:30:c3:31:d0:f6:4b:4c:05:f6:28:
+ a8:d4:c0:35:28:2e:4e:a0:9e:43:ab:0e:82:c9:36:b4:f0:b4:
+ 68:c2:59:a7:c3:e3:4d:64:2d:b1:cd:a4:91:9b:32:c6:94:f0:
+ c7:35:ab:99:fc:6d:92:71:d5:ac:a9:1e:6f:db:ea:4a:17:b6:
+ d8:c4:06:a3:46:49:39:a2:a4:51:0c:8e:97:ee:f1:ec:bd:7f:
+ e4:a9:39:fd:3e:b9:34:b0:59:94:d0:45:3a:e1:ac:f6:89:47:
+ bf:30:6f:6f:d5:66:3c:78:e5:7e:b5:31:2a:db:d1:ae:61:88:
+ c9:13:71:fc:bd:a7:aa:d5:f4:c1:d2:f6:20:4f:9c:68:09:cd:
+ fa:c5:55:e3:bb:fd:e5:d7:b0:84:d7:69:f9:a1:fd:34:e2:ee:
+ 1e:46:2d:ff:4f:4c:1b:a7:d5:a0:1b:69:ec:c2:37:ad:69:87:
+ 88:01:64:bf:00:94:33:20:ad:b6:b7:3b:46:01:b0:24:ea:44:
+ e0:b0:ee:58:2f:1d:a1:e8:62:c6:a7:2b:43:5d:6b:e0:ce:bd:
+ 8f:74:4b:b5
+-----BEGIN CERTIFICATE-----
+MIID6TCCAtGgAwIBAgIDAIFoMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNVBAYTAkNO
+MQswCQYDVQQIDAJHRDELMAkGA1UEBwwCR1oxDDAKBgNVBAoMA1NTVDEPMA0GA1UE
+CwwGSmVzc01BMRcwFQYDVQQDDA53d3cuamVzc21hLm9yZzEeMBwGCSqGSIb3DQEJ
+ARYPbGRjc2FhQDIxY24uY29tMB4XDTE2MDEwMTAwMDAwMFoXDTI2MDEwMTAwMDAw
+MFowcjELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQwwCgYDVQQKDANTU1QxDzAN
+BgNVBAsMBkplc3NNQTEXMBUGA1UEAwwOd3d3Lmplc3NtYS5vcmcxHjAcBgkqhkiG
+9w0BCQEWD2xkY3NhYUAyMWNuLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBALEOPuYKEl/iN3ub/QNaaqo0Hynk62znTp5kXj0zQAqxLxwHU117xHBk
+0LCZux0LnDFl9JAlilvqfeaXRWmQd6hrvV+1mNpnIe2xfyNWwa37QDNjXB7mEg3V
+O/dN9KeVxq9RlH/dQJ7qZlYy4i7wznYMUlz38378wYoOvdAQBX1UrdjWA5T4q0Da
+cRRAV0fIp45hBarp6T1nhDEvttU8yud2lIEV9jWblkyGIhU4FisGOIRRGhnKzCAh
+CYSZ59mq8Wf4FawMyz/H4noHcWWJu4ID1oAE+VFGXKm78qjp/T71/myn5lcGquTx
+oSoJrx7og+529eaJwgeJd2JF7OQ5NysCAwEAAaN7MHkwCQYDVR0TBAIwADAsBglg
+hkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0O
+BBYEFO0CmyFtrGLrkNkkA62QPzSp8vgJMB8GA1UdIwQYMBaAFPx+7pAUh/GVC8xa
+OXmmZ8GMvpyIMA0GCSqGSIb3DQEBCwUAA4IBAQBT1JGXn7HMyNHZntM4kCp7kwN9
+HSpcbQxbWFtk+l8ANP9SqCIEd4xc4rAaUDDDMdD2S0wF9iio1MA1KC5OoJ5Dqw6C
+yTa08LRowlmnw+NNZC2xzaSRmzLGlPDHNauZ/G2ScdWsqR5v2+pKF7bYxAajRkk5
+oqRRDI6X7vHsvX/kqTn9Prk0sFmU0EU64az2iUe/MG9v1WY8eOV+tTEq29GuYYjJ
+E3H8vaeq1fTB0vYgT5xoCc36xVXju/3l17CE12n5of004u4eRi3/T0wbp9WgG2ns
+wjetaYeIAWS/AJQzIK22tztGAbAk6kTgsO5YLx2h6GLGpytDXWvgzr2PdEu1
+-----END CERTIFICATE-----
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/ssl-cert/server.csr b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/ssl-cert/server.csr
new file mode 100644
index 000000000..0306648a3
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/ssl-cert/server.csr
@@ -0,0 +1,18 @@
+-----BEGIN CERTIFICATE REQUEST-----
+MIIC8TCCAdkCAQAwfzELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQswCQYDVQQH
+DAJHWjEMMAoGA1UECgwDU1NUMQ8wDQYDVQQLDAZKZXNzTUExFzAVBgNVBAMMDnd3
+dy5qZXNzbWEub3JnMR4wHAYJKoZIhvcNAQkBFg9sZGNzYWFAMjFjbi5jb20wggEi
+MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCxDj7mChJf4jd7m/0DWmqqNB8p
+5Ots506eZF49M0AKsS8cB1Nde8RwZNCwmbsdC5wxZfSQJYpb6n3ml0VpkHeoa71f
+tZjaZyHtsX8jVsGt+0AzY1we5hIN1Tv3TfSnlcavUZR/3UCe6mZWMuIu8M52DFJc
+9/N+/MGKDr3QEAV9VK3Y1gOU+KtA2nEUQFdHyKeOYQWq6ek9Z4QxL7bVPMrndpSB
+FfY1m5ZMhiIVOBYrBjiEURoZyswgIQmEmefZqvFn+BWsDMs/x+J6B3FlibuCA9aA
+BPlRRlypu/Ko6f0+9f5sp+ZXBqrk8aEqCa8e6IPudvXmicIHiXdiRezkOTcrAgMB
+AAGgLTASBgkqhkiG9w0BCQIxBQwDU1NUMBcGCSqGSIb3DQEJBzEKDAhwcG1tQHNz
+dDANBgkqhkiG9w0BAQsFAAOCAQEAk9/S/9YUKjayh62Tagnk3hcJ5+YKJLHRtvv0
+Qu2HyPzpvyxORjQpnHaf+vpUj1W1amVQl7NSlNV181VzITtrySJyOdjvxTOvmITY
+stgCOXQiZeR6I9s2cZsh0yDcpiytlwnjWrFTgtIQ1dZgBRAvvJQIqoyrpgb22fva
+S3jilbFASColhEBeO0S8matO50qYwil7BabgQoUiu4QT6MhCXsJpNwi1qDD2rC/o
+Kffj63s4dRyJgqdbiYXMTDSfZvbx7UfnNCATBlniaoOTqbut1vmRGDYE+mkxly5X
+3KgcLvgpBoq0uUXNwsTNWo6CNthD8kY0fAkz34LG2aTKGy8Now==
+-----END CERTIFICATE REQUEST-----
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/ssl-cert/server.key b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/ssl-cert/server.key
new file mode 100644
index 000000000..2f36a1915
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/ssl-cert/server.key
@@ -0,0 +1,30 @@
+-----BEGIN RSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: AES-256-CBC,107800C9B21513D8F642A394FAD9047E
+
+bmaTCBYAzKzpUrdaT6sb/dbH5o3JbFu2d8s1NfKhghYUG/RWgzx5H8QWSsh1Ll+8
+701HwSwauwbKaBWzWP5bj4mjw9hXcva8l1QWeuW+Q0GsE7uWNZGFQZbCxER/9jOu
+36KMlx0twcIEGs9PNwnY7d9oS/BMVpiUqhL8sPihMLCFK0fm6VGjMrfdIZJuZXEv
+BKt+c0UPkkPmivZjSm6iTPKI6VpGeyg0sM/uZr+mRj7IOAD6vsSQnCfUOq00Rm14
+ABrer8dCWJDKrx1iLq7tFojII+JcB7oBy+8KC/t0MlqmIP2jx93/MVW5lbZ3mj2v
+BanVQvklHTLe/WHjoaltqBEKN0sIzfyed6qWudKHUa8yjAr0PS4rsTbO0S4fFz+A
+KFWEs8fuXsanFHt5akWDTMiw1n4HaiioT4jjhWRRIKGEndztyGMklShYAdSTqsZO
+vzPO+xqLlg6wOgCGZ3Kl/c243XyLMCI+lJlzu3ccqzQJbNfPADXUcxSTqaEByWG3
+YIXttKY5WFBcNjf9B3c1qfJMt3nGY2QewnL+rNm/qpose/AsFS+2aqMeRw7fYh3R
+O+H+G+0gxrSK0E3WiewMIvUqFI6W300MWx6O7d87OkbfwMLpLPumsfLKswOKaAIF
+p0RxSABSe5ixqnErsoiYGNf3bln4tsQ+v5jYUY+Gn/9mVTPEYs6uwC78UW5Gj+Za
+lB3V8aRxQjWBerhLhf3iCmkkOVaG5JvVJDmvwo6iBRZ4NNzkAqOJm/UvfWoKN91b
+riHAWNayqvOfzaK6KYiJlOR9D779pK6xL+gZ0zo3rIA2yzs5MJAvJmaq6SQmQFl1
+Vzhnf3hIGJFtJYQJhlr36pkPgG9jVdJPhZisY9EsIAHvDbbLlBNexSmZc2RZmsVL
+VG6WqOm85DzuZxGULK/CnXCLpBMKWf9y5YPJrLkuwQILrr2btnAivPfUU80S3E0c
+VslBodCkSGVx3iQoAVJv2+6ZNMRNLVzpLnlaVtHl/gvw+InJlXmzBlZQFKOCaOny
+sz67qKmK1KWui2G3AzuvTEL9O++FVO+irpSNSLozxif/erLJl7R60pBkrWwd6jGB
+8qQv7ni+xIeXDBLSu26zPunLR/2PhrrCv49KmqNmF7sSNx6xmcc3CfgEy+5+Tm97
+KPE4JlaH/ZW61TlzXojbZMaiJltkFkpagFgm2bXrN1nMk2d6R+Yfe78lSvPKoB8k
+1m7LY1lNXFZJh2hxQRhdV9oTokFahUSitQCg1S3eASuE2jFRRL4jrh4LcBWUHZnJ
+OOAwBDOF4RfGyfiDs0IlrnLvK3a2KorlHfvUyj+cwkRmgI8sWgkJuNpz1mKDn5UZ
+yGn2JczHY0CiInRGgwMnS1Z/WpJZYGNh7pP7Hm1RnzVslkWSJGaKJv9jDNUCyy8R
+L+nwUSd6m6r8YWcs3zdBYsDHGOO5MgAU5Q8yuLbEgaK5NJSJgGkm+ya5oB88Y6T0
+JcL/u5xKw4kJiKgiLr3zrWe5qV6+lpH7fGKy7fucJWltDkfQSD3Dp0b64TW4FuQq
+VQhDR+KykLK6QxM2x3/maMfG578Ku1F6g4RboDR/6uCFu6hQuCoNYBk/QB0XpY13
+-----END RSA PRIVATE KEY-----
diff --git a/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/ssl-cert/server.pem b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/ssl-cert/server.pem
new file mode 100644
index 000000000..1d6040ca9
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/C#/HPSocket4CS/bin/x86/Release/ssl-cert/server.pem
@@ -0,0 +1,53 @@
+-----BEGIN RSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: AES-256-CBC,107800C9B21513D8F642A394FAD9047E
+
+bmaTCBYAzKzpUrdaT6sb/dbH5o3JbFu2d8s1NfKhghYUG/RWgzx5H8QWSsh1Ll+8
+701HwSwauwbKaBWzWP5bj4mjw9hXcva8l1QWeuW+Q0GsE7uWNZGFQZbCxER/9jOu
+36KMlx0twcIEGs9PNwnY7d9oS/BMVpiUqhL8sPihMLCFK0fm6VGjMrfdIZJuZXEv
+BKt+c0UPkkPmivZjSm6iTPKI6VpGeyg0sM/uZr+mRj7IOAD6vsSQnCfUOq00Rm14
+ABrer8dCWJDKrx1iLq7tFojII+JcB7oBy+8KC/t0MlqmIP2jx93/MVW5lbZ3mj2v
+BanVQvklHTLe/WHjoaltqBEKN0sIzfyed6qWudKHUa8yjAr0PS4rsTbO0S4fFz+A
+KFWEs8fuXsanFHt5akWDTMiw1n4HaiioT4jjhWRRIKGEndztyGMklShYAdSTqsZO
+vzPO+xqLlg6wOgCGZ3Kl/c243XyLMCI+lJlzu3ccqzQJbNfPADXUcxSTqaEByWG3
+YIXttKY5WFBcNjf9B3c1qfJMt3nGY2QewnL+rNm/qpose/AsFS+2aqMeRw7fYh3R
+O+H+G+0gxrSK0E3WiewMIvUqFI6W300MWx6O7d87OkbfwMLpLPumsfLKswOKaAIF
+p0RxSABSe5ixqnErsoiYGNf3bln4tsQ+v5jYUY+Gn/9mVTPEYs6uwC78UW5Gj+Za
+lB3V8aRxQjWBerhLhf3iCmkkOVaG5JvVJDmvwo6iBRZ4NNzkAqOJm/UvfWoKN91b
+riHAWNayqvOfzaK6KYiJlOR9D779pK6xL+gZ0zo3rIA2yzs5MJAvJmaq6SQmQFl1
+Vzhnf3hIGJFtJYQJhlr36pkPgG9jVdJPhZisY9EsIAHvDbbLlBNexSmZc2RZmsVL
+VG6WqOm85DzuZxGULK/CnXCLpBMKWf9y5YPJrLkuwQILrr2btnAivPfUU80S3E0c
+VslBodCkSGVx3iQoAVJv2+6ZNMRNLVzpLnlaVtHl/gvw+InJlXmzBlZQFKOCaOny
+sz67qKmK1KWui2G3AzuvTEL9O++FVO+irpSNSLozxif/erLJl7R60pBkrWwd6jGB
+8qQv7ni+xIeXDBLSu26zPunLR/2PhrrCv49KmqNmF7sSNx6xmcc3CfgEy+5+Tm97
+KPE4JlaH/ZW61TlzXojbZMaiJltkFkpagFgm2bXrN1nMk2d6R+Yfe78lSvPKoB8k
+1m7LY1lNXFZJh2hxQRhdV9oTokFahUSitQCg1S3eASuE2jFRRL4jrh4LcBWUHZnJ
+OOAwBDOF4RfGyfiDs0IlrnLvK3a2KorlHfvUyj+cwkRmgI8sWgkJuNpz1mKDn5UZ
+yGn2JczHY0CiInRGgwMnS1Z/WpJZYGNh7pP7Hm1RnzVslkWSJGaKJv9jDNUCyy8R
+L+nwUSd6m6r8YWcs3zdBYsDHGOO5MgAU5Q8yuLbEgaK5NJSJgGkm+ya5oB88Y6T0
+JcL/u5xKw4kJiKgiLr3zrWe5qV6+lpH7fGKy7fucJWltDkfQSD3Dp0b64TW4FuQq
+VQhDR+KykLK6QxM2x3/maMfG578Ku1F6g4RboDR/6uCFu6hQuCoNYBk/QB0XpY13
+-----END RSA PRIVATE KEY-----
+-----BEGIN CERTIFICATE-----
+MIID6TCCAtGgAwIBAgIDAIFoMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNVBAYTAkNO
+MQswCQYDVQQIDAJHRDELMAkGA1UEBwwCR1oxDDAKBgNVBAoMA1NTVDEPMA0GA1UE
+CwwGSmVzc01BMRcwFQYDVQQDDA53d3cuamVzc21hLm9yZzEeMBwGCSqGSIb3DQEJ
+ARYPbGRjc2FhQDIxY24uY29tMB4XDTE2MDEwMTAwMDAwMFoXDTI2MDEwMTAwMDAw
+MFowcjELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQwwCgYDVQQKDANTU1QxDzAN
+BgNVBAsMBkplc3NNQTEXMBUGA1UEAwwOd3d3Lmplc3NtYS5vcmcxHjAcBgkqhkiG
+9w0BCQEWD2xkY3NhYUAyMWNuLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBALEOPuYKEl/iN3ub/QNaaqo0Hynk62znTp5kXj0zQAqxLxwHU117xHBk
+0LCZux0LnDFl9JAlilvqfeaXRWmQd6hrvV+1mNpnIe2xfyNWwa37QDNjXB7mEg3V
+O/dN9KeVxq9RlH/dQJ7qZlYy4i7wznYMUlz38378wYoOvdAQBX1UrdjWA5T4q0Da
+cRRAV0fIp45hBarp6T1nhDEvttU8yud2lIEV9jWblkyGIhU4FisGOIRRGhnKzCAh
+CYSZ59mq8Wf4FawMyz/H4noHcWWJu4ID1oAE+VFGXKm78qjp/T71/myn5lcGquTx
+oSoJrx7og+529eaJwgeJd2JF7OQ5NysCAwEAAaN7MHkwCQYDVR0TBAIwADAsBglg
+hkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0O
+BBYEFO0CmyFtrGLrkNkkA62QPzSp8vgJMB8GA1UdIwQYMBaAFPx+7pAUh/GVC8xa
+OXmmZ8GMvpyIMA0GCSqGSIb3DQEBCwUAA4IBAQBT1JGXn7HMyNHZntM4kCp7kwN9
+HSpcbQxbWFtk+l8ANP9SqCIEd4xc4rAaUDDDMdD2S0wF9iio1MA1KC5OoJ5Dqw6C
+yTa08LRowlmnw+NNZC2xzaSRmzLGlPDHNauZ/G2ScdWsqR5v2+pKF7bYxAajRkk5
+oqRRDI6X7vHsvX/kqTn9Prk0sFmU0EU64az2iUe/MG9v1WY8eOV+tTEq29GuYYjJ
+E3H8vaeq1fTB0vYgT5xoCc36xVXju/3l17CE12n5of004u4eRi3/T0wbp9WgG2ns
+wjetaYeIAWS/AJQzIK22tztGAbAk6kTgsO5YLx2h6GLGpytDXWvgzr2PdEu1
+-----END CERTIFICATE-----
diff --git a/HP-Socket/Demo/Other Languages Demos/Delphi/Client/HPSocket4C_U.dll b/HP-Socket/Demo/Other Languages Demos/Delphi/Client/HPSocket4C_U.dll
new file mode 100644
index 000000000..4efcb500f
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/Delphi/Client/HPSocket4C_U.dll differ
diff --git a/HP-Socket/Demo/Other Languages Demos/Delphi/Client/HPSocketSDKUnit.dcu b/HP-Socket/Demo/Other Languages Demos/Delphi/Client/HPSocketSDKUnit.dcu
new file mode 100644
index 000000000..ffdf5a2ce
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/Delphi/Client/HPSocketSDKUnit.dcu differ
diff --git a/HP-Socket/Demo/Other Languages Demos/Delphi/Client/HPSocketSDKUnit.pas b/HP-Socket/Demo/Other Languages Demos/Delphi/Client/HPSocketSDKUnit.pas
new file mode 100644
index 000000000..8c26b6f0c
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/Delphi/Client/HPSocketSDKUnit.pas
@@ -0,0 +1,1147 @@
+// _ooOoo_
+
// o8888888o
+// 88" . "88
+// (| -_- |)
+// O\ = /O
+// ____/`---'\____
+// . ' \\| |// `.
+// / \\||| : |||// \
+// / _||||| -:- |||||- \
+// | | \\\ - /// | |
+// | \_| ''\---/'' | |
+// \ .-\__ `-` ___/-. /
+// ___`. .' /--.--\ `. . __
+// ."" '< `.___\_<|>_/___.' >'"".
+// | | : `- \`.;`\ _ /`;.`/ - ` : | |
+// \ \ `-. \_ __\ /__ _/ .-` / /
+// ======`-.____`-.___\_____/___.-`____.-'======
+// `=---='
+//
+// .............................................
+// 佛祖镇楼 BUG辟易
+// 佛曰:
+// 写字楼里写字间,写字间里程序员;
+// 程序人员写程序,又拿程序换酒钱。
+// 酒醒只在网上坐,酒醉还来网下眠;
+// 酒醉酒醒日复日,网上网下年复年。
+// 但愿老死电脑间,不愿鞠躬老板前;
+// 奔驰宝马贵者趣,公交自行程序员。
+// 别人笑我忒疯癫,我笑自己命太贱;
+// 不见满街漂亮妹,哪个归得程序员?
+
unit HPSocketSDKUnit;
+
+interface
+
+uses
+ Windows, SysUtils,DateUtils,StrUtils;
+
+const
+ HPSocketDLL = 'HPSocket4C_U.dll';
+
+type
+{$Z4}
+ SOCKET = Pointer;
+
+ WSABUF = Record
+ len: ULONG; { the length of the buffer }
+ buf: PChar; { the pointer to the buffer }
+ end { WSABUF };
+
+ PWSABUF = ^WSABUF;
+ LPWSABUF = PWSABUF;
+
+ WSABUFArray = array of WSABUF;
+
+ PInteger = ^Integer;
+ PUShort = ^Word;
+ { /************************************************************************
+ 名称:连接 ID 数据类型
+ 描述:定义连接 ID 的数据类型
+ ************************************************************************/ }
+ HP_CONNID = DWORD;
+ PHP_CONNID = ^HP_CONNID;
+ HP_CONNIDArray = array of HP_CONNID; { TODO : 这个数组变量用来获取所有连接id }
+ { /************************************************************************
+ 名称:定义 Socket 对象指针类型别名
+ 描述:把 Socket 对象指针定义为更直观的别名
+ ************************************************************************/ }
+ HP_Object = longint;
+
+ HP_Server = HP_Object;
+ HP_Agent = HP_Object;
+ HP_Client = HP_Object;
+ HP_TcpServer = HP_Object;
+ HP_HttpServer = HP_Object;
+ HP_TcpAgent = HP_Object;
+ HP_TcpClient = HP_Object;
+ HP_PullSocket = HP_Object;
+ HP_PullClient = HP_Object;
+ HP_TcpPullServer = HP_Object;
+ HP_TcpPullAgent = HP_Object;
+ HP_TcpPullClient = HP_Object;
+ HP_PackSocket = HP_Object;
+ HP_PackClient = HP_Object;
+ HP_TcpPackServer = HP_Object;
+ HP_TcpPackAgent = HP_Object;
+ HP_TcpPackClient = HP_Object;
+ HP_UdpServer = HP_Object;
+ HP_UdpClient = HP_Object;
+ HP_UdpCast = HP_Object;
+
+ HP_Listener = HP_Object;
+ HP_ServerListener = HP_Object;
+ HP_AgentListener = HP_Object;
+ HP_ClientListener = HP_Object;
+ HP_TcpServerListener = HP_Object;
+ HP_HttpServerListener = HP_Object;
+ HP_TcpAgentListener = HP_Object;
+ HP_TcpClientListener = HP_Object;
+ HP_PullSocketListener = HP_Object;
+ HP_PullClientListener = HP_Object;
+ HP_TcpPullServerListener = HP_Object;
+ HP_TcpPullAgentListener = HP_Object;
+ HP_TcpPullClientListener = HP_Object;
+ HP_UdpServerListener = HP_Object;
+ HP_UdpClientListener = HP_Object;
+ HP_UdpCastListener = HP_Object;
+
+ {******************************************** 公共类、接口 ********************************************/}
+
+ {TODO:/************************************************************************
+ 名称:通信组件服务状态
+ 描述:应用程序可以通过通信组件的 GetState() 方法获取组件当前服务状态
+ ************************************************************************ }
+ En_HP_ServiceState = (
+ HP_SS_STARTING = 0, // 正在启动
+ HP_SS_STARTED = 1, // 已经启动
+ HP_SS_STOPING = 2, // 正在停止
+ HP_SS_STOPED = 3 // 已经停止
+ );
+
+ { TODO:************************************************************************
+ 名称:Socket 操作类型
+ 描述:应用程序的 OnErrror() 事件中通过该参数标识是哪种操作导致的错误
+ ************************************************************************ }
+ En_HP_SocketOperation = (
+ HP_SO_UNKNOWN = 0, // Unknown
+ HP_SO_ACCEPT = 1, // Acccept
+ HP_SO_CONNECT = 2, // Connnect
+ HP_SO_SEND = 3, // Send
+ HP_SO_RECEIVE = 4, // Receive
+ HP_SO_CLOSE = 5 // Close
+ );
+
+ {TODO: ************************************************************************
+ 名称:事件通知处理结果
+ 描述:事件通知的返回值,不同的返回值会影响通信组件的后续行为
+ ************************************************************************ }
+ En_HP_HandleResult = (
+ HP_HR_OK = 0, // 成功处理
+ HP_HR_IGNORE = 1, // 忽略处理
+ HP_HR_ERROR = 2 // 错误处理
+ );
+
+ { TODO:/************************************************************************
+ 名称:数据抓取结果
+ 描述:数据抓取操作的返回值
+ ************************************************************************/ }
+ En_HP_FetchResult = (
+ HP_FR_OK = 0, // 成功
+ HP_FR_LENGTH_TOO_LONG = 1, // 抓取长度过大
+ HP_FR_DATA_NOT_FOUND = 2 // 找不到 ConnID 对应的数据
+ );
+
+ { TODO:/************************************************************************
+ 名称:数据发送策略
+ 描述:Server 组件和 Agent 组件的数据发送策略
+
+ * 打包模式(默认) :尽量把多个发送操作的数据组合在一起发送,增加传输效率
+ * 安全模式 :尽量把多个发送操作的数据组合在一起发送,并控制传输速度,避免缓冲区溢出
+ * 直接模式 :对每一个发送操作都直接投递,适用于负载不高但要求实时性较高的场合
+
+ ************************************************************************/ }
+ En_HP_SendPolicy = (
+ HP_SP_PACK = 0, // 打包模式(默认)
+ HP_SP_SAFE = 1, // 安全模式
+ HP_SP_DIRECT = 2 // 直接模式
+ );
+
+ { TODO:************************************************************************
+ 名称:操作结果代码
+ 描述:Start() / Stop() 方法执行失败时,可通过 GetLastError() 获取错误代码
+ ************************************************************************ }
+ En_HP_SocketError = (
+ HP_SE_OK = 0, // 成功
+ HP_SE_ILLEGAL_STATE = 1, // 当前状态不允许操作
+ HP_SE_INVALID_PARAM = 2, // 非法参数
+ HP_SE_SOCKET_CREATE = 3, // 创建 SOCKET 失败
+ HP_SE_SOCKET_BIND = 4, // 绑定 SOCKET 失败
+ HP_SE_SOCKET_PREPARE = 5, // 设置 SOCKET 失败
+ HP_SE_SOCKET_LISTEN = 6, // 监听 SOCKET 失败
+ HP_SE_CP_CREATE = 7, // 创建完成端口失败
+ HP_SE_WORKER_THREAD_CREATE = 8, // 创建工作线程失败
+ HP_SE_DETECT_THREAD_CREATE = 9, // 创建监测线程失败
+ HP_SE_SOCKE_ATTACH_TO_CP = 10, // 绑定完成端口失败
+ HP_SE_CONNECT_SERVER = 11, // 连接服务器失败
+ HP_SE_NETWORK = 12, // 网络错误
+ HP_SE_DATA_PROC = 13, // 数据处理错误
+ HP_SE_DATA_SEND = 14, // 数据发送失败
+
+ //***** SSL Socket 扩展操作结果代码 *****/
+ HP_SE_SSL_ENV_NOT_READY = 101 // SSL 环境未就绪
+ );
+
+ {TODO:
+ /************************************************************************
+ 名称:播送模式
+ 描述:UDP 组件的播送模式(组播或广播)
+ ************************************************************************/}
+ En_HP_CastMode = (
+ HP_CM_MULTICAST = 0, // 组播
+ HP_CM_BROADCAST = 1 // 广播
+ );
+
+
+ { /************** HPSocket4C.dll 回调函数 **************/ }
+ {TODO: /* Tcp服务端回调函数 */ }
+ HP_FN_Server_OnPrepareListen = function(soListen: Pointer): En_HP_HandleResult; stdcall;
+ // 如果为 TCP 连接,pClient为 SOCKET 句柄;如果为 UDP 连接,pClient为 SOCKADDR_IN 指针;
+ HP_FN_Server_OnAccept = function(dwConnID: HP_CONNID; pClient: Pointer): En_HP_HandleResult; stdcall;
+ HP_FN_Server_OnHandShake = function(dwConnID: HP_CONNID): En_HP_HandleResult; stdcall;
+ HP_FN_Server_OnSend = function(dwConnID: HP_CONNID; const pData: Pointer; iLength: Integer): En_HP_HandleResult; stdcall;
+ HP_FN_Server_OnReceive = function(dwConnID: HP_CONNID; const pData: Pointer; iLength: Integer): En_HP_HandleResult; stdcall;
+ HP_FN_Server_OnPullReceive = function(dwConnID: HP_CONNID; iLength: Integer): En_HP_HandleResult; stdcall;
+ HP_FN_Server_OnClose = function(dwConnID: HP_CONNID; enOperation: En_HP_SocketOperation; iErrorCode: Integer): En_HP_HandleResult; stdcall;
+ HP_FN_Server_OnShutdown = function(): En_HP_HandleResult; stdcall;
+
+ {TODO: /* Agent 回调函数 */ }
+ HP_FN_Agent_OnPrepareConnect = function(dwConnID: HP_CONNID; SOCKET: Pointer): En_HP_HandleResult; stdcall;
+ HP_FN_Agent_OnConnect = function(dwConnID: HP_CONNID): En_HP_HandleResult; stdcall;
+ HP_FN_Agent_OnHandShake = function(dwConnID: HP_CONNID): En_HP_HandleResult; stdcall;
+ HP_FN_Agent_OnSend = function(dwConnID: HP_CONNID; const pData: Pointer; iLength: Integer): En_HP_HandleResult; stdcall;
+ HP_FN_Agent_OnReceive = function(dwConnID: HP_CONNID; const pData: Pointer; iLength: Integer): En_HP_HandleResult; stdcall;
+ HP_FN_Agent_OnPullReceive = function(dwConnID: HP_CONNID; iLength: Integer): En_HP_HandleResult; stdcall;
+ HP_FN_Agent_OnClose = function(dwConnID: HP_CONNID; enOperation: En_HP_SocketOperation; iErrorCode: Integer): En_HP_HandleResult; stdcall;
+ HP_FN_Agent_OnShutdown = function(): En_HP_HandleResult; stdcall;
+
+ {TODO: /* Client 回调函数 */ }
+ HP_FN_Client_OnPrepareConnect = function(pClient: HP_Client; SOCKET: Pointer): En_HP_HandleResult; stdcall;
+ HP_FN_Client_OnConnect = function(pClient: HP_Client): En_HP_HandleResult; stdcall;
+ HP_FN_Client_OnHandShake = function(pClient: HP_Client): En_HP_HandleResult; stdcall;
+ HP_FN_Client_OnSend = function(pClient: HP_Client; const pData: Pointer; iLength: Integer): En_HP_HandleResult; stdcall;
+ HP_FN_Client_OnReceive = function(pClient: HP_Client; const pData: Pointer; iLength: Integer): En_HP_HandleResult; stdcall;
+ HP_FN_Client_OnPullReceive = function(pClient: HP_Client; iLength: Integer): En_HP_HandleResult; stdcall;
+ HP_FN_Client_OnClose = function(pClient: HP_Client; enOperation: En_HP_SocketOperation; iLength: Integer): En_HP_HandleResult; stdcall;
+
+ { /****************************************************/
+ /************** HPSocket4C.dll 导出函数 **************/ }
+ {TODO: 创建 HP_TcpServer 对象 }
+function Create_HP_TcpServer(pListener: HP_TcpServerListener): HP_TcpServer; stdcall; external HPSocketDLL;
+ {TODO: 创建 HP_HttpServer 对象 }
+function Create_HP_HttpServer(pListener: HP_HttpServerListener): HP_HttpServer; stdcall; external HPSocketDLL;
+ {TODO: 创建 HP_TcpAgent 对象 }
+function Create_HP_TcpAgent(pListener: HP_TcpAgentListener): HP_TcpAgent; stdcall; external HPSocketDLL;
+ {TODO: 创建 HP_TcpClient 对象 }
+function Create_HP_TcpClient(pListener: HP_TcpClientListener): HP_TcpClient; stdcall; external HPSocketDLL;
+ {TODO: 创建 HP_TcpPullServer 对象 }
+function Create_HP_TcpPullServer(pListener: HP_TcpPullServerListener): HP_TcpPullServer; stdcall; external HPSocketDLL;
+ {TODO: 创建 HP_TcpPullAgent 对象 }
+function Create_HP_TcpPullAgent(pListener: HP_TcpPullAgentListener): HP_TcpPullAgent; stdcall; external HPSocketDLL;
+ {TODO: 创建 HP_TcpPullClient 对象}
+function Create_HP_TcpPullClient(pListener: HP_TcpPullClientListener): HP_TcpPullClient; stdcall; external HPSocketDLL;
+ {TODO: 创建 HP_TcpPackServer 对象 }
+function Create_HP_TcpPackServer(pListener: HP_TcpServerListener): HP_TcpPackServer; stdcall; external HPSocketDLL;
+ {TODO: 创建 HP_TcpPackAgent 对象 }
+function Create_HP_TcpPackAgent(pListener: HP_TcpAgentListener): HP_TcpPackAgent; stdcall; external HPSocketDLL;
+ {TODO: 创建 HP_TcpPackClient 对象}
+function Create_HP_TcpPackClient(pListener: HP_TcpClientListener): HP_TcpPackClient; stdcall; external HPSocketDLL;
+ {TODO: 创建 HP_UdpServer 对象 }
+function Create_HP_UdpServer(pListener: HP_UdpServerListener): HP_UdpServer; stdcall; external HPSocketDLL;
+ {TODO: 创建 HP_UdpClient 对象 }
+function Create_HP_UdpClient(pListener: HP_UdpClientListener): HP_UdpClient; stdcall; external HPSocketDLL;
+ {TODO: 创建 HP_UdpCast 对象 }
+function Create_HP_UdpCast(pListener: HP_UdpCastListener): HP_UdpCast; stdcall; external HPSocketDLL;
+
+ {TODO: 销毁 HP_TcpServer 对象 }
+procedure Destroy_HP_TcpServer(pServer: HP_TcpServer); stdcall; external HPSocketDLL;
+ {TODO: 销毁 HP_HttpServer 对象 }
+procedure Destroy_HP_HttpServer(pServer: HP_HttpServer); stdcall; external HPSocketDLL;
+ {TODO: 销毁 HP_TcpAgent 对象 }
+procedure Destroy_HP_TcpAgent(pAgent: HP_TcpAgent); stdcall; external HPSocketDLL;
+ {TODO: 销毁 HP_TcpClient 对象 }
+procedure Destroy_HP_TcpClient(pClient: HP_TcpClient); stdcall; external HPSocketDLL;
+ {TODO: 销毁 HP_TcpPullServer 对象 }
+procedure Destroy_HP_TcpPullServer(pServer: HP_TcpPullServer); stdcall; external HPSocketDLL;
+ {TODO: 销毁 HP_TcpPullAgent 对象 }
+procedure Destroy_HP_TcpPullAgent(pAgent: HP_TcpPullAgent); stdcall; external HPSocketDLL;
+ {TODO: 销毁 HP_TcpPullClient 对象 }
+procedure Destroy_HP_TcpPullClient(pClient: HP_TcpPullClient); stdcall; external HPSocketDLL;
+ {TODO: 销毁 HP_TcpPackServer 对象 }
+procedure Destroy_HP_TcpPackServer(pServer: HP_TcpPackServer); stdcall; external HPSocketDLL;
+ {TODO: 销毁 HP_TcpPackAgent 对象 }
+procedure Destroy_HP_TcpPackAgent(pAgent: HP_TcpPackAgent); stdcall; external HPSocketDLL;
+ {TODO: 销毁 HP_TcpPackClient 对象 }
+procedure Destroy_HP_TcpPackClient(pClient: HP_TcpPackClient); stdcall; external HPSocketDLL;
+ {TODO: 销毁 HP_UdpServer 对象 }
+procedure Destroy_HP_UdpServer(pServer: HP_UdpServer); stdcall; external HPSocketDLL;
+ {TODO: 销毁 HP_UdpClient 对象 }
+procedure Destroy_HP_UdpClient(pClient: HP_UdpClient); stdcall; external HPSocketDLL;
+ {TODO: 销毁 HP_UdpCast 对象 }
+procedure Destroy_HP_UdpCast(pCast: HP_UdpCast); stdcall; external HPSocketDLL;
+
+ {TODO: 创建 HP_TcpServerListener and HP_TcpPackServerListener 对象 }
+function Create_HP_TcpServerListener(): HP_TcpServerListener; stdcall; external HPSocketDLL;
+ {TODO: 创建 HP_HttpServerListener 对象 }
+function Create_HP_HttpServerListener(): HP_HttpServerListener; stdcall; external HPSocketDLL;
+ {TODO: 创建 HP_TcpAgentListener 对象 }
+function Create_HP_TcpAgentListener(): HP_TcpAgentListener; stdcall; external HPSocketDLL;
+ {TODO: 创建 HP_TcpClientListener 对象 }
+function Create_HP_TcpClientListener(): HP_TcpClientListener; stdcall; external HPSocketDLL;
+ {TODO: 创建 HP_TcpPullServerListener 对象 }
+function Create_HP_TcpPullServerListener(): HP_TcpPullServerListener; stdcall; external HPSocketDLL;
+ {TODO: 创建 HP_TcpPullAgentListener 对象 }
+function Create_HP_TcpPullAgentListener(): HP_TcpPullAgentListener; stdcall; external HPSocketDLL;
+ {TODO: 创建 HP_TcpPullClientListener 对象 }
+function Create_HP_TcpPullClientListener(): HP_TcpPullClientListener; stdcall; external HPSocketDLL;
+ {TODO: 创建 HP_UdpServerListener 对象 }
+function Create_HP_UdpServerListener(): HP_UdpServerListener; stdcall; external HPSocketDLL;
+ {TODO: 创建 HP_UdpClientListener 对象 }
+function Create_HP_UdpClientListener(): HP_UdpClientListener; stdcall; external HPSocketDLL;
+ {TODO: 创建 HP_UdpCastListener 对象 }
+function Create_HP_UdpCastListener(): HP_UdpCastListener; stdcall; external HPSocketDLL;
+
+ {TODO: 销毁 HP_TcpServerListener and HP_TcpPackServerListener对象 }
+procedure Destroy_HP_TcpServerListener(pListener: HP_TcpServerListener); stdcall; external HPSocketDLL;
+ {TODO: 销毁 HP_HttpServerListener 对象 }
+procedure Destroy_HP_HttpServerListener(pListener: HP_HttpServerListener); stdcall; external HPSocketDLL;
+ {TODO: 销毁 HP_TcpAgentListener 对象 }
+procedure Destroy_HP_TcpAgentListener(pListener: HP_TcpAgentListener); stdcall; external HPSocketDLL;
+ {TODO: 销毁 HP_TcpClientListener 对象 }
+procedure Destroy_HP_TcpClientListener(pListener: HP_TcpClientListener); stdcall; external HPSocketDLL;
+ {TODO: 销毁 HP_TcpPullServerListener 对象 }
+procedure Destroy_HP_TcpPullServerListener(pListener: HP_TcpPullServerListener); stdcall; external HPSocketDLL;
+ {TODO: 销毁 HP_TcpPullAgentListener 对象 }
+procedure Destroy_HP_TcpPullAgentListener(pListener: HP_TcpPullAgentListener); stdcall; external HPSocketDLL;
+ {TODO: 销毁 HP_TcpPullClientListener 对象 }
+procedure Destroy_HP_TcpPullClientListener(pListener: HP_TcpPullClientListener); stdcall; external HPSocketDLL;
+ {TODO: 销毁 HP_UdpServerListener 对象 }
+procedure Destroy_HP_UdpServerListener(pListener: HP_UdpServerListener); stdcall; external HPSocketDLL;
+ {TODO: 销毁 HP_UdpClientListener 对象 }
+procedure Destroy_HP_UdpClientListener(pListener: HP_UdpClientListener); stdcall; external HPSocketDLL;
+ {TODO: 销毁 HP_UdpCastListener 对象 }
+procedure Destroy_HP_UdpCastListener(pListener: HP_UdpCastListener); stdcall; external HPSocketDLL;
+
+{TODO: ***************************** Server 回调函数设置方法 ***************************** }
+procedure HP_Set_FN_Server_OnPrepareListen(pListener: HP_TcpServerListener; fn: HP_FN_Server_OnPrepareListen); stdcall; external HPSocketDLL;
+procedure HP_Set_FN_Server_OnAccept(pListener: HP_TcpServerListener; fn: HP_FN_Server_OnAccept); stdcall; external HPSocketDLL;
+procedure HP_Set_FN_Server_OnHandShake(pListener: HP_TcpServerListener; fn: HP_FN_Server_OnHandShake); stdcall; external HPSocketDLL;
+procedure HP_Set_FN_Server_OnSend(pListener: HP_TcpServerListener; fn: HP_FN_Server_OnSend); stdcall; external HPSocketDLL;
+procedure HP_Set_FN_Server_OnReceive(pListener: HP_TcpServerListener; fn: HP_FN_Server_OnReceive); stdcall; external HPSocketDLL;
+procedure HP_Set_FN_Server_OnPullReceive(pListener: HP_TcpServerListener; fn: HP_FN_Server_OnPullReceive); stdcall; external HPSocketDLL;
+procedure HP_Set_FN_Server_OnClose(pListener: HP_TcpServerListener; fn: HP_FN_Server_OnClose); stdcall; external HPSocketDLL;
+procedure HP_Set_FN_Server_OnShutdown(pListener: HP_TcpServerListener; fn: HP_FN_Server_OnShutdown); stdcall; external HPSocketDLL;
+
+
+
+{TODO:****************************** Agent 回调函数设置方法 ***************************** }
+procedure HP_Set_FN_Agent_OnPrepareConnect(pListener: HP_AgentListener; fn: HP_FN_Agent_OnPrepareConnect); stdcall; external HPSocketDLL;
+procedure HP_Set_FN_Agent_OnConnect(pListener: HP_AgentListener; fn: HP_FN_Agent_OnConnect); stdcall; external HPSocketDLL;
+procedure HP_Set_FN_Agent_OnHandShake(pListener: HP_AgentListener; fn: HP_FN_Agent_OnHandShake); stdcall; external HPSocketDLL;
+procedure HP_Set_FN_Agent_OnSend(pListener: HP_AgentListener; fn: HP_FN_Agent_OnSend); stdcall; external HPSocketDLL;
+procedure HP_Set_FN_Agent_OnReceive(pListener: HP_AgentListener; fn: HP_FN_Agent_OnReceive); stdcall; external HPSocketDLL;
+procedure HP_Set_FN_Agent_OnPullReceive(pListener: HP_AgentListener; fn: HP_FN_Agent_OnPullReceive); stdcall; external HPSocketDLL;
+procedure HP_Set_FN_Agent_OnClose(pListener: HP_AgentListener; fn: HP_FN_Agent_OnClose); stdcall; external HPSocketDLL;
+procedure HP_Set_FN_Agent_OnAgentShutdown(pListener: HP_AgentListener; fn: HP_FN_Agent_OnShutdown); stdcall; external HPSocketDLL;
+
+{TODO:***************************** Client 回调函数设置方法 ***************************** }
+procedure HP_Set_FN_Client_OnPrepareConnect(pListener: HP_TcpClientListener; fn: HP_FN_Client_OnPrepareConnect); stdcall; external HPSocketDLL;
+procedure HP_Set_FN_Client_OnConnect(pListener: HP_TcpClientListener; fn: HP_FN_Client_OnConnect); stdcall; external HPSocketDLL;
+procedure HP_Set_FN_Client_OnHandShake(pListener: HP_TcpClientListener; fn: HP_FN_Client_OnHandShake); stdcall; external HPSocketDLL;
+procedure HP_Set_FN_Client_OnSend(pListener: HP_TcpClientListener; fn: HP_FN_Client_OnSend); stdcall; external HPSocketDLL;
+procedure HP_Set_FN_Client_OnReceive(pListener: HP_TcpClientListener; fn: HP_FN_Client_OnReceive); stdcall; external HPSocketDLL;
+procedure HP_Set_FN_Client_OnPullReceive(pListener: HP_TcpClientListener; fn: HP_FN_Client_OnPullReceive); stdcall; external HPSocketDLL;
+procedure HP_Set_FN_Client_OnClose(pListener: HP_TcpClientListener; fn: HP_FN_Client_OnClose); stdcall; external HPSocketDLL;
+
+{ /***************************** Server 操作方法 *****************************/ }
+{ TODO:
+ * 名称:启动通信组件
+ * 描述:启动服务端通信组件,启动完成后可开始接收客户端连接并收发数据
+ *
+ * 参数: pszBindAddress -- 监听地址
+ * usPort -- 监听端口
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败,可通过 GetLastError() 获取错误代码 }
+function HP_Server_Start(pServer: HP_Server; pszBindAddress: WideString; usPort: Word): BOOL; stdcall; external HPSocketDLL;
+
+{ TODO:
+ * 名称:关闭通信组件
+ * 描述:关闭服务端通信组件,关闭完成后断开所有客户端连接并释放所有资源
+ *
+ * 参数:
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败,可通过 GetLastError() 获取错误代码 }
+function HP_Server_Stop(pServer: HP_Server): BOOL; stdcall; external HPSocketDLL;
+
+{ TODO:
+ * 名称:发送数据
+ * 描述:用户通过该方法向指定客户端发送数据
+ *
+ * 参数:dwConnID -- 连接 ID
+ * pBuffer -- 发送数据缓冲区
+ * iLength -- 发送数据长度
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败 }
+ { Private declarations }
+
+function HP_Server_Send(pServer: HP_Server; dwConnID: HP_CONNID; const pBuffer: Pointer; iLength: Integer): BOOL;
+stdcall; external HPSocketDLL;
+
+
+{ TODO:
+ * 名称:发送数据
+ * 描述:向指定连接发送数据
+ *
+ * 参数:dwConnID -- 连接 ID
+ * pBuffer -- 发送缓冲区
+ * iLength -- 发送缓冲区长度
+ * iOffset -- 发送缓冲区指针偏移量
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败,可通过 Windows API 函数 ::GetLastError() 获取 Windows 错误代码 }
+function HP_Server_SendPart(pServer: HP_Server; dwConnID: HP_CONNID; const pBuffer: Pointer; iLength: Integer; iOffset: Integer): BOOL;
+stdcall; external HPSocketDLL;
+
+{ TODO:
+ * 名称:发送多组数据
+ * 描述:向指定连接发送多组数据
+ * TCP - 顺序发送所有数据包
+ * UDP - 把所有数据包组合成一个数据包发送(数据包的总长度不能大于设置的 UDP 包最大长度)
+ *
+ * 参数: dwConnID -- 连接 ID
+ * pBuffers -- 发送缓冲区数组
+ * iCount -- 发送缓冲区数目
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败,可通过 Windows API 函数 ::GetLastError() 获取 Windows 错误代码 }
+function HP_Server_SendPackets(pServer: HP_Server; dwConnID: HP_CONNID; const pBuffers: WSABUFArray; iCount: Integer): BOOL;
+stdcall; external HPSocketDLL;
+
+{ TODO:
+ * 名称:断开连接
+ * 描述:断开与某个客户端的连接
+ *
+ * 参数: dwConnID -- 连接 ID
+ * bForce -- 是否强制断开连接
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败 }
+function HP_Server_Disconnect(pServer: HP_Server; dwConnID: HP_CONNID; bForce: BOOL): BOOL;
+stdcall; external HPSocketDLL;
+
+{ TODO:
+ * 名称:断开超时连接
+ * 描述:断开超过指定时长的连接
+ *
+ * 参数: dwPeriod -- 时长(毫秒)
+ * bForce -- 是否强制断开连接
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败 }
+function HP_Server_DisconnectLongConnections(pServer: HP_Server; dwPeriod: LongWord; bForce: BOOL): BOOL;
+stdcall; external HPSocketDLL;
+
+{ TODO:
+ * 名称:断开静默连接
+ * 描述:断开超过指定时长的静默连接
+ *
+ * 参数:dwPeriod -- 时长(毫秒)
+ * bForce -- 是否强制断开连接
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败 }
+function HP_Server_DisconnectSilenceConnections(pServer: HP_Server; dwPeriod: LongWord; bForce: BOOL): BOOL;
+stdcall; external HPSocketDLL;
+
+{***************************** Server 属性访问方法 *****************************/ }
+{ TODO:
+ * 名称:设置连接的附加数据
+ * 描述:是否为连接绑定附加数据或者绑定什么样的数据,均由应用程序只身决定
+ *
+ * 参数: dwConnID -- 连接 ID
+ * pv -- 数据
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败(无效的连接 ID) }
+function HP_Server_SetConnectionExtra(pServer: HP_Server; dwConnID: HP_CONNID; pExtra: Pointer): BOOL;
+stdcall; external HPSocketDLL;
+
+{ TODO:
+ * 名称:获取连接的附加数据
+ * 描述:是否为连接绑定附加数据或者绑定什么样的数据,均由应用程序只身决定
+ *
+ * 参数: dwConnID -- 连接 ID
+ * ppv -- 数据指针
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败(无效的连接 ID) }
+function HP_Server_GetConnectionExtra(pServer: HP_Server; dwConnID: HP_CONNID; ppExtra: Pointer): BOOL;
+stdcall; external HPSocketDLL;
+
+{ TODO: 检查通信组件是否已启动 */ }
+function HP_Server_HasStarted(pServer: HP_Server): BOOL; stdcall; external HPSocketDLL;
+{ TODO: 查看通信组件当前状态 */ }
+function HP_Server_GetState(pServer: HP_Server): En_HP_ServiceState; stdcall; external HPSocketDLL;
+{ TODO: 获取最近一次失败操作的错误代码 */ }
+function HP_Server_GetLastError(pServer: HP_Server): En_HP_SocketError; stdcall; external HPSocketDLL;
+{ TODO: 获取最近一次失败操作的错误描述 */ }
+function HP_Server_GetLastErrorDesc(pServer: HP_Server): PWideChar; stdcall; external HPSocketDLL;
+{ TODO: 获取连接中未发出数据的长度 */ }
+function HP_Server_GetPendingDataLength(pServer: HP_Server; dwConnID: HP_CONNID; piPending: PInteger): BOOL; stdcall; external HPSocketDLL;
+{ TODO: 获取客户端连接数 */ }
+function HP_Server_GetConnectionCount(pServer: HP_Server): LongInt; stdcall; external HPSocketDLL;
+{ TODO: 获取所有连接的 CONNID */ }
+function HP_Server_GetAllConnectionIDs(pServer: HP_Server; pIDs: HP_CONNIDArray; pdwCount: PLongint): BOOL; stdcall; external HPSocketDLL;
+{ TODO: 获取某个客户端连接时长(毫秒) */ }
+function HP_Server_GetConnectPeriod(pServer: HP_Server; dwConnID: HP_CONNID; pdwPeriod: PLongint): BOOL; stdcall; external HPSocketDLL;
+{ TODO: 获取某个连接静默时间(毫秒) */ }
+function HP_Server_GetSilencePeriod(pServer: HP_Server; dwConnID: HP_CONNID; pdwPeriod: PLongint): BOOL; stdcall; external HPSocketDLL;
+{ TODO: 获取监听 Socket 的地址信息 */ }
+function HP_Server_GetListenAddress(pServer: HP_Server; lpszAddress: PWideChar; piAddressLen: PInteger; pusPort: PUShort): BOOL; stdcall; external HPSocketDLL;
+{ TODO: 获取某个连接的远程地址信息 */ }
+function HP_Server_GetRemoteAddress(pServer: HP_Server; dwConnID: HP_CONNID; lpszAddress: PWideChar; piAddressLen: PInteger; pusPort: PUShort): BOOL; stdcall; external HPSocketDLL;
+
+{ TODO: 设置数据发送策略 */ }
+procedure HP_Server_SetSendPolicy(pServer: HP_Server; enSendPolicy: En_HP_SendPolicy); stdcall; external HPSocketDLL;
+{ TODO: 设置 Socket 缓存对象锁定时间(毫秒,在锁定期间该 Socket 缓存对象不能被获取使用) */ }
+procedure HP_Server_SetFreeSocketObjLockTime(pServer: HP_Server; dwFreeSocketObjLockTime: LongInt); stdcall; external HPSocketDLL;
+{ TODO: 设置 Socket 缓存池大小(通常设置为平均并发连接数量的 1/3 - 1/2) */ }
+procedure HP_Server_SetFreeSocketObjPool(pServer: HP_Server; dwFreeSocketObjPool: LongInt); stdcall; external HPSocketDLL;
+{ TODO: 设置内存块缓存池大小(通常设置为 Socket 缓存池大小的 2 - 3 倍) */ }
+procedure HP_Server_SetFreeBufferObjPool(pServer: HP_Server; dwFreeBufferObjPool: LongInt); stdcall; external HPSocketDLL;
+{ TODO: 设置 Socket 缓存池回收阀值(通常设置为 Socket 缓存池大小的 3 倍) */ }
+procedure HP_Server_SetFreeSocketObjHold(pServer: HP_Server; dwFreeSocketObjHold: LongInt); stdcall; external HPSocketDLL;
+{ TODO: 设置内存块缓存池回收阀值(通常设置为内存块缓存池大小的 3 倍) */ }
+procedure HP_Server_SetFreeBufferObjHold(pServer: HP_Server; dwFreeBufferObjHold: LongInt); stdcall; external HPSocketDLL;
+{ TODO: 设置工作线程数量(通常设置为 2 * CPU + 2) */ }
+procedure HP_Server_SetWorkerThreadCount(pServer: HP_Server; dwWorkerThreadCount: LongInt); stdcall; external HPSocketDLL;
+{ TODO: 设置是否标记静默时间(设置为 TRUE 时 DisconnectSilenceConnections() 和 GetSilencePeriod() 才有效,默认:FALSE) */ }
+procedure HP_Server_SetMarkSilence(pServer: HP_Server; bMarkSilence: BOOL); stdcall; external HPSocketDLL;
+
+{ TODO: 获取数据发送策略 */ }
+function HP_Server_GetSendPolicy(pServer: HP_Server): En_HP_SendPolicy; stdcall; external HPSocketDLL;
+{ TODO: 获取 Socket 缓存对象锁定时间 */ }
+function HP_Server_GetFreeSocketObjLockTime(pServer: HP_Server): LongInt; stdcall; external HPSocketDLL;
+{ TODO: 获取 Socket 缓存池大小 */ }
+function HP_Server_GetFreeSocketObjPool(pServer: HP_Server): LongInt; stdcall; external HPSocketDLL;
+{ TODO: 获取内存块缓存池大小 */ }
+function HP_Server_GetFreeBufferObjPool(pServer: HP_Server): LongInt; stdcall; external HPSocketDLL;
+{ TODO: 获取 Socket 缓存池回收阀值 */ }
+function HP_Server_GetFreeSocketObjHold(pServer: HP_Server): LongInt; stdcall; external HPSocketDLL;
+{ TODO: 获取内存块缓存池回收阀值 */ }
+function HP_Server_GetFreeBufferObjHold(pServer: HP_Server): LongInt; stdcall; external HPSocketDLL;
+{ TODO: 获取工作线程数量 */ }
+function HP_Server_GetWorkerThreadCount(pServer: HP_Server): LongInt; stdcall; external HPSocketDLL;
+{ TODO: 检测是否标记静默时间 */ }
+function HP_Server_IsMarkSilence(pServer: HP_Server): BOOL; stdcall; external HPSocketDLL;
+
+{ /******************************* TCP Server 操作方法 *******************************/ }
+{ TODO:
+ * 名称:发送小文件
+ * 描述:向指定连接发送 4096 KB 以下的小文件
+ *
+ * 参数: dwConnID -- 连接 ID
+ * lpszFileName -- 文件路径
+ * pHead -- 头部附加数据
+ * pTail -- 尾部附加数据
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败,可通过 Windows API 函数 ::GetLastError() 获取 Windows 错误代码
+ */ }
+function HP_TcpServer_SendSmallFile(pServer: HP_Server; dwConnID: HP_CONNID;
+ lpszFileName: PWideChar; const pHead: LPWSABUF; const pTail: LPWSABUF): BOOL;
+stdcall; external HPSocketDLL;
+
+{ /***************************** TCP Server 属性访问方法 *****************************/ }
+
+{ TODO: 设置监听 Socket 的等候队列大小(根据并发连接数量调整设置) */ }
+procedure HP_TcpServer_SetSocketListenQueue(pServer: HP_TcpServer; dwSocketListenQueue: LongInt); stdcall; external HPSocketDLL;
+{ TODO: 设置 Accept 预投递数量(根据负载调整设置,Accept 预投递数量越大则支持的并发连接请求越多) */ }
+procedure HP_TcpServer_SetAcceptSocketCount(pServer: HP_TcpServer; dwAcceptSocketCount: LongInt); stdcall; external HPSocketDLL;
+{ TODO: 设置通信数据缓冲区大小(根据平均通信数据包大小调整设置,通常设置为 1024 的倍数) */ }
+procedure HP_TcpServer_SetSocketBufferSize(pServer: HP_TcpServer; dwSocketBufferSize: LongInt); stdcall; external HPSocketDLL;
+{ TODO: 设置心跳包间隔(毫秒,0 则不发送心跳包) */ }
+procedure HP_TcpServer_SetKeepAliveTime(pServer: HP_TcpServer; dwKeepAliveTime: LongInt); stdcall; external HPSocketDLL;
+{ TODO: 设置心跳确认包检测间隔(毫秒,0 不发送心跳包,如果超过若干次 [默认:WinXP 5 次, Win7 10 次] 检测不到心跳确认包则认为已断线) */ }
+procedure HP_TcpServer_SetKeepAliveInterval(pServer: HP_TcpServer; dwKeepAliveInterval: LongInt); stdcall; external HPSocketDLL;
+
+{ TODO: 获取 Accept 预投递数量 */ }
+function HP_TcpServer_GetAcceptSocketCount(pServer: HP_TcpServer): LongInt; stdcall; external HPSocketDLL;
+{ TODO: 获取通信数据缓冲区大小 */ }
+function HP_TcpServer_GetSocketBufferSize(pServer: HP_TcpServer): LongInt; stdcall; external HPSocketDLL;
+{ TODO: 获取监听 Socket 的等候队列大小 */ }
+function HP_TcpServer_GetSocketListenQueue(pServer: HP_TcpServer): LongInt; stdcall; external HPSocketDLL;
+{ TODO: 获取心跳检查次数 */ }
+function HP_TcpServer_GetKeepAliveTime(pServer: HP_TcpServer): LongInt; stdcall; external HPSocketDLL;
+{ TODO: 获取心跳检查间隔 */ }
+function HP_TcpServer_GetKeepAliveInterval(pServer: HP_TcpServer): LongInt; stdcall; external HPSocketDLL;
+
+{ /***************************** UDP Server 属性访问方法 *****************************/ }
+
+{ TODO: 设置数据报文最大长度(建议在局域网环境下不超过 1472 字节,在广域网环境下不超过 548 字节) */ }
+procedure HP_UdpServer_SetMaxDatagramSize(pServer: HP_UdpServer; dwMaxDatagramSize: LongInt); stdcall; external HPSocketDLL;
+{ TODO: 获取数据报文最大长度 */ }
+function HP_UdpServer_GetMaxDatagramSize(pServer: HP_UdpServer): LongInt; stdcall; external HPSocketDLL;
+
+{ TODO: 设置 Receive 预投递数量(根据负载调整设置,Receive 预投递数量越大则丢包概率越小) */ }
+procedure HP_UdpServer_SetPostReceiveCount(pServer: HP_UdpServer; dwPostReceiveCount: LongInt); stdcall; external HPSocketDLL;
+{ TODO: 获取 Receive 预投递数量 */ }
+function HP_UdpServer_GetPostReceiveCount(pServer: HP_UdpServer): LongInt; stdcall; external HPSocketDLL;
+
+{ TODO: 设置监测包尝试次数(0 则不发送监测跳包,如果超过最大尝试次数则认为已断线) */ }
+procedure HP_UdpServer_SetDetectAttempts(pServer: HP_UdpServer; dwDetectAttempts: LongInt); stdcall; external HPSocketDLL;
+{ TODO: 设置监测包发送间隔(秒,0 不发送监测包) */ }
+procedure HP_UdpServer_SetDetectInterval(pServer: HP_UdpServer; dwDetectInterval: LongInt); stdcall; external HPSocketDLL;
+{ TODO: 获取心跳检查次数 */ }
+function HP_UdpServer_GetDetectAttempts(pServer: HP_UdpServer): LongInt; stdcall; external HPSocketDLL;
+{ TODO: 获取心跳检查间隔 */ }
+function HP_UdpServer_GetDetectInterval(pServer: HP_UdpServer): LongInt; stdcall; external HPSocketDLL;
+
+{ ***************************** Agent 操作方法 ***************************** }
+
+{ TODO:
+ * 名称:启动通信组件
+ * 描述:启动通信代理组件,启动完成后可开始连接远程服务器
+ *
+ * 参数: pszBindAddress -- 监听地址
+ * bAsyncConnect -- 是否采用异步 Connect
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败,可通过 GetLastError() 获取错误代码
+ */ }
+function HP_Agent_Start(pAgent: HP_Agent; pszBindAddress: PWideChar; bAsyncConnect: BOOL): BOOL; stdcall; external HPSocketDLL;
+
+{ TODO:
+ * 名称:关闭通信组件
+ * 描述:关闭通信组件,关闭完成后断开所有连接并释放所有资源
+ *
+ * 参数:
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败,可通过 GetLastError() 获取错误代码
+ */ }
+function HP_Agent_Stop(pAgent: HP_Agent): BOOL; stdcall; external HPSocketDLL;
+
+{ TODO:
+ * 名称:连接服务器
+ * 描述:连接服务器,连接成功后 IAgentListener 会接收到 OnConnect() 事件
+ *
+ * 参数: pszRemoteAddress -- 服务端地址
+ * usPort -- 服务端端口
+ * pdwConnID -- 连接 ID(默认:nullptr,不获取连接 ID)
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败,可通过函数 SYS_GetLastError() 获取 Windows 错误代码
+ */ }
+function HP_Agent_Connect(pAgent: HP_Agent; pszRemoteAddress: PWideChar; usPort: Word; pdwConnID: PHP_CONNID): BOOL;
+stdcall; external HPSocketDLL;
+
+{ TODO:
+ * 名称:发送数据
+ * 描述:向指定连接发送数据
+ *
+ * 参数: dwConnID -- 连接 ID
+ * pBuffer -- 发送缓冲区
+ * iLength -- 发送缓冲区长度
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败,可通过 Windows API 函数 ::GetLastError() 获取 Windows 错误代码
+ */ }
+function HP_Agent_Send(pAgent: HP_Agent; dwConnID: HP_CONNID; const pBuffer: Pointer; iLength: Integer): BOOL;
+stdcall; external HPSocketDLL;
+
+{ TODO:
+ * 名称:发送数据
+ * 描述:向指定连接发送数据
+ *
+ * 参数: dwConnID -- 连接 ID
+ * pBuffer -- 发送缓冲区
+ * iLength -- 发送缓冲区长度
+ * iOffset -- 发送缓冲区指针偏移量
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败,可通过 Windows API 函数 ::GetLastError() 获取 Windows 错误代码
+ */ }
+function HP_Agent_SendPart(pAgent: HP_Agent; dwConnID: HP_CONNID; const pBuffer: Pointer; iLength: Integer; iOffset: Integer): BOOL;
+stdcall; external HPSocketDLL;
+
+{ TODO:
+ * 名称:发送多组数据
+ * 描述:向指定连接发送多组数据
+ * TCP - 顺序发送所有数据包
+ * UDP - 把所有数据包组合成一个数据包发送(数据包的总长度不能大于设置的 UDP 包最大长度)
+ *
+ * 参数: dwConnID -- 连接 ID
+ * pBuffers -- 发送缓冲区数组
+ * iCount -- 发送缓冲区数目
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败,可通过 Windows API 函数 ::GetLastError() 获取 Windows 错误代码
+ */ }
+function HP_Agent_SendPackets(pAgent: HP_Agent; dwConnID: HP_CONNID; const pBuffers: WSABUFArray; iCount: Integer): BOOL;
+stdcall; external HPSocketDLL;
+
+{ TODO:
+ * 名称:断开连接
+ * 描述:断开某个连接
+ *
+ * 参数: dwConnID -- 连接 ID
+ * bForce -- 是否强制断开连接
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败
+ */ }
+function HP_Agent_Disconnect(pAgent: HP_Agent; dwConnID: HP_CONNID; bForce: BOOL): BOOL;
+stdcall; external HPSocketDLL;
+
+{ TODO:
+ * 名称:断开超时连接
+ * 描述:断开超过指定时长的连接
+ *
+ * 参数: dwPeriod -- 时长(毫秒)
+ * bForce -- 是否强制断开连接
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败
+ */ }
+function HP_Agent_DisconnectLongConnections(pAgent: HP_Agent; dwPeriod: LongInt; bForce: BOOL): BOOL;
+stdcall; external HPSocketDLL;
+
+{ TODO:
+ * 名称:断开静默连接
+ * 描述:断开超过指定时长的静默连接
+ *
+ * 参数: dwPeriod -- 时长(毫秒)
+ * bForce -- 是否强制断开连接
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败
+ */ }
+function HP_Agent_DisconnectSilenceConnections(pAgent: HP_Agent; dwPeriod: LongInt; bForce: BOOL): BOOL;
+stdcall; external HPSocketDLL;
+
+{ /******************************************************************************/
+ /***************************** Agent 属性访问方法 *****************************/ }
+
+{ TODO
+ * 名称:设置连接的附加数据
+ * 描述:是否为连接绑定附加数据或者绑定什么样的数据,均由应用程序只身决定
+ *
+ * 参数: dwConnID -- 连接 ID
+ * pv -- 数据
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败(无效的连接 ID)
+ */ }
+function HP_Agent_SetConnectionExtra(pAgent: HP_Agent; dwConnID: HP_CONNID; pExtra: Pointer): BOOL;
+stdcall; external HPSocketDLL;
+
+{ TODO
+ * 名称:获取连接的附加数据
+ * 描述:是否为连接绑定附加数据或者绑定什么样的数据,均由应用程序只身决定
+ *
+ * 参数: dwConnID -- 连接 ID
+ * ppv -- 数据指针
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败(无效的连接 ID)
+ */ }
+function HP_Agent_GetConnectionExtra(pAgent: HP_Agent; dwConnID: HP_CONNID;
+ ppExtra: Pointer): BOOL; stdcall; external HPSocketDLL;
+
+{TODO 检查通信组件是否已启动 */ }
+function HP_Agent_HasStarted(pAgent: HP_Agent): BOOL; stdcall; external HPSocketDLL;
+{TODO 查看通信组件当前状态 */ }
+function HP_Agent_GetState(pAgent: HP_Agent): En_HP_ServiceState; stdcall; external HPSocketDLL;
+{TODO 获取连接数 */ }
+function HP_Agent_GetConnectionCount(pAgent: HP_Agent): LongInt; stdcall; external HPSocketDLL;
+{ TODO 获取所有连接的 CONNID */ }
+function HP_Agent_GetAllConnectionIDs(pAgent: HP_Agent; pIDs: HP_CONNIDArray; pdwCount: PLongint): BOOL; stdcall; external HPSocketDLL;
+{TODO 获取某个连接时长(毫秒) */ }
+function HP_Agent_GetConnectPeriod(pAgent: HP_Agent; dwConnID: HP_CONNID; pdwPeriod: PLongint): BOOL; stdcall; external HPSocketDLL;
+{TODO 获取某个连接静默时间(毫秒) */ }
+function HP_Agent_GetSilencePeriod(pAgent: HP_Agent; dwConnID: HP_CONNID; pdwPeriod: PLongint): BOOL; stdcall; external HPSocketDLL;
+{TODO 获取某个连接的本地地址信息 */ }
+function HP_Agent_GetLocalAddress(pAgent: HP_Agent; dwConnID: HP_CONNID; lpszAddress: PWideChar; piAddressLen: PInteger; pusPort: PUShort): BOOL; stdcall; external HPSocketDLL;
+{TODO 获取某个连接的远程地址信息 */ }
+function HP_Agent_GetRemoteAddress(pAgent: HP_Agent; dwConnID: HP_CONNID; lpszAddress: PWideChar; piAddressLen: PInteger; pusPort: PUShort): BOOL; stdcall; external HPSocketDLL;
+{TODO 获取最近一次失败操作的错误代码 */ }
+function HP_Agent_GetLastError(pAgent: HP_Agent): En_HP_SocketError; stdcall; external HPSocketDLL;
+{TODO 获取最近一次失败操作的错误描述 */ }
+function HP_Agent_GetLastErrorDesc(pAgent: HP_Agent): PWideChar; stdcall; external HPSocketDLL;
+{TODO 获取连接中未发出数据的长度 */ }
+function HP_Agent_GetPendingDataLength(pAgent: HP_Agent; dwConnID: HP_CONNID; piPending: PInteger): BOOL; stdcall; external HPSocketDLL;
+
+{TODO 设置数据发送策略 */ }
+procedure HP_Agent_SetSendPolicy(pAgent: HP_Agent; enSendPolicy: En_HP_SendPolicy); stdcall; external HPSocketDLL;
+{TODO 设置 Socket 缓存对象锁定时间(毫秒,在锁定期间该 Socket 缓存对象不能被获取使用) */ }
+procedure HP_Agent_SetFreeSocketObjLockTime(pAgent: HP_Agent; dwFreeSocketObjLockTime: LongInt); stdcall; external HPSocketDLL;
+{TODO 设置 Socket 缓存池大小(通常设置为平均并发连接数量的 1/3 - 1/2) */ }
+procedure HP_Agent_SetFreeSocketObjPool(pAgent: HP_Agent; dwFreeSocketObjPool: LongInt); stdcall; external HPSocketDLL;
+{TODO 设置内存块缓存池大小(通常设置为 Socket 缓存池大小的 2 - 3 倍) */ }
+procedure HP_Agent_SetFreeBufferObjPool(pAgent: HP_Agent; dwFreeBufferObjPool: LongInt); stdcall; external HPSocketDLL;
+{TODO 设置 Socket 缓存池回收阀值(通常设置为 Socket 缓存池大小的 3 倍) */ }
+procedure HP_Agent_SetFreeSocketObjHold(pAgent: HP_Agent; dwFreeSocketObjHold: LongInt); stdcall; external HPSocketDLL;
+{TODO 设置内存块缓存池回收阀值(通常设置为内存块缓存池大小的 3 倍) */ }
+procedure HP_Agent_SetFreeBufferObjHold(pAgent: HP_Agent; dwFreeBufferObjHold: LongInt); stdcall; external HPSocketDLL;
+{TODO 设置工作线程数量(通常设置为 2 * CPU + 2) */ }
+procedure HP_Agent_SetWorkerThreadCount(pAgent: HP_Agent; dwWorkerThreadCount: LongInt); stdcall; external HPSocketDLL;
+{TODO 设置是否标记静默时间(设置为 TRUE 时 DisconnectSilenceConnections() 和 GetSilencePeriod() 才有效,默认:FALSE) */ }
+procedure HP_Agent_SetMarkSilence(pAgent: HP_Agent; bMarkSilence: BOOL); stdcall; external HPSocketDLL;
+
+{TODO 获取数据发送策略 */ }
+function HP_Agent_GetSendPolicy(pAgent: HP_Agent): En_HP_SendPolicy; stdcall; external HPSocketDLL;
+{TODO 获取 Socket 缓存对象锁定时间 */ }
+function HP_Agent_GetFreeSocketObjLockTime(pAgent: HP_Agent): LongInt; stdcall; external HPSocketDLL;
+{TODO 获取 Socket 缓存池大小 */ }
+function HP_Agent_GetFreeSocketObjPool(pAgent: HP_Agent): LongInt; stdcall; external HPSocketDLL;
+{TODO 获取内存块缓存池大小 */ }
+function HP_Agent_GetFreeBufferObjPool(HpAgent: HP_Agent): LongInt; stdcall; external HPSocketDLL;
+{TODO 获取 Socket 缓存池回收阀值 */ }
+function HP_Agent_GetFreeSocketObjHold(pAgent: HP_Agent): LongInt; stdcall; external HPSocketDLL;
+{TODO 获取内存块缓存池回收阀值 */ }
+function HP_Agent_GetFreeBufferObjHold(pAgent: HP_Agent): LongInt; stdcall; external HPSocketDLL;
+{TODO 获取工作线程数量 */ }
+function HP_Agent_GetWorkerThreadCount(pAgent: HP_Agent): LongInt; stdcall; external HPSocketDLL;
+{TODO 检测是否标记静默时间 */ }
+function HP_Agent_IsMarkSilence(pAgent: HP_Agent): BOOL; stdcall; external HPSocketDLL;
+
+{ ******************************* TCP Agent 操作方法 ******************************* }
+
+{TODO
+ * 名称:发送小文件
+ * 描述:向指定连接发送 4096 KB 以下的小文件
+ *
+ * 参数: dwConnID -- 连接 ID
+ * lpszFileName -- 文件路径
+ * pHead -- 头部附加数据
+ * pTail -- 尾部附加数据
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败,可通过 Windows API 函数 ::GetLastError() 获取 Windows 错误代码
+ */ }
+function HP_TcpAgent_SendSmallFile(pAgent: HP_Agent; dwConnID: HP_CONNID; lpszFileName: PWideChar; const pHead: LPWSABUF; const pTail: LPWSABUF): BOOL;
+stdcall; external HPSocketDLL;
+
+{ ***************************** TCP Agent 属性访问方法 *****************************/ }
+
+{ TODO 设置是否启用地址重用机制(默认:不启用) */ }
+procedure HP_TcpAgent_SetReuseAddress(pAgent: HP_TcpAgent; bReuseAddress: BOOL); stdcall; external HPSocketDLL;
+{ TODO 检测是否启用地址重用机制 */ }
+function HP_TcpAgent_IsReuseAddress(pAgent: HP_TcpAgent): BOOL; stdcall; external HPSocketDLL;
+
+{ TODO 设置通信数据缓冲区大小(根据平均通信数据包大小调整设置,通常设置为 1024 的倍数) */ }
+procedure HP_TcpAgent_SetSocketBufferSize(pAgent: HP_TcpAgent; dwSocketBufferSize: LongInt); stdcall; external HPSocketDLL;
+{ TODO 设置心跳包间隔(毫秒,0 则不发送心跳包) */ }
+procedure HP_TcpAgent_SetKeepAliveTime(pAgent: HP_TcpAgent; dwKeepAliveTime: LongInt); stdcall; external HPSocketDLL;
+{ TODO 设置心跳确认包检测间隔(毫秒,0 不发送心跳包,如果超过若干次 [默认:WinXP 5 次, Win7 10 次] 检测不到心跳确认包则认为已断线) */ }
+procedure HP_TcpAgent_SetKeepAliveInterval(pAgent: HP_TcpAgent; dwKeepAliveInterval: LongInt); stdcall; external HPSocketDLL;
+
+{ TODO 获取通信数据缓冲区大小 */ }
+function HP_TcpAgent_GetSocketBufferSize(pAgent: HP_TcpAgent): LongInt; stdcall; external HPSocketDLL;
+{ TODO 获取心跳检查次数 */ }
+function HP_TcpAgent_GetKeepAliveTime(pAgent: HP_TcpAgent): LongInt; stdcall; external HPSocketDLL;
+{ TODO 获取心跳检查间隔 */ }
+function HP_TcpAgent_GetKeepAliveInterval(pAgent: HP_TcpAgent): LongInt; stdcall; external HPSocketDLL;
+
+
+{ /***************************** Client 组件操作方法 *****************************/ }
+
+{ TODO
+ * 名称:启动通信组件
+ * 描述:启动客户端通信组件并连接服务端,启动完成后可开始收发数据
+ *
+ * 参数: pszRemoteAddress -- 服务端地址
+ * usPort -- 服务端端口
+ * bAsyncConnect -- 是否采用异步 Connect
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败,可通过 GetLastError() 获取错误代码
+ */ }
+function HP_Client_Start(pClient: HP_Client; pszRemoteAddress: PWideChar; usPort: Word; bAsyncConnect: BOOL): BOOL;
+stdcall; external HPSocketDLL;
+
+{ TODO
+ * 名称:关闭通信组件
+ * 描述:关闭客户端通信组件,关闭完成后断开与服务端的连接并释放所有资源
+ *
+ * 参数:
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败,可通过 GetLastError() 获取错误代码
+ */ }
+function HP_Client_Stop(pClient: HP_Client): BOOL; stdcall; external HPSocketDLL;
+
+{ TODO
+ * 名称:发送数据
+ * 描述:向服务端发送数据
+ *
+ * 参数: pBuffer -- 发送缓冲区
+ * iLength -- 发送缓冲区长度
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败,可通过 Windows API 函数 ::GetLastError() 获取 Windows 错误代码
+ */ }
+function HP_Client_Send(pClient: HP_Client; const pBuffer: Pointer; iLength: Integer): BOOL; stdcall; external HPSocketDLL;
+
+{ TODO
+ * 名称:发送数据
+ * 描述:向服务端发送数据
+ *
+ * 参数: pBuffer -- 发送缓冲区
+ * iLength -- 发送缓冲区长度
+ * iOffset -- 发送缓冲区指针偏移量
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败,可通过 Windows API 函数 ::GetLastError() 获取 Windows 错误代码
+ */ }
+function HP_Client_SendPart(pClient: HP_Client; const pBuffer: Pointer; iLength: Integer; iOffset: Integer): BOOL;
+stdcall; external HPSocketDLL;
+
+{ TODO
+ * 名称:发送多组数据
+ * 描述:向服务端发送多组数据
+ * TCP - 顺序发送所有数据包
+ * UDP - 把所有数据包组合成一个数据包发送(数据包的总长度不能大于设置的 UDP 包最大长度)
+ *
+ * 参数: pBuffers -- 发送缓冲区数组
+ * iCount -- 发送缓冲区数目
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败,可通过 Windows API 函数 ::GetLastError() 获取 Windows 错误代码
+ */ }
+function HP_Client_SendPackets(pClient: HP_Client; const pBuffers: WSABUFArray; iCount: Integer): BOOL; stdcall; external HPSocketDLL;
+
+{ /******************************************************************************/
+ /***************************** Client 属性访问方法 *****************************/ }
+
+{ TODO 设置连接的附加数据 */ }
+procedure HP_Client_SetExtra(pClient: HP_Client; pExtra: Pointer); stdcall; external HPSocketDLL;
+{ TODO 获取连接的附加数据 */ }
+function HP_Client_GetExtra(pClient: HP_Client): Pointer; stdcall; external HPSocketDLL;
+
+{ TODO 检查通信组件是否已启动 */ }
+function HP_Client_HasStarted(pClient: HP_Client): BOOL; stdcall; external HPSocketDLL;
+{ TODO 查看通信组件当前状态 */ }
+function HP_Client_GetState(pClient: HP_Client): En_HP_ServiceState; stdcall; external HPSocketDLL;
+{ TODO 获取最近一次失败操作的错误代码 */ }
+function HP_Client_GetLastError(pClient: HP_Client): En_HP_SocketError; stdcall; external HPSocketDLL;
+{ TODO 获取最近一次失败操作的错误描述 */ }
+function HP_Client_GetLastErrorDesc(pClient: HP_Client): PWideChar; stdcall; external HPSocketDLL;
+{ TODO 获取该组件对象的连接 ID */ }
+function HP_Client_GetConnectionID(pClient: HP_Client): HP_CONNID; stdcall; external HPSocketDLL;
+{ TODO 获取 Client Socket 的地址信息 */ }
+function HP_Client_GetLocalAddress(pClient: HP_Client; lpszAddress: PWideChar; piAddressLen: PInteger; pusPort: PUShort): BOOL;
+stdcall; external HPSocketDLL;
+{ TODO 获取连接中未发出数据的长度 */ }
+function HP_Client_GetPendingDataLength(pClient: HP_Client; piPending: PInteger): BOOL; stdcall; external HPSocketDLL;
+{ TODO 设置内存块缓存池大小(通常设置为 -> PUSH 模型:5 - 10;PULL 模型:10 - 20 ) */ }
+procedure HP_Client_SetFreeBufferPoolSize(pClient: HP_Client; dwFreeBufferPoolSize: LongInt); stdcall; external HPSocketDLL;
+{ TODO 设置内存块缓存池回收阀值(通常设置为内存块缓存池大小的 3 倍) */ }
+procedure HP_Client_SetFreeBufferPoolHold(pClient: HP_Client; dwFreeBufferPoolHold: LongInt); stdcall; external HPSocketDLL;
+{ TODO 获取内存块缓存池大小 */ }
+function HP_Client_GetFreeBufferPoolSize(pClient: HP_Client): LongInt; stdcall; external HPSocketDLL;
+{ TODO 获取内存块缓存池回收阀值 */ }
+function HP_Client_GetFreeBufferPoolHold(pClient: HP_Client): LongInt; stdcall; external HPSocketDLL;
+
+{ /**********************************************************************************/
+ /******************************* TCP Client 操作方法 *******************************/ }
+
+{ /*
+ * 名称:发送小文件
+ * 描述:向服务端发送 4096 KB 以下的小文件
+ *
+ * 参数: lpszFileName -- 文件路径
+ * pHead -- 头部附加数据
+ * pTail -- 尾部附加数据
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败,可通过 Windows API 函数 ::GetLastError() 获取 Windows 错误代码
+ */ }
+function HP_TcpClient_SendSmallFile(pClient: HP_Client; lpszFileName: PWideChar; const pHead: LPWSABUF; const pTail: LPWSABUF): BOOL;
+stdcall; external HPSocketDLL;
+
+{ /**********************************************************************************/
+ /***************************** TCP Client 属性访问方法 *****************************/ }
+
+{ TODO 设置通信数据缓冲区大小(根据平均通信数据包大小调整设置,通常设置为:(N * 1024) - sizeof(TBufferObj)) */ }
+procedure HP_TcpClient_SetSocketBufferSize(pClient: HP_TcpClient; dwSocketBufferSize: LongInt); stdcall; external HPSocketDLL;
+{ TODO 设置心跳包间隔(毫秒,0 则不发送心跳包) */ }
+procedure HP_TcpClient_SetKeepAliveTime(pClient: HP_TcpClient; dwKeepAliveTime: LongInt); stdcall; external HPSocketDLL;
+{ TODO 设置心跳确认包检测间隔(毫秒,0 不发送心跳包,如果超过若干次 [默认:WinXP 5 次, Win7 10 次] 检测不到心跳确认包则认为已断线) */ }
+procedure HP_TcpClient_SetKeepAliveInterval(pClient: HP_TcpClient; dwKeepAliveInterval: LongInt); stdcall; external HPSocketDLL;
+
+{ TODO 获取通信数据缓冲区大小 */ }
+function HP_TcpClient_GetSocketBufferSize(pClient: HP_TcpClient): LongInt; stdcall; external HPSocketDLL;
+{ TODO 获取心跳检查次数 */ }
+function HP_TcpClient_GetKeepAliveTime(pClient: HP_TcpClient): LongInt; stdcall; external HPSocketDLL;
+{ TODO 获取心跳检查间隔 */ }
+function HP_TcpClient_GetKeepAliveInterval(pClient: HP_TcpClient): LongInt; stdcall; external HPSocketDLL;
+
+{***************************** UDP Client 属性访问方法 *****************************/ }
+
+{ TODO 设置数据报文最大长度(建议在局域网环境下不超过 1472 字节,在广域网环境下不超过 548 字节) */ }
+procedure HP_UdpClient_SetMaxDatagramSize(pClient: HP_UdpClient; dwMaxDatagramSize: LongInt); stdcall; external HPSocketDLL;
+{ TODO 获取数据报文最大长度 */ }
+function HP_UdpClient_GetMaxDatagramSize(pClient: HP_UdpClient): LongInt; stdcall; external HPSocketDLL;
+
+{ TODO 设置监测包尝试次数(0 则不发送监测跳包,如果超过最大尝试次数则认为已断线) */ }
+procedure HP_UdpClient_SetDetectAttempts(pClient: HP_UdpClient; dwDetectAttempts: LongInt); stdcall; external HPSocketDLL;
+{ TODO 设置监测包发送间隔(秒,0 不发送监测包) */ }
+procedure HP_UdpClient_SetDetectInterval(pClient: HP_UdpClient; dwDetectInterval: LongInt); stdcall; external HPSocketDLL;
+{ TODO 获取心跳检查次数 */ }
+function HP_UdpClient_GetDetectAttempts(pClient: HP_UdpClient): LongInt; stdcall; external HPSocketDLL;
+{ TODO 获取心跳检查间隔 */ }
+function HP_UdpClient_GetDetectInterval(pClient: HP_UdpClient): LongInt; stdcall; external HPSocketDLL;
+
+{ ***************************** UDP Cast 属性访问方法 *****************************/ }
+{TODO 设置数据报文最大长度(建议在局域网环境下不超过 1472 字节,在广域网环境下不超过 548 字节) */}
+procedure HP_UdpCast_SetMaxDatagramSize(pCast: HP_UdpCast; dwMaxDatagramSize: LongInt); stdcall; external HPSocketdll;
+{TODO 获取数据报文最大长度 */ }
+function HP_UdpCast_GetMaxDatagramSize(pCast: HP_UdpCast): LongInt; stdcall; external HPSocketdll;
+{TODO 获取当前数据报的远程地址信息(通常在 OnReceive 事件中调用) */ }
+function HP_UdpCast_GetRemoteAddress(pCast: HP_UdpCast; lpszAddress: PWideChar; piAddresslen: PInteger; pusPort: PUShort): BOOL;
+stdcall; external HPSocketDLL;
+{TODO 设置绑定地址 */ }
+procedure HP_UdpCast_SetBindAdddress(pCast: HP_UdpCast; pszBindAddress: PWideChar); stdcall; external HPSocketDll;
+{TODO 获取绑定地址 */ }
+function HP_UdpCast_GetBindAdddress(pCast: HP_UdpCast): WideChar; stdcall external HPSocketDll;
+{TODO 设置是否启用地址重用机制(默认:不启用) */ }
+procedure HP_UdpCast_SetReuseAddress(pCast: HP_UdpCast; bReuseAddress: BOOL); stdcall; external HPSocketDll;
+{TODO 检测是否启用地址重用机制 */ }
+function HP_UdpCast_IsReuseAddress(pCast: HP_UdpCast): BOOL; stdcall; external HPSocketDll;
+{TODO 设置传播模式(组播或广播) */ }
+procedure HP_UdpCast_SetCastMode(pCast: HP_UdpCast; enCastMode: En_HP_CastMode); stdcall; external HPSocketDll;
+{TODO 获取传播模式 */ }
+function HP_UdpCast_GetCastMode(pCast: HP_UdpCast): En_HP_CastMode; stdcall; external HPSocketDll;
+{TODO 设置组播报文的 TTL(0 - 255) */ }
+procedure HP_UdpCast_SetMultiCastTtl(PChar: HP_UdpCast; iMCTtl: LongInt); stdcall; external HPSocketDll;
+{TODO 获取组播报文的 TTL */ }
+function HP_UdpCast_GetMultiCastTtl(PChar: HP_UdpCast): LongInt; stdcall; external HPSocketDll;
+{TODO 设置是否启用组播环路(TRUE or FALSE) */ }
+procedure HP_UdpCast_SetMultiCastLoop(PChar: HP_UdpCast; bMCLoop: BOOL); stdcall; external HPSocketDll;
+{TODO 检测是否启用组播环路 */ }
+function HP_UdpCast_IsMultiCastLoop(PChar: HP_UdpCast): BOOL; stdcall; external HPSocketDll;
+
+{ **************************** TCP Pull Server 组件操作方法 *****************************/ }
+
+{TODO
+ * 名称:抓取数据
+ * 描述:用户通过该方法从 Socket 组件中抓取数据
+ *
+ * 参数: dwConnID -- 连接 ID
+ * pBuffer -- 数据抓取缓冲区
+ * iLength -- 抓取数据长度
+ * 返回值: En_HP_FetchResult
+ */ }
+function HP_TcpPullServer_Fetch(pServer: HP_TcpPullServer; dwConnID: HP_CONNID; pData: Pointer; iLength: Integer): En_HP_FetchResult;
+stdcall; external HPSocketDLL;
+
+{ TODO
+* 名称:窥探数据(不会移除缓冲区数据)
+* 描述:用户通过该方法从 Socket 组件中窥探数据
+*
+* 参数: dwConnID -- 连接 ID
+* pData -- 窥探缓冲区
+* iLength -- 窥探数据长度
+* 返回值: En_HP_FetchResult
+*/ }
+function HP_TcpPullServer_Peek(pServer: HP_TcpPullServer; dwConnID: HP_CONNID; pData: Pointer; iLength: Integer): En_HP_FetchResult;
+stdcall; external HPSocketDLL;
+
+{ /***************************************************************************************/
+ /***************************** TCP Pull Server 属性访问方法 *****************************/ }
+
+{ /***************************************************************************************/
+ /***************************** TCP Pull Agent 组件操作方法 *****************************/ }
+
+{ TODO
+ * 名称:抓取数据
+ * 描述:用户通过该方法从 Socket 组件中抓取数据
+ *
+ * 参数: dwConnID -- 连接 ID
+ * pBuffer -- 数据抓取缓冲区
+ * iLength -- 抓取数据长度
+ * 返回值: En_HP_FetchResult
+ */ }
+function HP_TcpPullAgent_Fetch(pAgent: HP_TcpPullAgent; dwConnID: HP_CONNID; pBuffer: Pointer; iLength: Integer): En_HP_FetchResult;
+stdcall; external HPSocketDLL;
+
+{TODO* 名称:窥探数据(不会移除缓冲区数据)
+* 描述:用户通过该方法从 Socket 组件中窥探数据
+*
+* 参数: dwConnID -- 连接 ID
+* pData -- 窥探缓冲区
+* iLength -- 窥探数据长度
+* 返回值: En_HP_FetchResult }
+function HP_TcpPullAgent_Peek(pAgent: HP_TcpPullAgent; dwConnID: HP_CONNID; pBuffer: Pointer; iLength: Integer): En_HP_FetchResult;
+stdcall; external HPSocketDLL;
+
+{ ***************************** TCP Pull Client 组件操作方法 *****************************/ }
+{ TODO
+* 名称:抓取数据
+* 描述:用户通过该方法从 Socket 组件中抓取数据
+*
+* 参数: dwConnID -- 连接 ID
+* pData -- 抓取缓冲区
+* iLength -- 抓取数据长度
+* 返回值: En_HP_FetchResult
+ */ }
+function HP_TcpPullClient_Fetch(pClient: HP_TcpPullClient; pData: Pointer; iLength: Integer): En_HP_FetchResult;
+stdcall; external HPSocketDLL;
+
+{ TODO
+* 名称:窥探数据(不会移除缓冲区数据)
+* 描述:用户通过该方法从 Socket 组件中窥探数据
+*
+* 参数: dwConnID -- 连接 ID
+* pData -- 窥探缓冲区
+* iLength -- 窥探数据长度
+* 返回值: En_HP_FetchResult
+*/ }
+function HP_TcpPullClient_Peek(pClient: HP_TcpPullClient; pData: Pointer; iLength: Integer): En_HP_FetchResult;
+stdcall; external HPSocketDLL;
+{/***************************** TCP Pack Server 属性访问方法 *****************************/ }
+
+{TODO/* 设置数据包最大长度(有效数据包最大长度不能超过 524287/0x7FFFF 字节,默认:262144/0x40000) */}
+procedure HP_TcpPackServer_SetMaxPackSize(pServer: HP_TcpPackServer ; dwMaxPackSize: LongWord); stdcall; external HPSocketDLL;
+{TODO 设置包头标识(有效包头标识取值范围 0 ~ 8191/0x1FFF,当包头标识为 0 时不校验包头,默认:0) */ }
+procedure HP_TcpPackServer_SetPackHeaderFlag(pServer: HP_TcpPackServer ; usPackHeaderFlag: Word); stdcall; external HPSocketDLL;
+
+{TODO 获取数据包最大长度 */ }
+function HP_TcpPackServer_GetMaxPackSize(pServer: HP_TcpPackServer): LongWord; stdcall; external HPSocketDLL;
+{TODO 获取包头标识 */ }
+function HP_TcpPackServer_GetPackHeaderFlag(pServer: HP_TcpPackServer): Word; stdcall; external HPSocketDLL;
+
+//***************************** TCP Pack Agent 属性访问方法 *****************************/
+
+{TODO 设置数据包最大长度(有效数据包最大长度不能超过 524287/0x7FFFF 字节,默认:262144/0x40000) */}
+procedure HP_TcpPackAgent_SetMaxPackSize(pAgent: HP_TcpPackAgent; dwMaxPackSize: LongWord); stdcall; external HPSocketDLL;
+{TODO 设置包头标识(有效包头标识取值范围 0 ~ 8191/0x1FFF,当包头标识为 0 时不校验包头,默认:0) */ }
+procedure HP_TcpPackAgent_SetPackHeaderFlag(pAgent: HP_TcpPackAgent; usPackHeaderFlag: Word); stdcall; external HPSocketDLL;
+
+{TODO 获取数据包最大长度 */ }
+function HP_TcpPackAgent_GetMaxPackSize(pAgent: HP_TcpPackAgent): LongWord; stdcall; external HPSocketDLL;
+{TODO 获取包头标识 */ }
+function HP_TcpPackAgent_GetPackHeaderFlag(pAgent: HP_TcpPackAgent): Word; stdcall; external HPSocketDLL;
+
+//***************************** TCP Pack Client 属性访问方法 *****************************/
+
+{TODO 设置数据包最大长度(有效数据包最大长度不能超过 524287/0x7FFFF 字节,默认:262144/0x40000) */ }
+procedure HP_TcpPackClient_SetMaxPackSize(pClient: HP_TcpPackAgent; dwMaxPackSize: LongWord); stdcall; external HPSocketDLL;
+{TODO 设置包头标识(有效包头标识取值范围 0 ~ 8191/0x1FFF,当包头标识为 0 时不校验包头,默认:0) */ }
+procedure HP_TcpPackClient_SetPackHeaderFlag(pClient: HP_TcpPackAgent; usPackHeaderFlag: Word); stdcall; external HPSocketDLL;
+
+{TODO 获取数据包最大长度 */ }
+function HP_TcpPackClient_GetMaxPackSize(pClient: HP_TcpPackAgent): LongWord; stdcall; external HPSocketDLL;
+{TODO 获取包头标识 */ }
+function HP_TcpPackClient_GetPackHeaderFlag(pClient: HP_TcpPackAgent): Word; stdcall; external HPSocketDLL;
+
+{ ************************************** 其它方法 ***************************************/ }
+{ /* 获取错误描述文本 */ }
+function HP_GetSocketErrorDesc(enCode: En_HP_SocketError): PWideChar; stdcall; external HPSocketDLL;
+{ /* 调用系统的 ::GetLastError() 方法获取系统错误代码 */ }
+function SYS_GetLastError(): LongInt; stdcall; external HPSocketDLL;
+// 调用系统的 ::WSAGetLastError() 方法获取通信错误代码
+function SYS_WSAGetLastError(): Integer; stdcall; external HPSocketDLL;
+// 调用系统的 setsockopt()
+function SYS_SetSocketOption(sock: SOCKET; level: Integer; name: Integer; val: pointer; len: Integer): Integer; stdcall; external HPSocketDLL;
+// 调用系统的 getsockopt()
+function SYS_GetSocketOption(sock: SOCKET; level: Integer; name: Integer; val: Pointer; len: PInteger): Integer; stdcall; external HPSocketDLL;
+// 调用系统的 ioctlsocket()
+function SYS_IoctlSocket(sock: SOCKET; cmd: LongInt; arg: PULONG): Integer; stdcall; external HPSocketDLL;
+// 调用系统的 ::WSAIoctl()
+function SYS_WSAIoctl(sock: SOCKET; dwIoControlCode: LongInt; lpvInBuffer: pointer; cbInBuffer: LongInt; lpvOutBuffer: pointer; cbOutBuffer: LongInt; lpcbBytesReturned: LPDWORD): Integer; stdcall; external HPSocketDLL;
+
+
+implementation
+
+
+initialization
+ IsMultiThread := True;
+end.
+
+
\ No newline at end of file
diff --git a/HP-Socket/Demo/Other Languages Demos/Delphi/Client/Project1.cfg b/HP-Socket/Demo/Other Languages Demos/Delphi/Client/Project1.cfg
new file mode 100644
index 000000000..a03d9e94d
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/Delphi/Client/Project1.cfg
@@ -0,0 +1,35 @@
+-$A8
+-$B-
+-$C+
+-$D+
+-$E-
+-$F-
+-$G+
+-$H+
+-$I+
+-$J-
+-$K-
+-$L+
+-$M-
+-$N+
+-$O+
+-$P+
+-$Q-
+-$R-
+-$S-
+-$T-
+-$U-
+-$V+
+-$W-
+-$X+
+-$YD
+-$Z1
+-cg
+-AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
+-H+
+-W+
+-M
+-$M16384,1048576
+-K$00400000
+-LE"e:\编程工具\delphi7.3\delphi7\Projects\Bpl"
+-LN"e:\编程工具\delphi7.3\delphi7\Projects\Bpl"
diff --git a/HP-Socket/Demo/Other Languages Demos/Delphi/Client/Project1.dof b/HP-Socket/Demo/Other Languages Demos/Delphi/Client/Project1.dof
new file mode 100644
index 000000000..6f3b1c900
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/Delphi/Client/Project1.dof
@@ -0,0 +1,121 @@
+[FileVersion]
+Version=7.0
+[Compiler]
+A=8
+B=0
+C=1
+D=1
+E=0
+F=0
+G=1
+H=1
+I=1
+J=0
+K=0
+L=1
+M=0
+N=1
+O=1
+P=1
+Q=0
+R=0
+S=0
+T=0
+U=0
+V=1
+W=0
+X=1
+Y=1
+Z=1
+ShowHints=1
+ShowWarnings=1
+UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
+NamespacePrefix=
+SymbolDeprecated=1
+SymbolLibrary=1
+SymbolPlatform=1
+UnitLibrary=1
+UnitPlatform=1
+UnitDeprecated=1
+HResultCompat=1
+HidingMember=1
+HiddenVirtual=1
+Garbage=1
+BoundsError=1
+ZeroNilCompat=1
+StringConstTruncated=1
+ForLoopVarVarPar=1
+TypedConstVarPar=1
+AsgToTypedConst=1
+CaseLabelRange=1
+ForVariable=1
+ConstructingAbstract=1
+ComparisonFalse=1
+ComparisonTrue=1
+ComparingSignedUnsigned=1
+CombiningSignedUnsigned=1
+UnsupportedConstruct=1
+FileOpen=1
+FileOpenUnitSrc=1
+BadGlobalSymbol=1
+DuplicateConstructorDestructor=1
+InvalidDirective=1
+PackageNoLink=1
+PackageThreadVar=1
+ImplicitImport=1
+HPPEMITIgnored=1
+NoRetVal=1
+UseBeforeDef=1
+ForLoopVarUndef=1
+UnitNameMismatch=1
+NoCFGFileFound=1
+MessageDirective=1
+ImplicitVariants=1
+UnicodeToLocale=1
+LocaleToUnicode=1
+ImagebaseMultiple=1
+SuspiciousTypecast=1
+PrivatePropAccessor=1
+UnsafeType=1
+UnsafeCode=1
+UnsafeCast=1
+[Linker]
+MapFile=0
+OutputObjs=0
+ConsoleApp=1
+DebugInfo=0
+RemoteSymbols=0
+MinStackSize=16384
+MaxStackSize=1048576
+ImageBase=4194304
+ExeDescription=
+[Directories]
+OutputDir=
+UnitOutputDir=
+PackageDLLOutputDir=
+PackageDCPOutputDir=
+SearchPath=
+Packages=
+Conditionals=
+DebugSourceDirs=
+UsePackages=0
+[Parameters]
+RunParams=
+HostApplication=
+Launcher=
+UseLauncher=0
+DebugCWD=
+[Version Info]
+IncludeVerInfo=0
+AutoIncBuild=0
+MajorVer=1
+MinorVer=0
+Release=0
+Build=0
+Debug=0
+PreRelease=0
+Special=0
+Private=0
+DLL=0
+Locale=2052
+CodePage=936
diff --git a/HP-Socket/Demo/Other Languages Demos/Delphi/Client/Project1.dpr b/HP-Socket/Demo/Other Languages Demos/Delphi/Client/Project1.dpr
new file mode 100644
index 000000000..95d84c1f7
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/Delphi/Client/Project1.dpr
@@ -0,0 +1,13 @@
+program Project1;
+
+uses
+ Forms,
+ Unit1 in 'Unit1.pas' {Form1},
+ HPSocketSDKUnit in 'HPSocketSDKUnit.pas';
+{$R *.res}
+
+begin
+ Application.Initialize;
+ Application.CreateForm(TForm1, Form1);
+ Application.Run;
+end.
diff --git a/HP-Socket/Demo/Other Languages Demos/Delphi/Client/Project1.exe b/HP-Socket/Demo/Other Languages Demos/Delphi/Client/Project1.exe
new file mode 100644
index 000000000..feabe7b07
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/Delphi/Client/Project1.exe differ
diff --git a/HP-Socket/Demo/Other Languages Demos/Delphi/Client/Project1.res b/HP-Socket/Demo/Other Languages Demos/Delphi/Client/Project1.res
new file mode 100644
index 000000000..e84b2e499
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/Delphi/Client/Project1.res differ
diff --git a/HP-Socket/Demo/Other Languages Demos/Delphi/Client/Unit1.dcu b/HP-Socket/Demo/Other Languages Demos/Delphi/Client/Unit1.dcu
new file mode 100644
index 000000000..8a77927c1
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/Delphi/Client/Unit1.dcu differ
diff --git a/HP-Socket/Demo/Other Languages Demos/Delphi/Client/Unit1.ddp b/HP-Socket/Demo/Other Languages Demos/Delphi/Client/Unit1.ddp
new file mode 100644
index 000000000..4370276c1
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/Delphi/Client/Unit1.ddp differ
diff --git a/HP-Socket/Demo/Other Languages Demos/Delphi/Client/Unit1.dfm b/HP-Socket/Demo/Other Languages Demos/Delphi/Client/Unit1.dfm
new file mode 100644
index 000000000..a88fdf187
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/Delphi/Client/Unit1.dfm
@@ -0,0 +1,108 @@
+object Form1: TForm1
+ Left = 457
+ Top = 131
+ Width = 522
+ Height = 393
+ Caption = 'Delphi HP Client'
+ Color = clBtnFace
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ OldCreateOrder = False
+ OnCreate = FormCreate
+ PixelsPerInch = 96
+ TextHeight = 13
+ object Label1: TLabel
+ Left = 24
+ Top = 18
+ Width = 52
+ Height = 13
+ Caption = #36830#25509' I P'#65306
+ end
+ object Label2: TLabel
+ Left = 16
+ Top = 49
+ Width = 60
+ Height = 13
+ Caption = #36830#25509#31471#21475#65306
+ end
+ object Label3: TLabel
+ Left = 208
+ Top = 15
+ Width = 60
+ Height = 13
+ Caption = #36830#25509#29366#24577#65306
+ end
+ object Label4: TLabel
+ Left = 269
+ Top = 15
+ Width = 36
+ Height = 13
+ Caption = #26410#36830#25509
+ end
+ object Edit1: TEdit
+ Left = 76
+ Top = 15
+ Width = 121
+ Height = 21
+ TabOrder = 0
+ Text = '127.0.0.1'
+ end
+ object Edit2: TEdit
+ Left = 76
+ Top = 46
+ Width = 121
+ Height = 21
+ TabOrder = 1
+ Text = '8808'
+ end
+ object Button1: TButton
+ Left = 360
+ Top = 8
+ Width = 75
+ Height = 25
+ Caption = #21551#21160#36830#25509
+ TabOrder = 2
+ OnClick = Button1Click
+ end
+ object Button2: TButton
+ Left = 360
+ Top = 40
+ Width = 75
+ Height = 25
+ Caption = #20851#38381#36830#25509
+ TabOrder = 3
+ OnClick = Button2Click
+ end
+ object ListBox1: TListBox
+ Left = 8
+ Top = 107
+ Width = 489
+ Height = 238
+ Enabled = False
+ IntegralHeight = True
+ ItemHeight = 13
+ ParentShowHint = False
+ ShowHint = False
+ TabOrder = 4
+ end
+ object Edit3: TEdit
+ Left = 8
+ Top = 80
+ Width = 337
+ Height = 21
+ TabOrder = 5
+ Text = #36825#26159#19968#27573#27979#35797#25968#25454'~~~'
+ end
+ object Button3: TButton
+ Left = 360
+ Top = 76
+ Width = 75
+ Height = 25
+ Caption = #21457#36865#25968#25454
+ TabOrder = 6
+ OnClick = Button3Click
+ end
+end
diff --git a/HP-Socket/Demo/Other Languages Demos/Delphi/Client/Unit1.pas b/HP-Socket/Demo/Other Languages Demos/Delphi/Client/Unit1.pas
new file mode 100644
index 000000000..7420a9a62
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/Delphi/Client/Unit1.pas
@@ -0,0 +1,141 @@
+unit Unit1;
+
+interface
+
+uses
+ Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
+ Dialogs, StdCtrls, HPSocketSDKUnit;
+
+type
+ TForm1 = class(TForm)
+ Label1: TLabel;
+ Label2: TLabel;
+ Edit1: TEdit;
+ Label3: TLabel;
+ Label4: TLabel;
+ Edit2: TEdit;
+ Button1: TButton;
+ Button2: TButton;
+ ListBox1: TListBox;
+ Edit3: TEdit;
+ Button3: TButton;
+ procedure FormCreate(Sender: TObject);
+ procedure Button1Click(Sender: TObject);
+ procedure Button2Click(Sender: TObject);
+ procedure Button3Click(Sender: TObject);
+ private
+ { Private declarations }
+ public
+ { Public declarations }
+ end;
+
+var
+ Form1: TForm1;
+ PClient: Integer;
+ PListener: Integer;
+implementation
+
+{$R *.dfm}
+procedure AddMsg(str: string);
+begin
+ Form1.ListBox1.Items.add('==> '+str);
+end;
+
+function DoStrToWideChar(s: string): PWideChar;
+begin
+Result := PWideChar(WideString(s));
+end;
+
+function OnPrepareConnect(pClient: HP_Client; SOCKET: Pointer): En_HP_HandleResult; stdcall;
+begin
+ AddMsg('准备连接 -> ' + inttostr(pClient));
+ Result := HP_HR_OK;
+end;
+
+function OnConnect(pClient: HP_Client): En_HP_HandleResult; stdcall;
+begin
+ AddMsg('连接成功 -> ' + inttostr(pClient));
+ Result := HP_HR_OK;
+end;
+
+function OnSend(pClient: HP_Client; const pData: Pointer; iLength: Integer): En_HP_HandleResult; stdcall;
+begin
+ AddMsg('发送数据 -> ' + inttostr(pClient));
+ Result := HP_HR_OK;
+end;
+
+function OnReceive(pClient: HP_Client; const pData: Pointer; iLength: Integer): En_HP_HandleResult; stdcall;
+begin
+ AddMsg('收到数据 -> ' + inttostr(iLength) + ' byte');
+ Result := HP_HR_OK;
+end;
+
+function OnCloseCon(pClient: HP_Client; enOperation: En_HP_SocketOperation; iLength: Integer): En_HP_HandleResult; stdcall;
+begin
+ AddMsg('连接关闭 -> ' + inttostr(pClient) );
+ Result := HP_HR_OK;
+end;
+
+
+
+procedure TForm1.FormCreate(Sender: TObject);
+begin
+ //创建监听器
+ PListener:= Create_HP_TcpClientListener();
+
+ //创建服务
+ PClient:= Create_HP_TcpClient(PListener);
+
+ //设置回调函数
+ HP_Set_FN_Client_OnPrepareConnect(PListener, OnPrepareConnect);
+ HP_Set_FN_Client_OnConnect(PListener, OnConnect);
+ HP_Set_FN_Client_OnSend(PListener, OnSend);
+ HP_Set_FN_Client_OnReceive(PListener, OnReceive);
+ HP_Set_FN_Client_OnClose(PListener,OnCloseCon);
+
+ AddMsg('客户端连接创建成功 -> ');
+end;
+
+procedure TForm1.Button1Click(Sender: TObject);
+var
+ Ip:PWideChar;
+ Port:Word;
+begin
+ ip := DoStrToWideChar(Edit1.Text);
+ port := StrToInt(Edit2.Text);
+
+ if HP_Client_Start(PClient, ip, port, False) then
+ begin
+ AddMsg(Format('连接启动成功 -> (%s:%d)', [ip, port]));
+ Label4.Caption:= '已连接'
+ end
+ else
+ begin
+ AddMsg('连接启动失败 -> %s(%d)');
+ end;
+end;
+
+procedure TForm1.Button2Click(Sender: TObject);
+begin
+ if HP_Client_Stop(PClient) then
+ begin
+ AddMsg('连接关闭成功');
+ Label4.Caption:= '未连接'
+ end
+ else
+ AddMsg('连接关闭失败');
+
+end;
+
+procedure TForm1.Button3Click(Sender: TObject);
+var
+ s: string;
+ len: Integer;
+begin
+ s:= Edit3.Text;
+ len:= Length(s);
+ HP_Client_Send(PClient, @s, len) ;
+end;
+
+end.
+
\ No newline at end of file
diff --git a/HP-Socket/Demo/Other Languages Demos/Delphi/HPSocketSDKUnit.pas b/HP-Socket/Demo/Other Languages Demos/Delphi/HPSocketSDKUnit.pas
new file mode 100644
index 000000000..8c26b6f0c
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/Delphi/HPSocketSDKUnit.pas
@@ -0,0 +1,1147 @@
+// _ooOoo_
+
// o8888888o
+// 88" . "88
+// (| -_- |)
+// O\ = /O
+// ____/`---'\____
+// . ' \\| |// `.
+// / \\||| : |||// \
+// / _||||| -:- |||||- \
+// | | \\\ - /// | |
+// | \_| ''\---/'' | |
+// \ .-\__ `-` ___/-. /
+// ___`. .' /--.--\ `. . __
+// ."" '< `.___\_<|>_/___.' >'"".
+// | | : `- \`.;`\ _ /`;.`/ - ` : | |
+// \ \ `-. \_ __\ /__ _/ .-` / /
+// ======`-.____`-.___\_____/___.-`____.-'======
+// `=---='
+//
+// .............................................
+// 佛祖镇楼 BUG辟易
+// 佛曰:
+// 写字楼里写字间,写字间里程序员;
+// 程序人员写程序,又拿程序换酒钱。
+// 酒醒只在网上坐,酒醉还来网下眠;
+// 酒醉酒醒日复日,网上网下年复年。
+// 但愿老死电脑间,不愿鞠躬老板前;
+// 奔驰宝马贵者趣,公交自行程序员。
+// 别人笑我忒疯癫,我笑自己命太贱;
+// 不见满街漂亮妹,哪个归得程序员?
+
unit HPSocketSDKUnit;
+
+interface
+
+uses
+ Windows, SysUtils,DateUtils,StrUtils;
+
+const
+ HPSocketDLL = 'HPSocket4C_U.dll';
+
+type
+{$Z4}
+ SOCKET = Pointer;
+
+ WSABUF = Record
+ len: ULONG; { the length of the buffer }
+ buf: PChar; { the pointer to the buffer }
+ end { WSABUF };
+
+ PWSABUF = ^WSABUF;
+ LPWSABUF = PWSABUF;
+
+ WSABUFArray = array of WSABUF;
+
+ PInteger = ^Integer;
+ PUShort = ^Word;
+ { /************************************************************************
+ 名称:连接 ID 数据类型
+ 描述:定义连接 ID 的数据类型
+ ************************************************************************/ }
+ HP_CONNID = DWORD;
+ PHP_CONNID = ^HP_CONNID;
+ HP_CONNIDArray = array of HP_CONNID; { TODO : 这个数组变量用来获取所有连接id }
+ { /************************************************************************
+ 名称:定义 Socket 对象指针类型别名
+ 描述:把 Socket 对象指针定义为更直观的别名
+ ************************************************************************/ }
+ HP_Object = longint;
+
+ HP_Server = HP_Object;
+ HP_Agent = HP_Object;
+ HP_Client = HP_Object;
+ HP_TcpServer = HP_Object;
+ HP_HttpServer = HP_Object;
+ HP_TcpAgent = HP_Object;
+ HP_TcpClient = HP_Object;
+ HP_PullSocket = HP_Object;
+ HP_PullClient = HP_Object;
+ HP_TcpPullServer = HP_Object;
+ HP_TcpPullAgent = HP_Object;
+ HP_TcpPullClient = HP_Object;
+ HP_PackSocket = HP_Object;
+ HP_PackClient = HP_Object;
+ HP_TcpPackServer = HP_Object;
+ HP_TcpPackAgent = HP_Object;
+ HP_TcpPackClient = HP_Object;
+ HP_UdpServer = HP_Object;
+ HP_UdpClient = HP_Object;
+ HP_UdpCast = HP_Object;
+
+ HP_Listener = HP_Object;
+ HP_ServerListener = HP_Object;
+ HP_AgentListener = HP_Object;
+ HP_ClientListener = HP_Object;
+ HP_TcpServerListener = HP_Object;
+ HP_HttpServerListener = HP_Object;
+ HP_TcpAgentListener = HP_Object;
+ HP_TcpClientListener = HP_Object;
+ HP_PullSocketListener = HP_Object;
+ HP_PullClientListener = HP_Object;
+ HP_TcpPullServerListener = HP_Object;
+ HP_TcpPullAgentListener = HP_Object;
+ HP_TcpPullClientListener = HP_Object;
+ HP_UdpServerListener = HP_Object;
+ HP_UdpClientListener = HP_Object;
+ HP_UdpCastListener = HP_Object;
+
+ {******************************************** 公共类、接口 ********************************************/}
+
+ {TODO:/************************************************************************
+ 名称:通信组件服务状态
+ 描述:应用程序可以通过通信组件的 GetState() 方法获取组件当前服务状态
+ ************************************************************************ }
+ En_HP_ServiceState = (
+ HP_SS_STARTING = 0, // 正在启动
+ HP_SS_STARTED = 1, // 已经启动
+ HP_SS_STOPING = 2, // 正在停止
+ HP_SS_STOPED = 3 // 已经停止
+ );
+
+ { TODO:************************************************************************
+ 名称:Socket 操作类型
+ 描述:应用程序的 OnErrror() 事件中通过该参数标识是哪种操作导致的错误
+ ************************************************************************ }
+ En_HP_SocketOperation = (
+ HP_SO_UNKNOWN = 0, // Unknown
+ HP_SO_ACCEPT = 1, // Acccept
+ HP_SO_CONNECT = 2, // Connnect
+ HP_SO_SEND = 3, // Send
+ HP_SO_RECEIVE = 4, // Receive
+ HP_SO_CLOSE = 5 // Close
+ );
+
+ {TODO: ************************************************************************
+ 名称:事件通知处理结果
+ 描述:事件通知的返回值,不同的返回值会影响通信组件的后续行为
+ ************************************************************************ }
+ En_HP_HandleResult = (
+ HP_HR_OK = 0, // 成功处理
+ HP_HR_IGNORE = 1, // 忽略处理
+ HP_HR_ERROR = 2 // 错误处理
+ );
+
+ { TODO:/************************************************************************
+ 名称:数据抓取结果
+ 描述:数据抓取操作的返回值
+ ************************************************************************/ }
+ En_HP_FetchResult = (
+ HP_FR_OK = 0, // 成功
+ HP_FR_LENGTH_TOO_LONG = 1, // 抓取长度过大
+ HP_FR_DATA_NOT_FOUND = 2 // 找不到 ConnID 对应的数据
+ );
+
+ { TODO:/************************************************************************
+ 名称:数据发送策略
+ 描述:Server 组件和 Agent 组件的数据发送策略
+
+ * 打包模式(默认) :尽量把多个发送操作的数据组合在一起发送,增加传输效率
+ * 安全模式 :尽量把多个发送操作的数据组合在一起发送,并控制传输速度,避免缓冲区溢出
+ * 直接模式 :对每一个发送操作都直接投递,适用于负载不高但要求实时性较高的场合
+
+ ************************************************************************/ }
+ En_HP_SendPolicy = (
+ HP_SP_PACK = 0, // 打包模式(默认)
+ HP_SP_SAFE = 1, // 安全模式
+ HP_SP_DIRECT = 2 // 直接模式
+ );
+
+ { TODO:************************************************************************
+ 名称:操作结果代码
+ 描述:Start() / Stop() 方法执行失败时,可通过 GetLastError() 获取错误代码
+ ************************************************************************ }
+ En_HP_SocketError = (
+ HP_SE_OK = 0, // 成功
+ HP_SE_ILLEGAL_STATE = 1, // 当前状态不允许操作
+ HP_SE_INVALID_PARAM = 2, // 非法参数
+ HP_SE_SOCKET_CREATE = 3, // 创建 SOCKET 失败
+ HP_SE_SOCKET_BIND = 4, // 绑定 SOCKET 失败
+ HP_SE_SOCKET_PREPARE = 5, // 设置 SOCKET 失败
+ HP_SE_SOCKET_LISTEN = 6, // 监听 SOCKET 失败
+ HP_SE_CP_CREATE = 7, // 创建完成端口失败
+ HP_SE_WORKER_THREAD_CREATE = 8, // 创建工作线程失败
+ HP_SE_DETECT_THREAD_CREATE = 9, // 创建监测线程失败
+ HP_SE_SOCKE_ATTACH_TO_CP = 10, // 绑定完成端口失败
+ HP_SE_CONNECT_SERVER = 11, // 连接服务器失败
+ HP_SE_NETWORK = 12, // 网络错误
+ HP_SE_DATA_PROC = 13, // 数据处理错误
+ HP_SE_DATA_SEND = 14, // 数据发送失败
+
+ //***** SSL Socket 扩展操作结果代码 *****/
+ HP_SE_SSL_ENV_NOT_READY = 101 // SSL 环境未就绪
+ );
+
+ {TODO:
+ /************************************************************************
+ 名称:播送模式
+ 描述:UDP 组件的播送模式(组播或广播)
+ ************************************************************************/}
+ En_HP_CastMode = (
+ HP_CM_MULTICAST = 0, // 组播
+ HP_CM_BROADCAST = 1 // 广播
+ );
+
+
+ { /************** HPSocket4C.dll 回调函数 **************/ }
+ {TODO: /* Tcp服务端回调函数 */ }
+ HP_FN_Server_OnPrepareListen = function(soListen: Pointer): En_HP_HandleResult; stdcall;
+ // 如果为 TCP 连接,pClient为 SOCKET 句柄;如果为 UDP 连接,pClient为 SOCKADDR_IN 指针;
+ HP_FN_Server_OnAccept = function(dwConnID: HP_CONNID; pClient: Pointer): En_HP_HandleResult; stdcall;
+ HP_FN_Server_OnHandShake = function(dwConnID: HP_CONNID): En_HP_HandleResult; stdcall;
+ HP_FN_Server_OnSend = function(dwConnID: HP_CONNID; const pData: Pointer; iLength: Integer): En_HP_HandleResult; stdcall;
+ HP_FN_Server_OnReceive = function(dwConnID: HP_CONNID; const pData: Pointer; iLength: Integer): En_HP_HandleResult; stdcall;
+ HP_FN_Server_OnPullReceive = function(dwConnID: HP_CONNID; iLength: Integer): En_HP_HandleResult; stdcall;
+ HP_FN_Server_OnClose = function(dwConnID: HP_CONNID; enOperation: En_HP_SocketOperation; iErrorCode: Integer): En_HP_HandleResult; stdcall;
+ HP_FN_Server_OnShutdown = function(): En_HP_HandleResult; stdcall;
+
+ {TODO: /* Agent 回调函数 */ }
+ HP_FN_Agent_OnPrepareConnect = function(dwConnID: HP_CONNID; SOCKET: Pointer): En_HP_HandleResult; stdcall;
+ HP_FN_Agent_OnConnect = function(dwConnID: HP_CONNID): En_HP_HandleResult; stdcall;
+ HP_FN_Agent_OnHandShake = function(dwConnID: HP_CONNID): En_HP_HandleResult; stdcall;
+ HP_FN_Agent_OnSend = function(dwConnID: HP_CONNID; const pData: Pointer; iLength: Integer): En_HP_HandleResult; stdcall;
+ HP_FN_Agent_OnReceive = function(dwConnID: HP_CONNID; const pData: Pointer; iLength: Integer): En_HP_HandleResult; stdcall;
+ HP_FN_Agent_OnPullReceive = function(dwConnID: HP_CONNID; iLength: Integer): En_HP_HandleResult; stdcall;
+ HP_FN_Agent_OnClose = function(dwConnID: HP_CONNID; enOperation: En_HP_SocketOperation; iErrorCode: Integer): En_HP_HandleResult; stdcall;
+ HP_FN_Agent_OnShutdown = function(): En_HP_HandleResult; stdcall;
+
+ {TODO: /* Client 回调函数 */ }
+ HP_FN_Client_OnPrepareConnect = function(pClient: HP_Client; SOCKET: Pointer): En_HP_HandleResult; stdcall;
+ HP_FN_Client_OnConnect = function(pClient: HP_Client): En_HP_HandleResult; stdcall;
+ HP_FN_Client_OnHandShake = function(pClient: HP_Client): En_HP_HandleResult; stdcall;
+ HP_FN_Client_OnSend = function(pClient: HP_Client; const pData: Pointer; iLength: Integer): En_HP_HandleResult; stdcall;
+ HP_FN_Client_OnReceive = function(pClient: HP_Client; const pData: Pointer; iLength: Integer): En_HP_HandleResult; stdcall;
+ HP_FN_Client_OnPullReceive = function(pClient: HP_Client; iLength: Integer): En_HP_HandleResult; stdcall;
+ HP_FN_Client_OnClose = function(pClient: HP_Client; enOperation: En_HP_SocketOperation; iLength: Integer): En_HP_HandleResult; stdcall;
+
+ { /****************************************************/
+ /************** HPSocket4C.dll 导出函数 **************/ }
+ {TODO: 创建 HP_TcpServer 对象 }
+function Create_HP_TcpServer(pListener: HP_TcpServerListener): HP_TcpServer; stdcall; external HPSocketDLL;
+ {TODO: 创建 HP_HttpServer 对象 }
+function Create_HP_HttpServer(pListener: HP_HttpServerListener): HP_HttpServer; stdcall; external HPSocketDLL;
+ {TODO: 创建 HP_TcpAgent 对象 }
+function Create_HP_TcpAgent(pListener: HP_TcpAgentListener): HP_TcpAgent; stdcall; external HPSocketDLL;
+ {TODO: 创建 HP_TcpClient 对象 }
+function Create_HP_TcpClient(pListener: HP_TcpClientListener): HP_TcpClient; stdcall; external HPSocketDLL;
+ {TODO: 创建 HP_TcpPullServer 对象 }
+function Create_HP_TcpPullServer(pListener: HP_TcpPullServerListener): HP_TcpPullServer; stdcall; external HPSocketDLL;
+ {TODO: 创建 HP_TcpPullAgent 对象 }
+function Create_HP_TcpPullAgent(pListener: HP_TcpPullAgentListener): HP_TcpPullAgent; stdcall; external HPSocketDLL;
+ {TODO: 创建 HP_TcpPullClient 对象}
+function Create_HP_TcpPullClient(pListener: HP_TcpPullClientListener): HP_TcpPullClient; stdcall; external HPSocketDLL;
+ {TODO: 创建 HP_TcpPackServer 对象 }
+function Create_HP_TcpPackServer(pListener: HP_TcpServerListener): HP_TcpPackServer; stdcall; external HPSocketDLL;
+ {TODO: 创建 HP_TcpPackAgent 对象 }
+function Create_HP_TcpPackAgent(pListener: HP_TcpAgentListener): HP_TcpPackAgent; stdcall; external HPSocketDLL;
+ {TODO: 创建 HP_TcpPackClient 对象}
+function Create_HP_TcpPackClient(pListener: HP_TcpClientListener): HP_TcpPackClient; stdcall; external HPSocketDLL;
+ {TODO: 创建 HP_UdpServer 对象 }
+function Create_HP_UdpServer(pListener: HP_UdpServerListener): HP_UdpServer; stdcall; external HPSocketDLL;
+ {TODO: 创建 HP_UdpClient 对象 }
+function Create_HP_UdpClient(pListener: HP_UdpClientListener): HP_UdpClient; stdcall; external HPSocketDLL;
+ {TODO: 创建 HP_UdpCast 对象 }
+function Create_HP_UdpCast(pListener: HP_UdpCastListener): HP_UdpCast; stdcall; external HPSocketDLL;
+
+ {TODO: 销毁 HP_TcpServer 对象 }
+procedure Destroy_HP_TcpServer(pServer: HP_TcpServer); stdcall; external HPSocketDLL;
+ {TODO: 销毁 HP_HttpServer 对象 }
+procedure Destroy_HP_HttpServer(pServer: HP_HttpServer); stdcall; external HPSocketDLL;
+ {TODO: 销毁 HP_TcpAgent 对象 }
+procedure Destroy_HP_TcpAgent(pAgent: HP_TcpAgent); stdcall; external HPSocketDLL;
+ {TODO: 销毁 HP_TcpClient 对象 }
+procedure Destroy_HP_TcpClient(pClient: HP_TcpClient); stdcall; external HPSocketDLL;
+ {TODO: 销毁 HP_TcpPullServer 对象 }
+procedure Destroy_HP_TcpPullServer(pServer: HP_TcpPullServer); stdcall; external HPSocketDLL;
+ {TODO: 销毁 HP_TcpPullAgent 对象 }
+procedure Destroy_HP_TcpPullAgent(pAgent: HP_TcpPullAgent); stdcall; external HPSocketDLL;
+ {TODO: 销毁 HP_TcpPullClient 对象 }
+procedure Destroy_HP_TcpPullClient(pClient: HP_TcpPullClient); stdcall; external HPSocketDLL;
+ {TODO: 销毁 HP_TcpPackServer 对象 }
+procedure Destroy_HP_TcpPackServer(pServer: HP_TcpPackServer); stdcall; external HPSocketDLL;
+ {TODO: 销毁 HP_TcpPackAgent 对象 }
+procedure Destroy_HP_TcpPackAgent(pAgent: HP_TcpPackAgent); stdcall; external HPSocketDLL;
+ {TODO: 销毁 HP_TcpPackClient 对象 }
+procedure Destroy_HP_TcpPackClient(pClient: HP_TcpPackClient); stdcall; external HPSocketDLL;
+ {TODO: 销毁 HP_UdpServer 对象 }
+procedure Destroy_HP_UdpServer(pServer: HP_UdpServer); stdcall; external HPSocketDLL;
+ {TODO: 销毁 HP_UdpClient 对象 }
+procedure Destroy_HP_UdpClient(pClient: HP_UdpClient); stdcall; external HPSocketDLL;
+ {TODO: 销毁 HP_UdpCast 对象 }
+procedure Destroy_HP_UdpCast(pCast: HP_UdpCast); stdcall; external HPSocketDLL;
+
+ {TODO: 创建 HP_TcpServerListener and HP_TcpPackServerListener 对象 }
+function Create_HP_TcpServerListener(): HP_TcpServerListener; stdcall; external HPSocketDLL;
+ {TODO: 创建 HP_HttpServerListener 对象 }
+function Create_HP_HttpServerListener(): HP_HttpServerListener; stdcall; external HPSocketDLL;
+ {TODO: 创建 HP_TcpAgentListener 对象 }
+function Create_HP_TcpAgentListener(): HP_TcpAgentListener; stdcall; external HPSocketDLL;
+ {TODO: 创建 HP_TcpClientListener 对象 }
+function Create_HP_TcpClientListener(): HP_TcpClientListener; stdcall; external HPSocketDLL;
+ {TODO: 创建 HP_TcpPullServerListener 对象 }
+function Create_HP_TcpPullServerListener(): HP_TcpPullServerListener; stdcall; external HPSocketDLL;
+ {TODO: 创建 HP_TcpPullAgentListener 对象 }
+function Create_HP_TcpPullAgentListener(): HP_TcpPullAgentListener; stdcall; external HPSocketDLL;
+ {TODO: 创建 HP_TcpPullClientListener 对象 }
+function Create_HP_TcpPullClientListener(): HP_TcpPullClientListener; stdcall; external HPSocketDLL;
+ {TODO: 创建 HP_UdpServerListener 对象 }
+function Create_HP_UdpServerListener(): HP_UdpServerListener; stdcall; external HPSocketDLL;
+ {TODO: 创建 HP_UdpClientListener 对象 }
+function Create_HP_UdpClientListener(): HP_UdpClientListener; stdcall; external HPSocketDLL;
+ {TODO: 创建 HP_UdpCastListener 对象 }
+function Create_HP_UdpCastListener(): HP_UdpCastListener; stdcall; external HPSocketDLL;
+
+ {TODO: 销毁 HP_TcpServerListener and HP_TcpPackServerListener对象 }
+procedure Destroy_HP_TcpServerListener(pListener: HP_TcpServerListener); stdcall; external HPSocketDLL;
+ {TODO: 销毁 HP_HttpServerListener 对象 }
+procedure Destroy_HP_HttpServerListener(pListener: HP_HttpServerListener); stdcall; external HPSocketDLL;
+ {TODO: 销毁 HP_TcpAgentListener 对象 }
+procedure Destroy_HP_TcpAgentListener(pListener: HP_TcpAgentListener); stdcall; external HPSocketDLL;
+ {TODO: 销毁 HP_TcpClientListener 对象 }
+procedure Destroy_HP_TcpClientListener(pListener: HP_TcpClientListener); stdcall; external HPSocketDLL;
+ {TODO: 销毁 HP_TcpPullServerListener 对象 }
+procedure Destroy_HP_TcpPullServerListener(pListener: HP_TcpPullServerListener); stdcall; external HPSocketDLL;
+ {TODO: 销毁 HP_TcpPullAgentListener 对象 }
+procedure Destroy_HP_TcpPullAgentListener(pListener: HP_TcpPullAgentListener); stdcall; external HPSocketDLL;
+ {TODO: 销毁 HP_TcpPullClientListener 对象 }
+procedure Destroy_HP_TcpPullClientListener(pListener: HP_TcpPullClientListener); stdcall; external HPSocketDLL;
+ {TODO: 销毁 HP_UdpServerListener 对象 }
+procedure Destroy_HP_UdpServerListener(pListener: HP_UdpServerListener); stdcall; external HPSocketDLL;
+ {TODO: 销毁 HP_UdpClientListener 对象 }
+procedure Destroy_HP_UdpClientListener(pListener: HP_UdpClientListener); stdcall; external HPSocketDLL;
+ {TODO: 销毁 HP_UdpCastListener 对象 }
+procedure Destroy_HP_UdpCastListener(pListener: HP_UdpCastListener); stdcall; external HPSocketDLL;
+
+{TODO: ***************************** Server 回调函数设置方法 ***************************** }
+procedure HP_Set_FN_Server_OnPrepareListen(pListener: HP_TcpServerListener; fn: HP_FN_Server_OnPrepareListen); stdcall; external HPSocketDLL;
+procedure HP_Set_FN_Server_OnAccept(pListener: HP_TcpServerListener; fn: HP_FN_Server_OnAccept); stdcall; external HPSocketDLL;
+procedure HP_Set_FN_Server_OnHandShake(pListener: HP_TcpServerListener; fn: HP_FN_Server_OnHandShake); stdcall; external HPSocketDLL;
+procedure HP_Set_FN_Server_OnSend(pListener: HP_TcpServerListener; fn: HP_FN_Server_OnSend); stdcall; external HPSocketDLL;
+procedure HP_Set_FN_Server_OnReceive(pListener: HP_TcpServerListener; fn: HP_FN_Server_OnReceive); stdcall; external HPSocketDLL;
+procedure HP_Set_FN_Server_OnPullReceive(pListener: HP_TcpServerListener; fn: HP_FN_Server_OnPullReceive); stdcall; external HPSocketDLL;
+procedure HP_Set_FN_Server_OnClose(pListener: HP_TcpServerListener; fn: HP_FN_Server_OnClose); stdcall; external HPSocketDLL;
+procedure HP_Set_FN_Server_OnShutdown(pListener: HP_TcpServerListener; fn: HP_FN_Server_OnShutdown); stdcall; external HPSocketDLL;
+
+
+
+{TODO:****************************** Agent 回调函数设置方法 ***************************** }
+procedure HP_Set_FN_Agent_OnPrepareConnect(pListener: HP_AgentListener; fn: HP_FN_Agent_OnPrepareConnect); stdcall; external HPSocketDLL;
+procedure HP_Set_FN_Agent_OnConnect(pListener: HP_AgentListener; fn: HP_FN_Agent_OnConnect); stdcall; external HPSocketDLL;
+procedure HP_Set_FN_Agent_OnHandShake(pListener: HP_AgentListener; fn: HP_FN_Agent_OnHandShake); stdcall; external HPSocketDLL;
+procedure HP_Set_FN_Agent_OnSend(pListener: HP_AgentListener; fn: HP_FN_Agent_OnSend); stdcall; external HPSocketDLL;
+procedure HP_Set_FN_Agent_OnReceive(pListener: HP_AgentListener; fn: HP_FN_Agent_OnReceive); stdcall; external HPSocketDLL;
+procedure HP_Set_FN_Agent_OnPullReceive(pListener: HP_AgentListener; fn: HP_FN_Agent_OnPullReceive); stdcall; external HPSocketDLL;
+procedure HP_Set_FN_Agent_OnClose(pListener: HP_AgentListener; fn: HP_FN_Agent_OnClose); stdcall; external HPSocketDLL;
+procedure HP_Set_FN_Agent_OnAgentShutdown(pListener: HP_AgentListener; fn: HP_FN_Agent_OnShutdown); stdcall; external HPSocketDLL;
+
+{TODO:***************************** Client 回调函数设置方法 ***************************** }
+procedure HP_Set_FN_Client_OnPrepareConnect(pListener: HP_TcpClientListener; fn: HP_FN_Client_OnPrepareConnect); stdcall; external HPSocketDLL;
+procedure HP_Set_FN_Client_OnConnect(pListener: HP_TcpClientListener; fn: HP_FN_Client_OnConnect); stdcall; external HPSocketDLL;
+procedure HP_Set_FN_Client_OnHandShake(pListener: HP_TcpClientListener; fn: HP_FN_Client_OnHandShake); stdcall; external HPSocketDLL;
+procedure HP_Set_FN_Client_OnSend(pListener: HP_TcpClientListener; fn: HP_FN_Client_OnSend); stdcall; external HPSocketDLL;
+procedure HP_Set_FN_Client_OnReceive(pListener: HP_TcpClientListener; fn: HP_FN_Client_OnReceive); stdcall; external HPSocketDLL;
+procedure HP_Set_FN_Client_OnPullReceive(pListener: HP_TcpClientListener; fn: HP_FN_Client_OnPullReceive); stdcall; external HPSocketDLL;
+procedure HP_Set_FN_Client_OnClose(pListener: HP_TcpClientListener; fn: HP_FN_Client_OnClose); stdcall; external HPSocketDLL;
+
+{ /***************************** Server 操作方法 *****************************/ }
+{ TODO:
+ * 名称:启动通信组件
+ * 描述:启动服务端通信组件,启动完成后可开始接收客户端连接并收发数据
+ *
+ * 参数: pszBindAddress -- 监听地址
+ * usPort -- 监听端口
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败,可通过 GetLastError() 获取错误代码 }
+function HP_Server_Start(pServer: HP_Server; pszBindAddress: WideString; usPort: Word): BOOL; stdcall; external HPSocketDLL;
+
+{ TODO:
+ * 名称:关闭通信组件
+ * 描述:关闭服务端通信组件,关闭完成后断开所有客户端连接并释放所有资源
+ *
+ * 参数:
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败,可通过 GetLastError() 获取错误代码 }
+function HP_Server_Stop(pServer: HP_Server): BOOL; stdcall; external HPSocketDLL;
+
+{ TODO:
+ * 名称:发送数据
+ * 描述:用户通过该方法向指定客户端发送数据
+ *
+ * 参数:dwConnID -- 连接 ID
+ * pBuffer -- 发送数据缓冲区
+ * iLength -- 发送数据长度
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败 }
+ { Private declarations }
+
+function HP_Server_Send(pServer: HP_Server; dwConnID: HP_CONNID; const pBuffer: Pointer; iLength: Integer): BOOL;
+stdcall; external HPSocketDLL;
+
+
+{ TODO:
+ * 名称:发送数据
+ * 描述:向指定连接发送数据
+ *
+ * 参数:dwConnID -- 连接 ID
+ * pBuffer -- 发送缓冲区
+ * iLength -- 发送缓冲区长度
+ * iOffset -- 发送缓冲区指针偏移量
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败,可通过 Windows API 函数 ::GetLastError() 获取 Windows 错误代码 }
+function HP_Server_SendPart(pServer: HP_Server; dwConnID: HP_CONNID; const pBuffer: Pointer; iLength: Integer; iOffset: Integer): BOOL;
+stdcall; external HPSocketDLL;
+
+{ TODO:
+ * 名称:发送多组数据
+ * 描述:向指定连接发送多组数据
+ * TCP - 顺序发送所有数据包
+ * UDP - 把所有数据包组合成一个数据包发送(数据包的总长度不能大于设置的 UDP 包最大长度)
+ *
+ * 参数: dwConnID -- 连接 ID
+ * pBuffers -- 发送缓冲区数组
+ * iCount -- 发送缓冲区数目
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败,可通过 Windows API 函数 ::GetLastError() 获取 Windows 错误代码 }
+function HP_Server_SendPackets(pServer: HP_Server; dwConnID: HP_CONNID; const pBuffers: WSABUFArray; iCount: Integer): BOOL;
+stdcall; external HPSocketDLL;
+
+{ TODO:
+ * 名称:断开连接
+ * 描述:断开与某个客户端的连接
+ *
+ * 参数: dwConnID -- 连接 ID
+ * bForce -- 是否强制断开连接
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败 }
+function HP_Server_Disconnect(pServer: HP_Server; dwConnID: HP_CONNID; bForce: BOOL): BOOL;
+stdcall; external HPSocketDLL;
+
+{ TODO:
+ * 名称:断开超时连接
+ * 描述:断开超过指定时长的连接
+ *
+ * 参数: dwPeriod -- 时长(毫秒)
+ * bForce -- 是否强制断开连接
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败 }
+function HP_Server_DisconnectLongConnections(pServer: HP_Server; dwPeriod: LongWord; bForce: BOOL): BOOL;
+stdcall; external HPSocketDLL;
+
+{ TODO:
+ * 名称:断开静默连接
+ * 描述:断开超过指定时长的静默连接
+ *
+ * 参数:dwPeriod -- 时长(毫秒)
+ * bForce -- 是否强制断开连接
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败 }
+function HP_Server_DisconnectSilenceConnections(pServer: HP_Server; dwPeriod: LongWord; bForce: BOOL): BOOL;
+stdcall; external HPSocketDLL;
+
+{***************************** Server 属性访问方法 *****************************/ }
+{ TODO:
+ * 名称:设置连接的附加数据
+ * 描述:是否为连接绑定附加数据或者绑定什么样的数据,均由应用程序只身决定
+ *
+ * 参数: dwConnID -- 连接 ID
+ * pv -- 数据
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败(无效的连接 ID) }
+function HP_Server_SetConnectionExtra(pServer: HP_Server; dwConnID: HP_CONNID; pExtra: Pointer): BOOL;
+stdcall; external HPSocketDLL;
+
+{ TODO:
+ * 名称:获取连接的附加数据
+ * 描述:是否为连接绑定附加数据或者绑定什么样的数据,均由应用程序只身决定
+ *
+ * 参数: dwConnID -- 连接 ID
+ * ppv -- 数据指针
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败(无效的连接 ID) }
+function HP_Server_GetConnectionExtra(pServer: HP_Server; dwConnID: HP_CONNID; ppExtra: Pointer): BOOL;
+stdcall; external HPSocketDLL;
+
+{ TODO: 检查通信组件是否已启动 */ }
+function HP_Server_HasStarted(pServer: HP_Server): BOOL; stdcall; external HPSocketDLL;
+{ TODO: 查看通信组件当前状态 */ }
+function HP_Server_GetState(pServer: HP_Server): En_HP_ServiceState; stdcall; external HPSocketDLL;
+{ TODO: 获取最近一次失败操作的错误代码 */ }
+function HP_Server_GetLastError(pServer: HP_Server): En_HP_SocketError; stdcall; external HPSocketDLL;
+{ TODO: 获取最近一次失败操作的错误描述 */ }
+function HP_Server_GetLastErrorDesc(pServer: HP_Server): PWideChar; stdcall; external HPSocketDLL;
+{ TODO: 获取连接中未发出数据的长度 */ }
+function HP_Server_GetPendingDataLength(pServer: HP_Server; dwConnID: HP_CONNID; piPending: PInteger): BOOL; stdcall; external HPSocketDLL;
+{ TODO: 获取客户端连接数 */ }
+function HP_Server_GetConnectionCount(pServer: HP_Server): LongInt; stdcall; external HPSocketDLL;
+{ TODO: 获取所有连接的 CONNID */ }
+function HP_Server_GetAllConnectionIDs(pServer: HP_Server; pIDs: HP_CONNIDArray; pdwCount: PLongint): BOOL; stdcall; external HPSocketDLL;
+{ TODO: 获取某个客户端连接时长(毫秒) */ }
+function HP_Server_GetConnectPeriod(pServer: HP_Server; dwConnID: HP_CONNID; pdwPeriod: PLongint): BOOL; stdcall; external HPSocketDLL;
+{ TODO: 获取某个连接静默时间(毫秒) */ }
+function HP_Server_GetSilencePeriod(pServer: HP_Server; dwConnID: HP_CONNID; pdwPeriod: PLongint): BOOL; stdcall; external HPSocketDLL;
+{ TODO: 获取监听 Socket 的地址信息 */ }
+function HP_Server_GetListenAddress(pServer: HP_Server; lpszAddress: PWideChar; piAddressLen: PInteger; pusPort: PUShort): BOOL; stdcall; external HPSocketDLL;
+{ TODO: 获取某个连接的远程地址信息 */ }
+function HP_Server_GetRemoteAddress(pServer: HP_Server; dwConnID: HP_CONNID; lpszAddress: PWideChar; piAddressLen: PInteger; pusPort: PUShort): BOOL; stdcall; external HPSocketDLL;
+
+{ TODO: 设置数据发送策略 */ }
+procedure HP_Server_SetSendPolicy(pServer: HP_Server; enSendPolicy: En_HP_SendPolicy); stdcall; external HPSocketDLL;
+{ TODO: 设置 Socket 缓存对象锁定时间(毫秒,在锁定期间该 Socket 缓存对象不能被获取使用) */ }
+procedure HP_Server_SetFreeSocketObjLockTime(pServer: HP_Server; dwFreeSocketObjLockTime: LongInt); stdcall; external HPSocketDLL;
+{ TODO: 设置 Socket 缓存池大小(通常设置为平均并发连接数量的 1/3 - 1/2) */ }
+procedure HP_Server_SetFreeSocketObjPool(pServer: HP_Server; dwFreeSocketObjPool: LongInt); stdcall; external HPSocketDLL;
+{ TODO: 设置内存块缓存池大小(通常设置为 Socket 缓存池大小的 2 - 3 倍) */ }
+procedure HP_Server_SetFreeBufferObjPool(pServer: HP_Server; dwFreeBufferObjPool: LongInt); stdcall; external HPSocketDLL;
+{ TODO: 设置 Socket 缓存池回收阀值(通常设置为 Socket 缓存池大小的 3 倍) */ }
+procedure HP_Server_SetFreeSocketObjHold(pServer: HP_Server; dwFreeSocketObjHold: LongInt); stdcall; external HPSocketDLL;
+{ TODO: 设置内存块缓存池回收阀值(通常设置为内存块缓存池大小的 3 倍) */ }
+procedure HP_Server_SetFreeBufferObjHold(pServer: HP_Server; dwFreeBufferObjHold: LongInt); stdcall; external HPSocketDLL;
+{ TODO: 设置工作线程数量(通常设置为 2 * CPU + 2) */ }
+procedure HP_Server_SetWorkerThreadCount(pServer: HP_Server; dwWorkerThreadCount: LongInt); stdcall; external HPSocketDLL;
+{ TODO: 设置是否标记静默时间(设置为 TRUE 时 DisconnectSilenceConnections() 和 GetSilencePeriod() 才有效,默认:FALSE) */ }
+procedure HP_Server_SetMarkSilence(pServer: HP_Server; bMarkSilence: BOOL); stdcall; external HPSocketDLL;
+
+{ TODO: 获取数据发送策略 */ }
+function HP_Server_GetSendPolicy(pServer: HP_Server): En_HP_SendPolicy; stdcall; external HPSocketDLL;
+{ TODO: 获取 Socket 缓存对象锁定时间 */ }
+function HP_Server_GetFreeSocketObjLockTime(pServer: HP_Server): LongInt; stdcall; external HPSocketDLL;
+{ TODO: 获取 Socket 缓存池大小 */ }
+function HP_Server_GetFreeSocketObjPool(pServer: HP_Server): LongInt; stdcall; external HPSocketDLL;
+{ TODO: 获取内存块缓存池大小 */ }
+function HP_Server_GetFreeBufferObjPool(pServer: HP_Server): LongInt; stdcall; external HPSocketDLL;
+{ TODO: 获取 Socket 缓存池回收阀值 */ }
+function HP_Server_GetFreeSocketObjHold(pServer: HP_Server): LongInt; stdcall; external HPSocketDLL;
+{ TODO: 获取内存块缓存池回收阀值 */ }
+function HP_Server_GetFreeBufferObjHold(pServer: HP_Server): LongInt; stdcall; external HPSocketDLL;
+{ TODO: 获取工作线程数量 */ }
+function HP_Server_GetWorkerThreadCount(pServer: HP_Server): LongInt; stdcall; external HPSocketDLL;
+{ TODO: 检测是否标记静默时间 */ }
+function HP_Server_IsMarkSilence(pServer: HP_Server): BOOL; stdcall; external HPSocketDLL;
+
+{ /******************************* TCP Server 操作方法 *******************************/ }
+{ TODO:
+ * 名称:发送小文件
+ * 描述:向指定连接发送 4096 KB 以下的小文件
+ *
+ * 参数: dwConnID -- 连接 ID
+ * lpszFileName -- 文件路径
+ * pHead -- 头部附加数据
+ * pTail -- 尾部附加数据
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败,可通过 Windows API 函数 ::GetLastError() 获取 Windows 错误代码
+ */ }
+function HP_TcpServer_SendSmallFile(pServer: HP_Server; dwConnID: HP_CONNID;
+ lpszFileName: PWideChar; const pHead: LPWSABUF; const pTail: LPWSABUF): BOOL;
+stdcall; external HPSocketDLL;
+
+{ /***************************** TCP Server 属性访问方法 *****************************/ }
+
+{ TODO: 设置监听 Socket 的等候队列大小(根据并发连接数量调整设置) */ }
+procedure HP_TcpServer_SetSocketListenQueue(pServer: HP_TcpServer; dwSocketListenQueue: LongInt); stdcall; external HPSocketDLL;
+{ TODO: 设置 Accept 预投递数量(根据负载调整设置,Accept 预投递数量越大则支持的并发连接请求越多) */ }
+procedure HP_TcpServer_SetAcceptSocketCount(pServer: HP_TcpServer; dwAcceptSocketCount: LongInt); stdcall; external HPSocketDLL;
+{ TODO: 设置通信数据缓冲区大小(根据平均通信数据包大小调整设置,通常设置为 1024 的倍数) */ }
+procedure HP_TcpServer_SetSocketBufferSize(pServer: HP_TcpServer; dwSocketBufferSize: LongInt); stdcall; external HPSocketDLL;
+{ TODO: 设置心跳包间隔(毫秒,0 则不发送心跳包) */ }
+procedure HP_TcpServer_SetKeepAliveTime(pServer: HP_TcpServer; dwKeepAliveTime: LongInt); stdcall; external HPSocketDLL;
+{ TODO: 设置心跳确认包检测间隔(毫秒,0 不发送心跳包,如果超过若干次 [默认:WinXP 5 次, Win7 10 次] 检测不到心跳确认包则认为已断线) */ }
+procedure HP_TcpServer_SetKeepAliveInterval(pServer: HP_TcpServer; dwKeepAliveInterval: LongInt); stdcall; external HPSocketDLL;
+
+{ TODO: 获取 Accept 预投递数量 */ }
+function HP_TcpServer_GetAcceptSocketCount(pServer: HP_TcpServer): LongInt; stdcall; external HPSocketDLL;
+{ TODO: 获取通信数据缓冲区大小 */ }
+function HP_TcpServer_GetSocketBufferSize(pServer: HP_TcpServer): LongInt; stdcall; external HPSocketDLL;
+{ TODO: 获取监听 Socket 的等候队列大小 */ }
+function HP_TcpServer_GetSocketListenQueue(pServer: HP_TcpServer): LongInt; stdcall; external HPSocketDLL;
+{ TODO: 获取心跳检查次数 */ }
+function HP_TcpServer_GetKeepAliveTime(pServer: HP_TcpServer): LongInt; stdcall; external HPSocketDLL;
+{ TODO: 获取心跳检查间隔 */ }
+function HP_TcpServer_GetKeepAliveInterval(pServer: HP_TcpServer): LongInt; stdcall; external HPSocketDLL;
+
+{ /***************************** UDP Server 属性访问方法 *****************************/ }
+
+{ TODO: 设置数据报文最大长度(建议在局域网环境下不超过 1472 字节,在广域网环境下不超过 548 字节) */ }
+procedure HP_UdpServer_SetMaxDatagramSize(pServer: HP_UdpServer; dwMaxDatagramSize: LongInt); stdcall; external HPSocketDLL;
+{ TODO: 获取数据报文最大长度 */ }
+function HP_UdpServer_GetMaxDatagramSize(pServer: HP_UdpServer): LongInt; stdcall; external HPSocketDLL;
+
+{ TODO: 设置 Receive 预投递数量(根据负载调整设置,Receive 预投递数量越大则丢包概率越小) */ }
+procedure HP_UdpServer_SetPostReceiveCount(pServer: HP_UdpServer; dwPostReceiveCount: LongInt); stdcall; external HPSocketDLL;
+{ TODO: 获取 Receive 预投递数量 */ }
+function HP_UdpServer_GetPostReceiveCount(pServer: HP_UdpServer): LongInt; stdcall; external HPSocketDLL;
+
+{ TODO: 设置监测包尝试次数(0 则不发送监测跳包,如果超过最大尝试次数则认为已断线) */ }
+procedure HP_UdpServer_SetDetectAttempts(pServer: HP_UdpServer; dwDetectAttempts: LongInt); stdcall; external HPSocketDLL;
+{ TODO: 设置监测包发送间隔(秒,0 不发送监测包) */ }
+procedure HP_UdpServer_SetDetectInterval(pServer: HP_UdpServer; dwDetectInterval: LongInt); stdcall; external HPSocketDLL;
+{ TODO: 获取心跳检查次数 */ }
+function HP_UdpServer_GetDetectAttempts(pServer: HP_UdpServer): LongInt; stdcall; external HPSocketDLL;
+{ TODO: 获取心跳检查间隔 */ }
+function HP_UdpServer_GetDetectInterval(pServer: HP_UdpServer): LongInt; stdcall; external HPSocketDLL;
+
+{ ***************************** Agent 操作方法 ***************************** }
+
+{ TODO:
+ * 名称:启动通信组件
+ * 描述:启动通信代理组件,启动完成后可开始连接远程服务器
+ *
+ * 参数: pszBindAddress -- 监听地址
+ * bAsyncConnect -- 是否采用异步 Connect
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败,可通过 GetLastError() 获取错误代码
+ */ }
+function HP_Agent_Start(pAgent: HP_Agent; pszBindAddress: PWideChar; bAsyncConnect: BOOL): BOOL; stdcall; external HPSocketDLL;
+
+{ TODO:
+ * 名称:关闭通信组件
+ * 描述:关闭通信组件,关闭完成后断开所有连接并释放所有资源
+ *
+ * 参数:
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败,可通过 GetLastError() 获取错误代码
+ */ }
+function HP_Agent_Stop(pAgent: HP_Agent): BOOL; stdcall; external HPSocketDLL;
+
+{ TODO:
+ * 名称:连接服务器
+ * 描述:连接服务器,连接成功后 IAgentListener 会接收到 OnConnect() 事件
+ *
+ * 参数: pszRemoteAddress -- 服务端地址
+ * usPort -- 服务端端口
+ * pdwConnID -- 连接 ID(默认:nullptr,不获取连接 ID)
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败,可通过函数 SYS_GetLastError() 获取 Windows 错误代码
+ */ }
+function HP_Agent_Connect(pAgent: HP_Agent; pszRemoteAddress: PWideChar; usPort: Word; pdwConnID: PHP_CONNID): BOOL;
+stdcall; external HPSocketDLL;
+
+{ TODO:
+ * 名称:发送数据
+ * 描述:向指定连接发送数据
+ *
+ * 参数: dwConnID -- 连接 ID
+ * pBuffer -- 发送缓冲区
+ * iLength -- 发送缓冲区长度
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败,可通过 Windows API 函数 ::GetLastError() 获取 Windows 错误代码
+ */ }
+function HP_Agent_Send(pAgent: HP_Agent; dwConnID: HP_CONNID; const pBuffer: Pointer; iLength: Integer): BOOL;
+stdcall; external HPSocketDLL;
+
+{ TODO:
+ * 名称:发送数据
+ * 描述:向指定连接发送数据
+ *
+ * 参数: dwConnID -- 连接 ID
+ * pBuffer -- 发送缓冲区
+ * iLength -- 发送缓冲区长度
+ * iOffset -- 发送缓冲区指针偏移量
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败,可通过 Windows API 函数 ::GetLastError() 获取 Windows 错误代码
+ */ }
+function HP_Agent_SendPart(pAgent: HP_Agent; dwConnID: HP_CONNID; const pBuffer: Pointer; iLength: Integer; iOffset: Integer): BOOL;
+stdcall; external HPSocketDLL;
+
+{ TODO:
+ * 名称:发送多组数据
+ * 描述:向指定连接发送多组数据
+ * TCP - 顺序发送所有数据包
+ * UDP - 把所有数据包组合成一个数据包发送(数据包的总长度不能大于设置的 UDP 包最大长度)
+ *
+ * 参数: dwConnID -- 连接 ID
+ * pBuffers -- 发送缓冲区数组
+ * iCount -- 发送缓冲区数目
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败,可通过 Windows API 函数 ::GetLastError() 获取 Windows 错误代码
+ */ }
+function HP_Agent_SendPackets(pAgent: HP_Agent; dwConnID: HP_CONNID; const pBuffers: WSABUFArray; iCount: Integer): BOOL;
+stdcall; external HPSocketDLL;
+
+{ TODO:
+ * 名称:断开连接
+ * 描述:断开某个连接
+ *
+ * 参数: dwConnID -- 连接 ID
+ * bForce -- 是否强制断开连接
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败
+ */ }
+function HP_Agent_Disconnect(pAgent: HP_Agent; dwConnID: HP_CONNID; bForce: BOOL): BOOL;
+stdcall; external HPSocketDLL;
+
+{ TODO:
+ * 名称:断开超时连接
+ * 描述:断开超过指定时长的连接
+ *
+ * 参数: dwPeriod -- 时长(毫秒)
+ * bForce -- 是否强制断开连接
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败
+ */ }
+function HP_Agent_DisconnectLongConnections(pAgent: HP_Agent; dwPeriod: LongInt; bForce: BOOL): BOOL;
+stdcall; external HPSocketDLL;
+
+{ TODO:
+ * 名称:断开静默连接
+ * 描述:断开超过指定时长的静默连接
+ *
+ * 参数: dwPeriod -- 时长(毫秒)
+ * bForce -- 是否强制断开连接
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败
+ */ }
+function HP_Agent_DisconnectSilenceConnections(pAgent: HP_Agent; dwPeriod: LongInt; bForce: BOOL): BOOL;
+stdcall; external HPSocketDLL;
+
+{ /******************************************************************************/
+ /***************************** Agent 属性访问方法 *****************************/ }
+
+{ TODO
+ * 名称:设置连接的附加数据
+ * 描述:是否为连接绑定附加数据或者绑定什么样的数据,均由应用程序只身决定
+ *
+ * 参数: dwConnID -- 连接 ID
+ * pv -- 数据
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败(无效的连接 ID)
+ */ }
+function HP_Agent_SetConnectionExtra(pAgent: HP_Agent; dwConnID: HP_CONNID; pExtra: Pointer): BOOL;
+stdcall; external HPSocketDLL;
+
+{ TODO
+ * 名称:获取连接的附加数据
+ * 描述:是否为连接绑定附加数据或者绑定什么样的数据,均由应用程序只身决定
+ *
+ * 参数: dwConnID -- 连接 ID
+ * ppv -- 数据指针
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败(无效的连接 ID)
+ */ }
+function HP_Agent_GetConnectionExtra(pAgent: HP_Agent; dwConnID: HP_CONNID;
+ ppExtra: Pointer): BOOL; stdcall; external HPSocketDLL;
+
+{TODO 检查通信组件是否已启动 */ }
+function HP_Agent_HasStarted(pAgent: HP_Agent): BOOL; stdcall; external HPSocketDLL;
+{TODO 查看通信组件当前状态 */ }
+function HP_Agent_GetState(pAgent: HP_Agent): En_HP_ServiceState; stdcall; external HPSocketDLL;
+{TODO 获取连接数 */ }
+function HP_Agent_GetConnectionCount(pAgent: HP_Agent): LongInt; stdcall; external HPSocketDLL;
+{ TODO 获取所有连接的 CONNID */ }
+function HP_Agent_GetAllConnectionIDs(pAgent: HP_Agent; pIDs: HP_CONNIDArray; pdwCount: PLongint): BOOL; stdcall; external HPSocketDLL;
+{TODO 获取某个连接时长(毫秒) */ }
+function HP_Agent_GetConnectPeriod(pAgent: HP_Agent; dwConnID: HP_CONNID; pdwPeriod: PLongint): BOOL; stdcall; external HPSocketDLL;
+{TODO 获取某个连接静默时间(毫秒) */ }
+function HP_Agent_GetSilencePeriod(pAgent: HP_Agent; dwConnID: HP_CONNID; pdwPeriod: PLongint): BOOL; stdcall; external HPSocketDLL;
+{TODO 获取某个连接的本地地址信息 */ }
+function HP_Agent_GetLocalAddress(pAgent: HP_Agent; dwConnID: HP_CONNID; lpszAddress: PWideChar; piAddressLen: PInteger; pusPort: PUShort): BOOL; stdcall; external HPSocketDLL;
+{TODO 获取某个连接的远程地址信息 */ }
+function HP_Agent_GetRemoteAddress(pAgent: HP_Agent; dwConnID: HP_CONNID; lpszAddress: PWideChar; piAddressLen: PInteger; pusPort: PUShort): BOOL; stdcall; external HPSocketDLL;
+{TODO 获取最近一次失败操作的错误代码 */ }
+function HP_Agent_GetLastError(pAgent: HP_Agent): En_HP_SocketError; stdcall; external HPSocketDLL;
+{TODO 获取最近一次失败操作的错误描述 */ }
+function HP_Agent_GetLastErrorDesc(pAgent: HP_Agent): PWideChar; stdcall; external HPSocketDLL;
+{TODO 获取连接中未发出数据的长度 */ }
+function HP_Agent_GetPendingDataLength(pAgent: HP_Agent; dwConnID: HP_CONNID; piPending: PInteger): BOOL; stdcall; external HPSocketDLL;
+
+{TODO 设置数据发送策略 */ }
+procedure HP_Agent_SetSendPolicy(pAgent: HP_Agent; enSendPolicy: En_HP_SendPolicy); stdcall; external HPSocketDLL;
+{TODO 设置 Socket 缓存对象锁定时间(毫秒,在锁定期间该 Socket 缓存对象不能被获取使用) */ }
+procedure HP_Agent_SetFreeSocketObjLockTime(pAgent: HP_Agent; dwFreeSocketObjLockTime: LongInt); stdcall; external HPSocketDLL;
+{TODO 设置 Socket 缓存池大小(通常设置为平均并发连接数量的 1/3 - 1/2) */ }
+procedure HP_Agent_SetFreeSocketObjPool(pAgent: HP_Agent; dwFreeSocketObjPool: LongInt); stdcall; external HPSocketDLL;
+{TODO 设置内存块缓存池大小(通常设置为 Socket 缓存池大小的 2 - 3 倍) */ }
+procedure HP_Agent_SetFreeBufferObjPool(pAgent: HP_Agent; dwFreeBufferObjPool: LongInt); stdcall; external HPSocketDLL;
+{TODO 设置 Socket 缓存池回收阀值(通常设置为 Socket 缓存池大小的 3 倍) */ }
+procedure HP_Agent_SetFreeSocketObjHold(pAgent: HP_Agent; dwFreeSocketObjHold: LongInt); stdcall; external HPSocketDLL;
+{TODO 设置内存块缓存池回收阀值(通常设置为内存块缓存池大小的 3 倍) */ }
+procedure HP_Agent_SetFreeBufferObjHold(pAgent: HP_Agent; dwFreeBufferObjHold: LongInt); stdcall; external HPSocketDLL;
+{TODO 设置工作线程数量(通常设置为 2 * CPU + 2) */ }
+procedure HP_Agent_SetWorkerThreadCount(pAgent: HP_Agent; dwWorkerThreadCount: LongInt); stdcall; external HPSocketDLL;
+{TODO 设置是否标记静默时间(设置为 TRUE 时 DisconnectSilenceConnections() 和 GetSilencePeriod() 才有效,默认:FALSE) */ }
+procedure HP_Agent_SetMarkSilence(pAgent: HP_Agent; bMarkSilence: BOOL); stdcall; external HPSocketDLL;
+
+{TODO 获取数据发送策略 */ }
+function HP_Agent_GetSendPolicy(pAgent: HP_Agent): En_HP_SendPolicy; stdcall; external HPSocketDLL;
+{TODO 获取 Socket 缓存对象锁定时间 */ }
+function HP_Agent_GetFreeSocketObjLockTime(pAgent: HP_Agent): LongInt; stdcall; external HPSocketDLL;
+{TODO 获取 Socket 缓存池大小 */ }
+function HP_Agent_GetFreeSocketObjPool(pAgent: HP_Agent): LongInt; stdcall; external HPSocketDLL;
+{TODO 获取内存块缓存池大小 */ }
+function HP_Agent_GetFreeBufferObjPool(HpAgent: HP_Agent): LongInt; stdcall; external HPSocketDLL;
+{TODO 获取 Socket 缓存池回收阀值 */ }
+function HP_Agent_GetFreeSocketObjHold(pAgent: HP_Agent): LongInt; stdcall; external HPSocketDLL;
+{TODO 获取内存块缓存池回收阀值 */ }
+function HP_Agent_GetFreeBufferObjHold(pAgent: HP_Agent): LongInt; stdcall; external HPSocketDLL;
+{TODO 获取工作线程数量 */ }
+function HP_Agent_GetWorkerThreadCount(pAgent: HP_Agent): LongInt; stdcall; external HPSocketDLL;
+{TODO 检测是否标记静默时间 */ }
+function HP_Agent_IsMarkSilence(pAgent: HP_Agent): BOOL; stdcall; external HPSocketDLL;
+
+{ ******************************* TCP Agent 操作方法 ******************************* }
+
+{TODO
+ * 名称:发送小文件
+ * 描述:向指定连接发送 4096 KB 以下的小文件
+ *
+ * 参数: dwConnID -- 连接 ID
+ * lpszFileName -- 文件路径
+ * pHead -- 头部附加数据
+ * pTail -- 尾部附加数据
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败,可通过 Windows API 函数 ::GetLastError() 获取 Windows 错误代码
+ */ }
+function HP_TcpAgent_SendSmallFile(pAgent: HP_Agent; dwConnID: HP_CONNID; lpszFileName: PWideChar; const pHead: LPWSABUF; const pTail: LPWSABUF): BOOL;
+stdcall; external HPSocketDLL;
+
+{ ***************************** TCP Agent 属性访问方法 *****************************/ }
+
+{ TODO 设置是否启用地址重用机制(默认:不启用) */ }
+procedure HP_TcpAgent_SetReuseAddress(pAgent: HP_TcpAgent; bReuseAddress: BOOL); stdcall; external HPSocketDLL;
+{ TODO 检测是否启用地址重用机制 */ }
+function HP_TcpAgent_IsReuseAddress(pAgent: HP_TcpAgent): BOOL; stdcall; external HPSocketDLL;
+
+{ TODO 设置通信数据缓冲区大小(根据平均通信数据包大小调整设置,通常设置为 1024 的倍数) */ }
+procedure HP_TcpAgent_SetSocketBufferSize(pAgent: HP_TcpAgent; dwSocketBufferSize: LongInt); stdcall; external HPSocketDLL;
+{ TODO 设置心跳包间隔(毫秒,0 则不发送心跳包) */ }
+procedure HP_TcpAgent_SetKeepAliveTime(pAgent: HP_TcpAgent; dwKeepAliveTime: LongInt); stdcall; external HPSocketDLL;
+{ TODO 设置心跳确认包检测间隔(毫秒,0 不发送心跳包,如果超过若干次 [默认:WinXP 5 次, Win7 10 次] 检测不到心跳确认包则认为已断线) */ }
+procedure HP_TcpAgent_SetKeepAliveInterval(pAgent: HP_TcpAgent; dwKeepAliveInterval: LongInt); stdcall; external HPSocketDLL;
+
+{ TODO 获取通信数据缓冲区大小 */ }
+function HP_TcpAgent_GetSocketBufferSize(pAgent: HP_TcpAgent): LongInt; stdcall; external HPSocketDLL;
+{ TODO 获取心跳检查次数 */ }
+function HP_TcpAgent_GetKeepAliveTime(pAgent: HP_TcpAgent): LongInt; stdcall; external HPSocketDLL;
+{ TODO 获取心跳检查间隔 */ }
+function HP_TcpAgent_GetKeepAliveInterval(pAgent: HP_TcpAgent): LongInt; stdcall; external HPSocketDLL;
+
+
+{ /***************************** Client 组件操作方法 *****************************/ }
+
+{ TODO
+ * 名称:启动通信组件
+ * 描述:启动客户端通信组件并连接服务端,启动完成后可开始收发数据
+ *
+ * 参数: pszRemoteAddress -- 服务端地址
+ * usPort -- 服务端端口
+ * bAsyncConnect -- 是否采用异步 Connect
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败,可通过 GetLastError() 获取错误代码
+ */ }
+function HP_Client_Start(pClient: HP_Client; pszRemoteAddress: PWideChar; usPort: Word; bAsyncConnect: BOOL): BOOL;
+stdcall; external HPSocketDLL;
+
+{ TODO
+ * 名称:关闭通信组件
+ * 描述:关闭客户端通信组件,关闭完成后断开与服务端的连接并释放所有资源
+ *
+ * 参数:
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败,可通过 GetLastError() 获取错误代码
+ */ }
+function HP_Client_Stop(pClient: HP_Client): BOOL; stdcall; external HPSocketDLL;
+
+{ TODO
+ * 名称:发送数据
+ * 描述:向服务端发送数据
+ *
+ * 参数: pBuffer -- 发送缓冲区
+ * iLength -- 发送缓冲区长度
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败,可通过 Windows API 函数 ::GetLastError() 获取 Windows 错误代码
+ */ }
+function HP_Client_Send(pClient: HP_Client; const pBuffer: Pointer; iLength: Integer): BOOL; stdcall; external HPSocketDLL;
+
+{ TODO
+ * 名称:发送数据
+ * 描述:向服务端发送数据
+ *
+ * 参数: pBuffer -- 发送缓冲区
+ * iLength -- 发送缓冲区长度
+ * iOffset -- 发送缓冲区指针偏移量
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败,可通过 Windows API 函数 ::GetLastError() 获取 Windows 错误代码
+ */ }
+function HP_Client_SendPart(pClient: HP_Client; const pBuffer: Pointer; iLength: Integer; iOffset: Integer): BOOL;
+stdcall; external HPSocketDLL;
+
+{ TODO
+ * 名称:发送多组数据
+ * 描述:向服务端发送多组数据
+ * TCP - 顺序发送所有数据包
+ * UDP - 把所有数据包组合成一个数据包发送(数据包的总长度不能大于设置的 UDP 包最大长度)
+ *
+ * 参数: pBuffers -- 发送缓冲区数组
+ * iCount -- 发送缓冲区数目
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败,可通过 Windows API 函数 ::GetLastError() 获取 Windows 错误代码
+ */ }
+function HP_Client_SendPackets(pClient: HP_Client; const pBuffers: WSABUFArray; iCount: Integer): BOOL; stdcall; external HPSocketDLL;
+
+{ /******************************************************************************/
+ /***************************** Client 属性访问方法 *****************************/ }
+
+{ TODO 设置连接的附加数据 */ }
+procedure HP_Client_SetExtra(pClient: HP_Client; pExtra: Pointer); stdcall; external HPSocketDLL;
+{ TODO 获取连接的附加数据 */ }
+function HP_Client_GetExtra(pClient: HP_Client): Pointer; stdcall; external HPSocketDLL;
+
+{ TODO 检查通信组件是否已启动 */ }
+function HP_Client_HasStarted(pClient: HP_Client): BOOL; stdcall; external HPSocketDLL;
+{ TODO 查看通信组件当前状态 */ }
+function HP_Client_GetState(pClient: HP_Client): En_HP_ServiceState; stdcall; external HPSocketDLL;
+{ TODO 获取最近一次失败操作的错误代码 */ }
+function HP_Client_GetLastError(pClient: HP_Client): En_HP_SocketError; stdcall; external HPSocketDLL;
+{ TODO 获取最近一次失败操作的错误描述 */ }
+function HP_Client_GetLastErrorDesc(pClient: HP_Client): PWideChar; stdcall; external HPSocketDLL;
+{ TODO 获取该组件对象的连接 ID */ }
+function HP_Client_GetConnectionID(pClient: HP_Client): HP_CONNID; stdcall; external HPSocketDLL;
+{ TODO 获取 Client Socket 的地址信息 */ }
+function HP_Client_GetLocalAddress(pClient: HP_Client; lpszAddress: PWideChar; piAddressLen: PInteger; pusPort: PUShort): BOOL;
+stdcall; external HPSocketDLL;
+{ TODO 获取连接中未发出数据的长度 */ }
+function HP_Client_GetPendingDataLength(pClient: HP_Client; piPending: PInteger): BOOL; stdcall; external HPSocketDLL;
+{ TODO 设置内存块缓存池大小(通常设置为 -> PUSH 模型:5 - 10;PULL 模型:10 - 20 ) */ }
+procedure HP_Client_SetFreeBufferPoolSize(pClient: HP_Client; dwFreeBufferPoolSize: LongInt); stdcall; external HPSocketDLL;
+{ TODO 设置内存块缓存池回收阀值(通常设置为内存块缓存池大小的 3 倍) */ }
+procedure HP_Client_SetFreeBufferPoolHold(pClient: HP_Client; dwFreeBufferPoolHold: LongInt); stdcall; external HPSocketDLL;
+{ TODO 获取内存块缓存池大小 */ }
+function HP_Client_GetFreeBufferPoolSize(pClient: HP_Client): LongInt; stdcall; external HPSocketDLL;
+{ TODO 获取内存块缓存池回收阀值 */ }
+function HP_Client_GetFreeBufferPoolHold(pClient: HP_Client): LongInt; stdcall; external HPSocketDLL;
+
+{ /**********************************************************************************/
+ /******************************* TCP Client 操作方法 *******************************/ }
+
+{ /*
+ * 名称:发送小文件
+ * 描述:向服务端发送 4096 KB 以下的小文件
+ *
+ * 参数: lpszFileName -- 文件路径
+ * pHead -- 头部附加数据
+ * pTail -- 尾部附加数据
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败,可通过 Windows API 函数 ::GetLastError() 获取 Windows 错误代码
+ */ }
+function HP_TcpClient_SendSmallFile(pClient: HP_Client; lpszFileName: PWideChar; const pHead: LPWSABUF; const pTail: LPWSABUF): BOOL;
+stdcall; external HPSocketDLL;
+
+{ /**********************************************************************************/
+ /***************************** TCP Client 属性访问方法 *****************************/ }
+
+{ TODO 设置通信数据缓冲区大小(根据平均通信数据包大小调整设置,通常设置为:(N * 1024) - sizeof(TBufferObj)) */ }
+procedure HP_TcpClient_SetSocketBufferSize(pClient: HP_TcpClient; dwSocketBufferSize: LongInt); stdcall; external HPSocketDLL;
+{ TODO 设置心跳包间隔(毫秒,0 则不发送心跳包) */ }
+procedure HP_TcpClient_SetKeepAliveTime(pClient: HP_TcpClient; dwKeepAliveTime: LongInt); stdcall; external HPSocketDLL;
+{ TODO 设置心跳确认包检测间隔(毫秒,0 不发送心跳包,如果超过若干次 [默认:WinXP 5 次, Win7 10 次] 检测不到心跳确认包则认为已断线) */ }
+procedure HP_TcpClient_SetKeepAliveInterval(pClient: HP_TcpClient; dwKeepAliveInterval: LongInt); stdcall; external HPSocketDLL;
+
+{ TODO 获取通信数据缓冲区大小 */ }
+function HP_TcpClient_GetSocketBufferSize(pClient: HP_TcpClient): LongInt; stdcall; external HPSocketDLL;
+{ TODO 获取心跳检查次数 */ }
+function HP_TcpClient_GetKeepAliveTime(pClient: HP_TcpClient): LongInt; stdcall; external HPSocketDLL;
+{ TODO 获取心跳检查间隔 */ }
+function HP_TcpClient_GetKeepAliveInterval(pClient: HP_TcpClient): LongInt; stdcall; external HPSocketDLL;
+
+{***************************** UDP Client 属性访问方法 *****************************/ }
+
+{ TODO 设置数据报文最大长度(建议在局域网环境下不超过 1472 字节,在广域网环境下不超过 548 字节) */ }
+procedure HP_UdpClient_SetMaxDatagramSize(pClient: HP_UdpClient; dwMaxDatagramSize: LongInt); stdcall; external HPSocketDLL;
+{ TODO 获取数据报文最大长度 */ }
+function HP_UdpClient_GetMaxDatagramSize(pClient: HP_UdpClient): LongInt; stdcall; external HPSocketDLL;
+
+{ TODO 设置监测包尝试次数(0 则不发送监测跳包,如果超过最大尝试次数则认为已断线) */ }
+procedure HP_UdpClient_SetDetectAttempts(pClient: HP_UdpClient; dwDetectAttempts: LongInt); stdcall; external HPSocketDLL;
+{ TODO 设置监测包发送间隔(秒,0 不发送监测包) */ }
+procedure HP_UdpClient_SetDetectInterval(pClient: HP_UdpClient; dwDetectInterval: LongInt); stdcall; external HPSocketDLL;
+{ TODO 获取心跳检查次数 */ }
+function HP_UdpClient_GetDetectAttempts(pClient: HP_UdpClient): LongInt; stdcall; external HPSocketDLL;
+{ TODO 获取心跳检查间隔 */ }
+function HP_UdpClient_GetDetectInterval(pClient: HP_UdpClient): LongInt; stdcall; external HPSocketDLL;
+
+{ ***************************** UDP Cast 属性访问方法 *****************************/ }
+{TODO 设置数据报文最大长度(建议在局域网环境下不超过 1472 字节,在广域网环境下不超过 548 字节) */}
+procedure HP_UdpCast_SetMaxDatagramSize(pCast: HP_UdpCast; dwMaxDatagramSize: LongInt); stdcall; external HPSocketdll;
+{TODO 获取数据报文最大长度 */ }
+function HP_UdpCast_GetMaxDatagramSize(pCast: HP_UdpCast): LongInt; stdcall; external HPSocketdll;
+{TODO 获取当前数据报的远程地址信息(通常在 OnReceive 事件中调用) */ }
+function HP_UdpCast_GetRemoteAddress(pCast: HP_UdpCast; lpszAddress: PWideChar; piAddresslen: PInteger; pusPort: PUShort): BOOL;
+stdcall; external HPSocketDLL;
+{TODO 设置绑定地址 */ }
+procedure HP_UdpCast_SetBindAdddress(pCast: HP_UdpCast; pszBindAddress: PWideChar); stdcall; external HPSocketDll;
+{TODO 获取绑定地址 */ }
+function HP_UdpCast_GetBindAdddress(pCast: HP_UdpCast): WideChar; stdcall external HPSocketDll;
+{TODO 设置是否启用地址重用机制(默认:不启用) */ }
+procedure HP_UdpCast_SetReuseAddress(pCast: HP_UdpCast; bReuseAddress: BOOL); stdcall; external HPSocketDll;
+{TODO 检测是否启用地址重用机制 */ }
+function HP_UdpCast_IsReuseAddress(pCast: HP_UdpCast): BOOL; stdcall; external HPSocketDll;
+{TODO 设置传播模式(组播或广播) */ }
+procedure HP_UdpCast_SetCastMode(pCast: HP_UdpCast; enCastMode: En_HP_CastMode); stdcall; external HPSocketDll;
+{TODO 获取传播模式 */ }
+function HP_UdpCast_GetCastMode(pCast: HP_UdpCast): En_HP_CastMode; stdcall; external HPSocketDll;
+{TODO 设置组播报文的 TTL(0 - 255) */ }
+procedure HP_UdpCast_SetMultiCastTtl(PChar: HP_UdpCast; iMCTtl: LongInt); stdcall; external HPSocketDll;
+{TODO 获取组播报文的 TTL */ }
+function HP_UdpCast_GetMultiCastTtl(PChar: HP_UdpCast): LongInt; stdcall; external HPSocketDll;
+{TODO 设置是否启用组播环路(TRUE or FALSE) */ }
+procedure HP_UdpCast_SetMultiCastLoop(PChar: HP_UdpCast; bMCLoop: BOOL); stdcall; external HPSocketDll;
+{TODO 检测是否启用组播环路 */ }
+function HP_UdpCast_IsMultiCastLoop(PChar: HP_UdpCast): BOOL; stdcall; external HPSocketDll;
+
+{ **************************** TCP Pull Server 组件操作方法 *****************************/ }
+
+{TODO
+ * 名称:抓取数据
+ * 描述:用户通过该方法从 Socket 组件中抓取数据
+ *
+ * 参数: dwConnID -- 连接 ID
+ * pBuffer -- 数据抓取缓冲区
+ * iLength -- 抓取数据长度
+ * 返回值: En_HP_FetchResult
+ */ }
+function HP_TcpPullServer_Fetch(pServer: HP_TcpPullServer; dwConnID: HP_CONNID; pData: Pointer; iLength: Integer): En_HP_FetchResult;
+stdcall; external HPSocketDLL;
+
+{ TODO
+* 名称:窥探数据(不会移除缓冲区数据)
+* 描述:用户通过该方法从 Socket 组件中窥探数据
+*
+* 参数: dwConnID -- 连接 ID
+* pData -- 窥探缓冲区
+* iLength -- 窥探数据长度
+* 返回值: En_HP_FetchResult
+*/ }
+function HP_TcpPullServer_Peek(pServer: HP_TcpPullServer; dwConnID: HP_CONNID; pData: Pointer; iLength: Integer): En_HP_FetchResult;
+stdcall; external HPSocketDLL;
+
+{ /***************************************************************************************/
+ /***************************** TCP Pull Server 属性访问方法 *****************************/ }
+
+{ /***************************************************************************************/
+ /***************************** TCP Pull Agent 组件操作方法 *****************************/ }
+
+{ TODO
+ * 名称:抓取数据
+ * 描述:用户通过该方法从 Socket 组件中抓取数据
+ *
+ * 参数: dwConnID -- 连接 ID
+ * pBuffer -- 数据抓取缓冲区
+ * iLength -- 抓取数据长度
+ * 返回值: En_HP_FetchResult
+ */ }
+function HP_TcpPullAgent_Fetch(pAgent: HP_TcpPullAgent; dwConnID: HP_CONNID; pBuffer: Pointer; iLength: Integer): En_HP_FetchResult;
+stdcall; external HPSocketDLL;
+
+{TODO* 名称:窥探数据(不会移除缓冲区数据)
+* 描述:用户通过该方法从 Socket 组件中窥探数据
+*
+* 参数: dwConnID -- 连接 ID
+* pData -- 窥探缓冲区
+* iLength -- 窥探数据长度
+* 返回值: En_HP_FetchResult }
+function HP_TcpPullAgent_Peek(pAgent: HP_TcpPullAgent; dwConnID: HP_CONNID; pBuffer: Pointer; iLength: Integer): En_HP_FetchResult;
+stdcall; external HPSocketDLL;
+
+{ ***************************** TCP Pull Client 组件操作方法 *****************************/ }
+{ TODO
+* 名称:抓取数据
+* 描述:用户通过该方法从 Socket 组件中抓取数据
+*
+* 参数: dwConnID -- 连接 ID
+* pData -- 抓取缓冲区
+* iLength -- 抓取数据长度
+* 返回值: En_HP_FetchResult
+ */ }
+function HP_TcpPullClient_Fetch(pClient: HP_TcpPullClient; pData: Pointer; iLength: Integer): En_HP_FetchResult;
+stdcall; external HPSocketDLL;
+
+{ TODO
+* 名称:窥探数据(不会移除缓冲区数据)
+* 描述:用户通过该方法从 Socket 组件中窥探数据
+*
+* 参数: dwConnID -- 连接 ID
+* pData -- 窥探缓冲区
+* iLength -- 窥探数据长度
+* 返回值: En_HP_FetchResult
+*/ }
+function HP_TcpPullClient_Peek(pClient: HP_TcpPullClient; pData: Pointer; iLength: Integer): En_HP_FetchResult;
+stdcall; external HPSocketDLL;
+{/***************************** TCP Pack Server 属性访问方法 *****************************/ }
+
+{TODO/* 设置数据包最大长度(有效数据包最大长度不能超过 524287/0x7FFFF 字节,默认:262144/0x40000) */}
+procedure HP_TcpPackServer_SetMaxPackSize(pServer: HP_TcpPackServer ; dwMaxPackSize: LongWord); stdcall; external HPSocketDLL;
+{TODO 设置包头标识(有效包头标识取值范围 0 ~ 8191/0x1FFF,当包头标识为 0 时不校验包头,默认:0) */ }
+procedure HP_TcpPackServer_SetPackHeaderFlag(pServer: HP_TcpPackServer ; usPackHeaderFlag: Word); stdcall; external HPSocketDLL;
+
+{TODO 获取数据包最大长度 */ }
+function HP_TcpPackServer_GetMaxPackSize(pServer: HP_TcpPackServer): LongWord; stdcall; external HPSocketDLL;
+{TODO 获取包头标识 */ }
+function HP_TcpPackServer_GetPackHeaderFlag(pServer: HP_TcpPackServer): Word; stdcall; external HPSocketDLL;
+
+//***************************** TCP Pack Agent 属性访问方法 *****************************/
+
+{TODO 设置数据包最大长度(有效数据包最大长度不能超过 524287/0x7FFFF 字节,默认:262144/0x40000) */}
+procedure HP_TcpPackAgent_SetMaxPackSize(pAgent: HP_TcpPackAgent; dwMaxPackSize: LongWord); stdcall; external HPSocketDLL;
+{TODO 设置包头标识(有效包头标识取值范围 0 ~ 8191/0x1FFF,当包头标识为 0 时不校验包头,默认:0) */ }
+procedure HP_TcpPackAgent_SetPackHeaderFlag(pAgent: HP_TcpPackAgent; usPackHeaderFlag: Word); stdcall; external HPSocketDLL;
+
+{TODO 获取数据包最大长度 */ }
+function HP_TcpPackAgent_GetMaxPackSize(pAgent: HP_TcpPackAgent): LongWord; stdcall; external HPSocketDLL;
+{TODO 获取包头标识 */ }
+function HP_TcpPackAgent_GetPackHeaderFlag(pAgent: HP_TcpPackAgent): Word; stdcall; external HPSocketDLL;
+
+//***************************** TCP Pack Client 属性访问方法 *****************************/
+
+{TODO 设置数据包最大长度(有效数据包最大长度不能超过 524287/0x7FFFF 字节,默认:262144/0x40000) */ }
+procedure HP_TcpPackClient_SetMaxPackSize(pClient: HP_TcpPackAgent; dwMaxPackSize: LongWord); stdcall; external HPSocketDLL;
+{TODO 设置包头标识(有效包头标识取值范围 0 ~ 8191/0x1FFF,当包头标识为 0 时不校验包头,默认:0) */ }
+procedure HP_TcpPackClient_SetPackHeaderFlag(pClient: HP_TcpPackAgent; usPackHeaderFlag: Word); stdcall; external HPSocketDLL;
+
+{TODO 获取数据包最大长度 */ }
+function HP_TcpPackClient_GetMaxPackSize(pClient: HP_TcpPackAgent): LongWord; stdcall; external HPSocketDLL;
+{TODO 获取包头标识 */ }
+function HP_TcpPackClient_GetPackHeaderFlag(pClient: HP_TcpPackAgent): Word; stdcall; external HPSocketDLL;
+
+{ ************************************** 其它方法 ***************************************/ }
+{ /* 获取错误描述文本 */ }
+function HP_GetSocketErrorDesc(enCode: En_HP_SocketError): PWideChar; stdcall; external HPSocketDLL;
+{ /* 调用系统的 ::GetLastError() 方法获取系统错误代码 */ }
+function SYS_GetLastError(): LongInt; stdcall; external HPSocketDLL;
+// 调用系统的 ::WSAGetLastError() 方法获取通信错误代码
+function SYS_WSAGetLastError(): Integer; stdcall; external HPSocketDLL;
+// 调用系统的 setsockopt()
+function SYS_SetSocketOption(sock: SOCKET; level: Integer; name: Integer; val: pointer; len: Integer): Integer; stdcall; external HPSocketDLL;
+// 调用系统的 getsockopt()
+function SYS_GetSocketOption(sock: SOCKET; level: Integer; name: Integer; val: Pointer; len: PInteger): Integer; stdcall; external HPSocketDLL;
+// 调用系统的 ioctlsocket()
+function SYS_IoctlSocket(sock: SOCKET; cmd: LongInt; arg: PULONG): Integer; stdcall; external HPSocketDLL;
+// 调用系统的 ::WSAIoctl()
+function SYS_WSAIoctl(sock: SOCKET; dwIoControlCode: LongInt; lpvInBuffer: pointer; cbInBuffer: LongInt; lpvOutBuffer: pointer; cbOutBuffer: LongInt; lpcbBytesReturned: LPDWORD): Integer; stdcall; external HPSocketDLL;
+
+
+implementation
+
+
+initialization
+ IsMultiThread := True;
+end.
+
+
\ No newline at end of file
diff --git a/HP-Socket/Demo/Other Languages Demos/Delphi/Server/HPSocket4C_U.dll b/HP-Socket/Demo/Other Languages Demos/Delphi/Server/HPSocket4C_U.dll
new file mode 100644
index 000000000..bd55ff24b
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/Delphi/Server/HPSocket4C_U.dll differ
diff --git a/HP-Socket/Demo/Other Languages Demos/Delphi/Server/HPSocketSDKUnit.dcu b/HP-Socket/Demo/Other Languages Demos/Delphi/Server/HPSocketSDKUnit.dcu
new file mode 100644
index 000000000..ffdf5a2ce
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/Delphi/Server/HPSocketSDKUnit.dcu differ
diff --git a/HP-Socket/Demo/Other Languages Demos/Delphi/Server/HPSocketSDKUnit.pas b/HP-Socket/Demo/Other Languages Demos/Delphi/Server/HPSocketSDKUnit.pas
new file mode 100644
index 000000000..8c26b6f0c
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/Delphi/Server/HPSocketSDKUnit.pas
@@ -0,0 +1,1147 @@
+// _ooOoo_
+
// o8888888o
+// 88" . "88
+// (| -_- |)
+// O\ = /O
+// ____/`---'\____
+// . ' \\| |// `.
+// / \\||| : |||// \
+// / _||||| -:- |||||- \
+// | | \\\ - /// | |
+// | \_| ''\---/'' | |
+// \ .-\__ `-` ___/-. /
+// ___`. .' /--.--\ `. . __
+// ."" '< `.___\_<|>_/___.' >'"".
+// | | : `- \`.;`\ _ /`;.`/ - ` : | |
+// \ \ `-. \_ __\ /__ _/ .-` / /
+// ======`-.____`-.___\_____/___.-`____.-'======
+// `=---='
+//
+// .............................................
+// 佛祖镇楼 BUG辟易
+// 佛曰:
+// 写字楼里写字间,写字间里程序员;
+// 程序人员写程序,又拿程序换酒钱。
+// 酒醒只在网上坐,酒醉还来网下眠;
+// 酒醉酒醒日复日,网上网下年复年。
+// 但愿老死电脑间,不愿鞠躬老板前;
+// 奔驰宝马贵者趣,公交自行程序员。
+// 别人笑我忒疯癫,我笑自己命太贱;
+// 不见满街漂亮妹,哪个归得程序员?
+
unit HPSocketSDKUnit;
+
+interface
+
+uses
+ Windows, SysUtils,DateUtils,StrUtils;
+
+const
+ HPSocketDLL = 'HPSocket4C_U.dll';
+
+type
+{$Z4}
+ SOCKET = Pointer;
+
+ WSABUF = Record
+ len: ULONG; { the length of the buffer }
+ buf: PChar; { the pointer to the buffer }
+ end { WSABUF };
+
+ PWSABUF = ^WSABUF;
+ LPWSABUF = PWSABUF;
+
+ WSABUFArray = array of WSABUF;
+
+ PInteger = ^Integer;
+ PUShort = ^Word;
+ { /************************************************************************
+ 名称:连接 ID 数据类型
+ 描述:定义连接 ID 的数据类型
+ ************************************************************************/ }
+ HP_CONNID = DWORD;
+ PHP_CONNID = ^HP_CONNID;
+ HP_CONNIDArray = array of HP_CONNID; { TODO : 这个数组变量用来获取所有连接id }
+ { /************************************************************************
+ 名称:定义 Socket 对象指针类型别名
+ 描述:把 Socket 对象指针定义为更直观的别名
+ ************************************************************************/ }
+ HP_Object = longint;
+
+ HP_Server = HP_Object;
+ HP_Agent = HP_Object;
+ HP_Client = HP_Object;
+ HP_TcpServer = HP_Object;
+ HP_HttpServer = HP_Object;
+ HP_TcpAgent = HP_Object;
+ HP_TcpClient = HP_Object;
+ HP_PullSocket = HP_Object;
+ HP_PullClient = HP_Object;
+ HP_TcpPullServer = HP_Object;
+ HP_TcpPullAgent = HP_Object;
+ HP_TcpPullClient = HP_Object;
+ HP_PackSocket = HP_Object;
+ HP_PackClient = HP_Object;
+ HP_TcpPackServer = HP_Object;
+ HP_TcpPackAgent = HP_Object;
+ HP_TcpPackClient = HP_Object;
+ HP_UdpServer = HP_Object;
+ HP_UdpClient = HP_Object;
+ HP_UdpCast = HP_Object;
+
+ HP_Listener = HP_Object;
+ HP_ServerListener = HP_Object;
+ HP_AgentListener = HP_Object;
+ HP_ClientListener = HP_Object;
+ HP_TcpServerListener = HP_Object;
+ HP_HttpServerListener = HP_Object;
+ HP_TcpAgentListener = HP_Object;
+ HP_TcpClientListener = HP_Object;
+ HP_PullSocketListener = HP_Object;
+ HP_PullClientListener = HP_Object;
+ HP_TcpPullServerListener = HP_Object;
+ HP_TcpPullAgentListener = HP_Object;
+ HP_TcpPullClientListener = HP_Object;
+ HP_UdpServerListener = HP_Object;
+ HP_UdpClientListener = HP_Object;
+ HP_UdpCastListener = HP_Object;
+
+ {******************************************** 公共类、接口 ********************************************/}
+
+ {TODO:/************************************************************************
+ 名称:通信组件服务状态
+ 描述:应用程序可以通过通信组件的 GetState() 方法获取组件当前服务状态
+ ************************************************************************ }
+ En_HP_ServiceState = (
+ HP_SS_STARTING = 0, // 正在启动
+ HP_SS_STARTED = 1, // 已经启动
+ HP_SS_STOPING = 2, // 正在停止
+ HP_SS_STOPED = 3 // 已经停止
+ );
+
+ { TODO:************************************************************************
+ 名称:Socket 操作类型
+ 描述:应用程序的 OnErrror() 事件中通过该参数标识是哪种操作导致的错误
+ ************************************************************************ }
+ En_HP_SocketOperation = (
+ HP_SO_UNKNOWN = 0, // Unknown
+ HP_SO_ACCEPT = 1, // Acccept
+ HP_SO_CONNECT = 2, // Connnect
+ HP_SO_SEND = 3, // Send
+ HP_SO_RECEIVE = 4, // Receive
+ HP_SO_CLOSE = 5 // Close
+ );
+
+ {TODO: ************************************************************************
+ 名称:事件通知处理结果
+ 描述:事件通知的返回值,不同的返回值会影响通信组件的后续行为
+ ************************************************************************ }
+ En_HP_HandleResult = (
+ HP_HR_OK = 0, // 成功处理
+ HP_HR_IGNORE = 1, // 忽略处理
+ HP_HR_ERROR = 2 // 错误处理
+ );
+
+ { TODO:/************************************************************************
+ 名称:数据抓取结果
+ 描述:数据抓取操作的返回值
+ ************************************************************************/ }
+ En_HP_FetchResult = (
+ HP_FR_OK = 0, // 成功
+ HP_FR_LENGTH_TOO_LONG = 1, // 抓取长度过大
+ HP_FR_DATA_NOT_FOUND = 2 // 找不到 ConnID 对应的数据
+ );
+
+ { TODO:/************************************************************************
+ 名称:数据发送策略
+ 描述:Server 组件和 Agent 组件的数据发送策略
+
+ * 打包模式(默认) :尽量把多个发送操作的数据组合在一起发送,增加传输效率
+ * 安全模式 :尽量把多个发送操作的数据组合在一起发送,并控制传输速度,避免缓冲区溢出
+ * 直接模式 :对每一个发送操作都直接投递,适用于负载不高但要求实时性较高的场合
+
+ ************************************************************************/ }
+ En_HP_SendPolicy = (
+ HP_SP_PACK = 0, // 打包模式(默认)
+ HP_SP_SAFE = 1, // 安全模式
+ HP_SP_DIRECT = 2 // 直接模式
+ );
+
+ { TODO:************************************************************************
+ 名称:操作结果代码
+ 描述:Start() / Stop() 方法执行失败时,可通过 GetLastError() 获取错误代码
+ ************************************************************************ }
+ En_HP_SocketError = (
+ HP_SE_OK = 0, // 成功
+ HP_SE_ILLEGAL_STATE = 1, // 当前状态不允许操作
+ HP_SE_INVALID_PARAM = 2, // 非法参数
+ HP_SE_SOCKET_CREATE = 3, // 创建 SOCKET 失败
+ HP_SE_SOCKET_BIND = 4, // 绑定 SOCKET 失败
+ HP_SE_SOCKET_PREPARE = 5, // 设置 SOCKET 失败
+ HP_SE_SOCKET_LISTEN = 6, // 监听 SOCKET 失败
+ HP_SE_CP_CREATE = 7, // 创建完成端口失败
+ HP_SE_WORKER_THREAD_CREATE = 8, // 创建工作线程失败
+ HP_SE_DETECT_THREAD_CREATE = 9, // 创建监测线程失败
+ HP_SE_SOCKE_ATTACH_TO_CP = 10, // 绑定完成端口失败
+ HP_SE_CONNECT_SERVER = 11, // 连接服务器失败
+ HP_SE_NETWORK = 12, // 网络错误
+ HP_SE_DATA_PROC = 13, // 数据处理错误
+ HP_SE_DATA_SEND = 14, // 数据发送失败
+
+ //***** SSL Socket 扩展操作结果代码 *****/
+ HP_SE_SSL_ENV_NOT_READY = 101 // SSL 环境未就绪
+ );
+
+ {TODO:
+ /************************************************************************
+ 名称:播送模式
+ 描述:UDP 组件的播送模式(组播或广播)
+ ************************************************************************/}
+ En_HP_CastMode = (
+ HP_CM_MULTICAST = 0, // 组播
+ HP_CM_BROADCAST = 1 // 广播
+ );
+
+
+ { /************** HPSocket4C.dll 回调函数 **************/ }
+ {TODO: /* Tcp服务端回调函数 */ }
+ HP_FN_Server_OnPrepareListen = function(soListen: Pointer): En_HP_HandleResult; stdcall;
+ // 如果为 TCP 连接,pClient为 SOCKET 句柄;如果为 UDP 连接,pClient为 SOCKADDR_IN 指针;
+ HP_FN_Server_OnAccept = function(dwConnID: HP_CONNID; pClient: Pointer): En_HP_HandleResult; stdcall;
+ HP_FN_Server_OnHandShake = function(dwConnID: HP_CONNID): En_HP_HandleResult; stdcall;
+ HP_FN_Server_OnSend = function(dwConnID: HP_CONNID; const pData: Pointer; iLength: Integer): En_HP_HandleResult; stdcall;
+ HP_FN_Server_OnReceive = function(dwConnID: HP_CONNID; const pData: Pointer; iLength: Integer): En_HP_HandleResult; stdcall;
+ HP_FN_Server_OnPullReceive = function(dwConnID: HP_CONNID; iLength: Integer): En_HP_HandleResult; stdcall;
+ HP_FN_Server_OnClose = function(dwConnID: HP_CONNID; enOperation: En_HP_SocketOperation; iErrorCode: Integer): En_HP_HandleResult; stdcall;
+ HP_FN_Server_OnShutdown = function(): En_HP_HandleResult; stdcall;
+
+ {TODO: /* Agent 回调函数 */ }
+ HP_FN_Agent_OnPrepareConnect = function(dwConnID: HP_CONNID; SOCKET: Pointer): En_HP_HandleResult; stdcall;
+ HP_FN_Agent_OnConnect = function(dwConnID: HP_CONNID): En_HP_HandleResult; stdcall;
+ HP_FN_Agent_OnHandShake = function(dwConnID: HP_CONNID): En_HP_HandleResult; stdcall;
+ HP_FN_Agent_OnSend = function(dwConnID: HP_CONNID; const pData: Pointer; iLength: Integer): En_HP_HandleResult; stdcall;
+ HP_FN_Agent_OnReceive = function(dwConnID: HP_CONNID; const pData: Pointer; iLength: Integer): En_HP_HandleResult; stdcall;
+ HP_FN_Agent_OnPullReceive = function(dwConnID: HP_CONNID; iLength: Integer): En_HP_HandleResult; stdcall;
+ HP_FN_Agent_OnClose = function(dwConnID: HP_CONNID; enOperation: En_HP_SocketOperation; iErrorCode: Integer): En_HP_HandleResult; stdcall;
+ HP_FN_Agent_OnShutdown = function(): En_HP_HandleResult; stdcall;
+
+ {TODO: /* Client 回调函数 */ }
+ HP_FN_Client_OnPrepareConnect = function(pClient: HP_Client; SOCKET: Pointer): En_HP_HandleResult; stdcall;
+ HP_FN_Client_OnConnect = function(pClient: HP_Client): En_HP_HandleResult; stdcall;
+ HP_FN_Client_OnHandShake = function(pClient: HP_Client): En_HP_HandleResult; stdcall;
+ HP_FN_Client_OnSend = function(pClient: HP_Client; const pData: Pointer; iLength: Integer): En_HP_HandleResult; stdcall;
+ HP_FN_Client_OnReceive = function(pClient: HP_Client; const pData: Pointer; iLength: Integer): En_HP_HandleResult; stdcall;
+ HP_FN_Client_OnPullReceive = function(pClient: HP_Client; iLength: Integer): En_HP_HandleResult; stdcall;
+ HP_FN_Client_OnClose = function(pClient: HP_Client; enOperation: En_HP_SocketOperation; iLength: Integer): En_HP_HandleResult; stdcall;
+
+ { /****************************************************/
+ /************** HPSocket4C.dll 导出函数 **************/ }
+ {TODO: 创建 HP_TcpServer 对象 }
+function Create_HP_TcpServer(pListener: HP_TcpServerListener): HP_TcpServer; stdcall; external HPSocketDLL;
+ {TODO: 创建 HP_HttpServer 对象 }
+function Create_HP_HttpServer(pListener: HP_HttpServerListener): HP_HttpServer; stdcall; external HPSocketDLL;
+ {TODO: 创建 HP_TcpAgent 对象 }
+function Create_HP_TcpAgent(pListener: HP_TcpAgentListener): HP_TcpAgent; stdcall; external HPSocketDLL;
+ {TODO: 创建 HP_TcpClient 对象 }
+function Create_HP_TcpClient(pListener: HP_TcpClientListener): HP_TcpClient; stdcall; external HPSocketDLL;
+ {TODO: 创建 HP_TcpPullServer 对象 }
+function Create_HP_TcpPullServer(pListener: HP_TcpPullServerListener): HP_TcpPullServer; stdcall; external HPSocketDLL;
+ {TODO: 创建 HP_TcpPullAgent 对象 }
+function Create_HP_TcpPullAgent(pListener: HP_TcpPullAgentListener): HP_TcpPullAgent; stdcall; external HPSocketDLL;
+ {TODO: 创建 HP_TcpPullClient 对象}
+function Create_HP_TcpPullClient(pListener: HP_TcpPullClientListener): HP_TcpPullClient; stdcall; external HPSocketDLL;
+ {TODO: 创建 HP_TcpPackServer 对象 }
+function Create_HP_TcpPackServer(pListener: HP_TcpServerListener): HP_TcpPackServer; stdcall; external HPSocketDLL;
+ {TODO: 创建 HP_TcpPackAgent 对象 }
+function Create_HP_TcpPackAgent(pListener: HP_TcpAgentListener): HP_TcpPackAgent; stdcall; external HPSocketDLL;
+ {TODO: 创建 HP_TcpPackClient 对象}
+function Create_HP_TcpPackClient(pListener: HP_TcpClientListener): HP_TcpPackClient; stdcall; external HPSocketDLL;
+ {TODO: 创建 HP_UdpServer 对象 }
+function Create_HP_UdpServer(pListener: HP_UdpServerListener): HP_UdpServer; stdcall; external HPSocketDLL;
+ {TODO: 创建 HP_UdpClient 对象 }
+function Create_HP_UdpClient(pListener: HP_UdpClientListener): HP_UdpClient; stdcall; external HPSocketDLL;
+ {TODO: 创建 HP_UdpCast 对象 }
+function Create_HP_UdpCast(pListener: HP_UdpCastListener): HP_UdpCast; stdcall; external HPSocketDLL;
+
+ {TODO: 销毁 HP_TcpServer 对象 }
+procedure Destroy_HP_TcpServer(pServer: HP_TcpServer); stdcall; external HPSocketDLL;
+ {TODO: 销毁 HP_HttpServer 对象 }
+procedure Destroy_HP_HttpServer(pServer: HP_HttpServer); stdcall; external HPSocketDLL;
+ {TODO: 销毁 HP_TcpAgent 对象 }
+procedure Destroy_HP_TcpAgent(pAgent: HP_TcpAgent); stdcall; external HPSocketDLL;
+ {TODO: 销毁 HP_TcpClient 对象 }
+procedure Destroy_HP_TcpClient(pClient: HP_TcpClient); stdcall; external HPSocketDLL;
+ {TODO: 销毁 HP_TcpPullServer 对象 }
+procedure Destroy_HP_TcpPullServer(pServer: HP_TcpPullServer); stdcall; external HPSocketDLL;
+ {TODO: 销毁 HP_TcpPullAgent 对象 }
+procedure Destroy_HP_TcpPullAgent(pAgent: HP_TcpPullAgent); stdcall; external HPSocketDLL;
+ {TODO: 销毁 HP_TcpPullClient 对象 }
+procedure Destroy_HP_TcpPullClient(pClient: HP_TcpPullClient); stdcall; external HPSocketDLL;
+ {TODO: 销毁 HP_TcpPackServer 对象 }
+procedure Destroy_HP_TcpPackServer(pServer: HP_TcpPackServer); stdcall; external HPSocketDLL;
+ {TODO: 销毁 HP_TcpPackAgent 对象 }
+procedure Destroy_HP_TcpPackAgent(pAgent: HP_TcpPackAgent); stdcall; external HPSocketDLL;
+ {TODO: 销毁 HP_TcpPackClient 对象 }
+procedure Destroy_HP_TcpPackClient(pClient: HP_TcpPackClient); stdcall; external HPSocketDLL;
+ {TODO: 销毁 HP_UdpServer 对象 }
+procedure Destroy_HP_UdpServer(pServer: HP_UdpServer); stdcall; external HPSocketDLL;
+ {TODO: 销毁 HP_UdpClient 对象 }
+procedure Destroy_HP_UdpClient(pClient: HP_UdpClient); stdcall; external HPSocketDLL;
+ {TODO: 销毁 HP_UdpCast 对象 }
+procedure Destroy_HP_UdpCast(pCast: HP_UdpCast); stdcall; external HPSocketDLL;
+
+ {TODO: 创建 HP_TcpServerListener and HP_TcpPackServerListener 对象 }
+function Create_HP_TcpServerListener(): HP_TcpServerListener; stdcall; external HPSocketDLL;
+ {TODO: 创建 HP_HttpServerListener 对象 }
+function Create_HP_HttpServerListener(): HP_HttpServerListener; stdcall; external HPSocketDLL;
+ {TODO: 创建 HP_TcpAgentListener 对象 }
+function Create_HP_TcpAgentListener(): HP_TcpAgentListener; stdcall; external HPSocketDLL;
+ {TODO: 创建 HP_TcpClientListener 对象 }
+function Create_HP_TcpClientListener(): HP_TcpClientListener; stdcall; external HPSocketDLL;
+ {TODO: 创建 HP_TcpPullServerListener 对象 }
+function Create_HP_TcpPullServerListener(): HP_TcpPullServerListener; stdcall; external HPSocketDLL;
+ {TODO: 创建 HP_TcpPullAgentListener 对象 }
+function Create_HP_TcpPullAgentListener(): HP_TcpPullAgentListener; stdcall; external HPSocketDLL;
+ {TODO: 创建 HP_TcpPullClientListener 对象 }
+function Create_HP_TcpPullClientListener(): HP_TcpPullClientListener; stdcall; external HPSocketDLL;
+ {TODO: 创建 HP_UdpServerListener 对象 }
+function Create_HP_UdpServerListener(): HP_UdpServerListener; stdcall; external HPSocketDLL;
+ {TODO: 创建 HP_UdpClientListener 对象 }
+function Create_HP_UdpClientListener(): HP_UdpClientListener; stdcall; external HPSocketDLL;
+ {TODO: 创建 HP_UdpCastListener 对象 }
+function Create_HP_UdpCastListener(): HP_UdpCastListener; stdcall; external HPSocketDLL;
+
+ {TODO: 销毁 HP_TcpServerListener and HP_TcpPackServerListener对象 }
+procedure Destroy_HP_TcpServerListener(pListener: HP_TcpServerListener); stdcall; external HPSocketDLL;
+ {TODO: 销毁 HP_HttpServerListener 对象 }
+procedure Destroy_HP_HttpServerListener(pListener: HP_HttpServerListener); stdcall; external HPSocketDLL;
+ {TODO: 销毁 HP_TcpAgentListener 对象 }
+procedure Destroy_HP_TcpAgentListener(pListener: HP_TcpAgentListener); stdcall; external HPSocketDLL;
+ {TODO: 销毁 HP_TcpClientListener 对象 }
+procedure Destroy_HP_TcpClientListener(pListener: HP_TcpClientListener); stdcall; external HPSocketDLL;
+ {TODO: 销毁 HP_TcpPullServerListener 对象 }
+procedure Destroy_HP_TcpPullServerListener(pListener: HP_TcpPullServerListener); stdcall; external HPSocketDLL;
+ {TODO: 销毁 HP_TcpPullAgentListener 对象 }
+procedure Destroy_HP_TcpPullAgentListener(pListener: HP_TcpPullAgentListener); stdcall; external HPSocketDLL;
+ {TODO: 销毁 HP_TcpPullClientListener 对象 }
+procedure Destroy_HP_TcpPullClientListener(pListener: HP_TcpPullClientListener); stdcall; external HPSocketDLL;
+ {TODO: 销毁 HP_UdpServerListener 对象 }
+procedure Destroy_HP_UdpServerListener(pListener: HP_UdpServerListener); stdcall; external HPSocketDLL;
+ {TODO: 销毁 HP_UdpClientListener 对象 }
+procedure Destroy_HP_UdpClientListener(pListener: HP_UdpClientListener); stdcall; external HPSocketDLL;
+ {TODO: 销毁 HP_UdpCastListener 对象 }
+procedure Destroy_HP_UdpCastListener(pListener: HP_UdpCastListener); stdcall; external HPSocketDLL;
+
+{TODO: ***************************** Server 回调函数设置方法 ***************************** }
+procedure HP_Set_FN_Server_OnPrepareListen(pListener: HP_TcpServerListener; fn: HP_FN_Server_OnPrepareListen); stdcall; external HPSocketDLL;
+procedure HP_Set_FN_Server_OnAccept(pListener: HP_TcpServerListener; fn: HP_FN_Server_OnAccept); stdcall; external HPSocketDLL;
+procedure HP_Set_FN_Server_OnHandShake(pListener: HP_TcpServerListener; fn: HP_FN_Server_OnHandShake); stdcall; external HPSocketDLL;
+procedure HP_Set_FN_Server_OnSend(pListener: HP_TcpServerListener; fn: HP_FN_Server_OnSend); stdcall; external HPSocketDLL;
+procedure HP_Set_FN_Server_OnReceive(pListener: HP_TcpServerListener; fn: HP_FN_Server_OnReceive); stdcall; external HPSocketDLL;
+procedure HP_Set_FN_Server_OnPullReceive(pListener: HP_TcpServerListener; fn: HP_FN_Server_OnPullReceive); stdcall; external HPSocketDLL;
+procedure HP_Set_FN_Server_OnClose(pListener: HP_TcpServerListener; fn: HP_FN_Server_OnClose); stdcall; external HPSocketDLL;
+procedure HP_Set_FN_Server_OnShutdown(pListener: HP_TcpServerListener; fn: HP_FN_Server_OnShutdown); stdcall; external HPSocketDLL;
+
+
+
+{TODO:****************************** Agent 回调函数设置方法 ***************************** }
+procedure HP_Set_FN_Agent_OnPrepareConnect(pListener: HP_AgentListener; fn: HP_FN_Agent_OnPrepareConnect); stdcall; external HPSocketDLL;
+procedure HP_Set_FN_Agent_OnConnect(pListener: HP_AgentListener; fn: HP_FN_Agent_OnConnect); stdcall; external HPSocketDLL;
+procedure HP_Set_FN_Agent_OnHandShake(pListener: HP_AgentListener; fn: HP_FN_Agent_OnHandShake); stdcall; external HPSocketDLL;
+procedure HP_Set_FN_Agent_OnSend(pListener: HP_AgentListener; fn: HP_FN_Agent_OnSend); stdcall; external HPSocketDLL;
+procedure HP_Set_FN_Agent_OnReceive(pListener: HP_AgentListener; fn: HP_FN_Agent_OnReceive); stdcall; external HPSocketDLL;
+procedure HP_Set_FN_Agent_OnPullReceive(pListener: HP_AgentListener; fn: HP_FN_Agent_OnPullReceive); stdcall; external HPSocketDLL;
+procedure HP_Set_FN_Agent_OnClose(pListener: HP_AgentListener; fn: HP_FN_Agent_OnClose); stdcall; external HPSocketDLL;
+procedure HP_Set_FN_Agent_OnAgentShutdown(pListener: HP_AgentListener; fn: HP_FN_Agent_OnShutdown); stdcall; external HPSocketDLL;
+
+{TODO:***************************** Client 回调函数设置方法 ***************************** }
+procedure HP_Set_FN_Client_OnPrepareConnect(pListener: HP_TcpClientListener; fn: HP_FN_Client_OnPrepareConnect); stdcall; external HPSocketDLL;
+procedure HP_Set_FN_Client_OnConnect(pListener: HP_TcpClientListener; fn: HP_FN_Client_OnConnect); stdcall; external HPSocketDLL;
+procedure HP_Set_FN_Client_OnHandShake(pListener: HP_TcpClientListener; fn: HP_FN_Client_OnHandShake); stdcall; external HPSocketDLL;
+procedure HP_Set_FN_Client_OnSend(pListener: HP_TcpClientListener; fn: HP_FN_Client_OnSend); stdcall; external HPSocketDLL;
+procedure HP_Set_FN_Client_OnReceive(pListener: HP_TcpClientListener; fn: HP_FN_Client_OnReceive); stdcall; external HPSocketDLL;
+procedure HP_Set_FN_Client_OnPullReceive(pListener: HP_TcpClientListener; fn: HP_FN_Client_OnPullReceive); stdcall; external HPSocketDLL;
+procedure HP_Set_FN_Client_OnClose(pListener: HP_TcpClientListener; fn: HP_FN_Client_OnClose); stdcall; external HPSocketDLL;
+
+{ /***************************** Server 操作方法 *****************************/ }
+{ TODO:
+ * 名称:启动通信组件
+ * 描述:启动服务端通信组件,启动完成后可开始接收客户端连接并收发数据
+ *
+ * 参数: pszBindAddress -- 监听地址
+ * usPort -- 监听端口
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败,可通过 GetLastError() 获取错误代码 }
+function HP_Server_Start(pServer: HP_Server; pszBindAddress: WideString; usPort: Word): BOOL; stdcall; external HPSocketDLL;
+
+{ TODO:
+ * 名称:关闭通信组件
+ * 描述:关闭服务端通信组件,关闭完成后断开所有客户端连接并释放所有资源
+ *
+ * 参数:
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败,可通过 GetLastError() 获取错误代码 }
+function HP_Server_Stop(pServer: HP_Server): BOOL; stdcall; external HPSocketDLL;
+
+{ TODO:
+ * 名称:发送数据
+ * 描述:用户通过该方法向指定客户端发送数据
+ *
+ * 参数:dwConnID -- 连接 ID
+ * pBuffer -- 发送数据缓冲区
+ * iLength -- 发送数据长度
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败 }
+ { Private declarations }
+
+function HP_Server_Send(pServer: HP_Server; dwConnID: HP_CONNID; const pBuffer: Pointer; iLength: Integer): BOOL;
+stdcall; external HPSocketDLL;
+
+
+{ TODO:
+ * 名称:发送数据
+ * 描述:向指定连接发送数据
+ *
+ * 参数:dwConnID -- 连接 ID
+ * pBuffer -- 发送缓冲区
+ * iLength -- 发送缓冲区长度
+ * iOffset -- 发送缓冲区指针偏移量
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败,可通过 Windows API 函数 ::GetLastError() 获取 Windows 错误代码 }
+function HP_Server_SendPart(pServer: HP_Server; dwConnID: HP_CONNID; const pBuffer: Pointer; iLength: Integer; iOffset: Integer): BOOL;
+stdcall; external HPSocketDLL;
+
+{ TODO:
+ * 名称:发送多组数据
+ * 描述:向指定连接发送多组数据
+ * TCP - 顺序发送所有数据包
+ * UDP - 把所有数据包组合成一个数据包发送(数据包的总长度不能大于设置的 UDP 包最大长度)
+ *
+ * 参数: dwConnID -- 连接 ID
+ * pBuffers -- 发送缓冲区数组
+ * iCount -- 发送缓冲区数目
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败,可通过 Windows API 函数 ::GetLastError() 获取 Windows 错误代码 }
+function HP_Server_SendPackets(pServer: HP_Server; dwConnID: HP_CONNID; const pBuffers: WSABUFArray; iCount: Integer): BOOL;
+stdcall; external HPSocketDLL;
+
+{ TODO:
+ * 名称:断开连接
+ * 描述:断开与某个客户端的连接
+ *
+ * 参数: dwConnID -- 连接 ID
+ * bForce -- 是否强制断开连接
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败 }
+function HP_Server_Disconnect(pServer: HP_Server; dwConnID: HP_CONNID; bForce: BOOL): BOOL;
+stdcall; external HPSocketDLL;
+
+{ TODO:
+ * 名称:断开超时连接
+ * 描述:断开超过指定时长的连接
+ *
+ * 参数: dwPeriod -- 时长(毫秒)
+ * bForce -- 是否强制断开连接
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败 }
+function HP_Server_DisconnectLongConnections(pServer: HP_Server; dwPeriod: LongWord; bForce: BOOL): BOOL;
+stdcall; external HPSocketDLL;
+
+{ TODO:
+ * 名称:断开静默连接
+ * 描述:断开超过指定时长的静默连接
+ *
+ * 参数:dwPeriod -- 时长(毫秒)
+ * bForce -- 是否强制断开连接
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败 }
+function HP_Server_DisconnectSilenceConnections(pServer: HP_Server; dwPeriod: LongWord; bForce: BOOL): BOOL;
+stdcall; external HPSocketDLL;
+
+{***************************** Server 属性访问方法 *****************************/ }
+{ TODO:
+ * 名称:设置连接的附加数据
+ * 描述:是否为连接绑定附加数据或者绑定什么样的数据,均由应用程序只身决定
+ *
+ * 参数: dwConnID -- 连接 ID
+ * pv -- 数据
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败(无效的连接 ID) }
+function HP_Server_SetConnectionExtra(pServer: HP_Server; dwConnID: HP_CONNID; pExtra: Pointer): BOOL;
+stdcall; external HPSocketDLL;
+
+{ TODO:
+ * 名称:获取连接的附加数据
+ * 描述:是否为连接绑定附加数据或者绑定什么样的数据,均由应用程序只身决定
+ *
+ * 参数: dwConnID -- 连接 ID
+ * ppv -- 数据指针
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败(无效的连接 ID) }
+function HP_Server_GetConnectionExtra(pServer: HP_Server; dwConnID: HP_CONNID; ppExtra: Pointer): BOOL;
+stdcall; external HPSocketDLL;
+
+{ TODO: 检查通信组件是否已启动 */ }
+function HP_Server_HasStarted(pServer: HP_Server): BOOL; stdcall; external HPSocketDLL;
+{ TODO: 查看通信组件当前状态 */ }
+function HP_Server_GetState(pServer: HP_Server): En_HP_ServiceState; stdcall; external HPSocketDLL;
+{ TODO: 获取最近一次失败操作的错误代码 */ }
+function HP_Server_GetLastError(pServer: HP_Server): En_HP_SocketError; stdcall; external HPSocketDLL;
+{ TODO: 获取最近一次失败操作的错误描述 */ }
+function HP_Server_GetLastErrorDesc(pServer: HP_Server): PWideChar; stdcall; external HPSocketDLL;
+{ TODO: 获取连接中未发出数据的长度 */ }
+function HP_Server_GetPendingDataLength(pServer: HP_Server; dwConnID: HP_CONNID; piPending: PInteger): BOOL; stdcall; external HPSocketDLL;
+{ TODO: 获取客户端连接数 */ }
+function HP_Server_GetConnectionCount(pServer: HP_Server): LongInt; stdcall; external HPSocketDLL;
+{ TODO: 获取所有连接的 CONNID */ }
+function HP_Server_GetAllConnectionIDs(pServer: HP_Server; pIDs: HP_CONNIDArray; pdwCount: PLongint): BOOL; stdcall; external HPSocketDLL;
+{ TODO: 获取某个客户端连接时长(毫秒) */ }
+function HP_Server_GetConnectPeriod(pServer: HP_Server; dwConnID: HP_CONNID; pdwPeriod: PLongint): BOOL; stdcall; external HPSocketDLL;
+{ TODO: 获取某个连接静默时间(毫秒) */ }
+function HP_Server_GetSilencePeriod(pServer: HP_Server; dwConnID: HP_CONNID; pdwPeriod: PLongint): BOOL; stdcall; external HPSocketDLL;
+{ TODO: 获取监听 Socket 的地址信息 */ }
+function HP_Server_GetListenAddress(pServer: HP_Server; lpszAddress: PWideChar; piAddressLen: PInteger; pusPort: PUShort): BOOL; stdcall; external HPSocketDLL;
+{ TODO: 获取某个连接的远程地址信息 */ }
+function HP_Server_GetRemoteAddress(pServer: HP_Server; dwConnID: HP_CONNID; lpszAddress: PWideChar; piAddressLen: PInteger; pusPort: PUShort): BOOL; stdcall; external HPSocketDLL;
+
+{ TODO: 设置数据发送策略 */ }
+procedure HP_Server_SetSendPolicy(pServer: HP_Server; enSendPolicy: En_HP_SendPolicy); stdcall; external HPSocketDLL;
+{ TODO: 设置 Socket 缓存对象锁定时间(毫秒,在锁定期间该 Socket 缓存对象不能被获取使用) */ }
+procedure HP_Server_SetFreeSocketObjLockTime(pServer: HP_Server; dwFreeSocketObjLockTime: LongInt); stdcall; external HPSocketDLL;
+{ TODO: 设置 Socket 缓存池大小(通常设置为平均并发连接数量的 1/3 - 1/2) */ }
+procedure HP_Server_SetFreeSocketObjPool(pServer: HP_Server; dwFreeSocketObjPool: LongInt); stdcall; external HPSocketDLL;
+{ TODO: 设置内存块缓存池大小(通常设置为 Socket 缓存池大小的 2 - 3 倍) */ }
+procedure HP_Server_SetFreeBufferObjPool(pServer: HP_Server; dwFreeBufferObjPool: LongInt); stdcall; external HPSocketDLL;
+{ TODO: 设置 Socket 缓存池回收阀值(通常设置为 Socket 缓存池大小的 3 倍) */ }
+procedure HP_Server_SetFreeSocketObjHold(pServer: HP_Server; dwFreeSocketObjHold: LongInt); stdcall; external HPSocketDLL;
+{ TODO: 设置内存块缓存池回收阀值(通常设置为内存块缓存池大小的 3 倍) */ }
+procedure HP_Server_SetFreeBufferObjHold(pServer: HP_Server; dwFreeBufferObjHold: LongInt); stdcall; external HPSocketDLL;
+{ TODO: 设置工作线程数量(通常设置为 2 * CPU + 2) */ }
+procedure HP_Server_SetWorkerThreadCount(pServer: HP_Server; dwWorkerThreadCount: LongInt); stdcall; external HPSocketDLL;
+{ TODO: 设置是否标记静默时间(设置为 TRUE 时 DisconnectSilenceConnections() 和 GetSilencePeriod() 才有效,默认:FALSE) */ }
+procedure HP_Server_SetMarkSilence(pServer: HP_Server; bMarkSilence: BOOL); stdcall; external HPSocketDLL;
+
+{ TODO: 获取数据发送策略 */ }
+function HP_Server_GetSendPolicy(pServer: HP_Server): En_HP_SendPolicy; stdcall; external HPSocketDLL;
+{ TODO: 获取 Socket 缓存对象锁定时间 */ }
+function HP_Server_GetFreeSocketObjLockTime(pServer: HP_Server): LongInt; stdcall; external HPSocketDLL;
+{ TODO: 获取 Socket 缓存池大小 */ }
+function HP_Server_GetFreeSocketObjPool(pServer: HP_Server): LongInt; stdcall; external HPSocketDLL;
+{ TODO: 获取内存块缓存池大小 */ }
+function HP_Server_GetFreeBufferObjPool(pServer: HP_Server): LongInt; stdcall; external HPSocketDLL;
+{ TODO: 获取 Socket 缓存池回收阀值 */ }
+function HP_Server_GetFreeSocketObjHold(pServer: HP_Server): LongInt; stdcall; external HPSocketDLL;
+{ TODO: 获取内存块缓存池回收阀值 */ }
+function HP_Server_GetFreeBufferObjHold(pServer: HP_Server): LongInt; stdcall; external HPSocketDLL;
+{ TODO: 获取工作线程数量 */ }
+function HP_Server_GetWorkerThreadCount(pServer: HP_Server): LongInt; stdcall; external HPSocketDLL;
+{ TODO: 检测是否标记静默时间 */ }
+function HP_Server_IsMarkSilence(pServer: HP_Server): BOOL; stdcall; external HPSocketDLL;
+
+{ /******************************* TCP Server 操作方法 *******************************/ }
+{ TODO:
+ * 名称:发送小文件
+ * 描述:向指定连接发送 4096 KB 以下的小文件
+ *
+ * 参数: dwConnID -- 连接 ID
+ * lpszFileName -- 文件路径
+ * pHead -- 头部附加数据
+ * pTail -- 尾部附加数据
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败,可通过 Windows API 函数 ::GetLastError() 获取 Windows 错误代码
+ */ }
+function HP_TcpServer_SendSmallFile(pServer: HP_Server; dwConnID: HP_CONNID;
+ lpszFileName: PWideChar; const pHead: LPWSABUF; const pTail: LPWSABUF): BOOL;
+stdcall; external HPSocketDLL;
+
+{ /***************************** TCP Server 属性访问方法 *****************************/ }
+
+{ TODO: 设置监听 Socket 的等候队列大小(根据并发连接数量调整设置) */ }
+procedure HP_TcpServer_SetSocketListenQueue(pServer: HP_TcpServer; dwSocketListenQueue: LongInt); stdcall; external HPSocketDLL;
+{ TODO: 设置 Accept 预投递数量(根据负载调整设置,Accept 预投递数量越大则支持的并发连接请求越多) */ }
+procedure HP_TcpServer_SetAcceptSocketCount(pServer: HP_TcpServer; dwAcceptSocketCount: LongInt); stdcall; external HPSocketDLL;
+{ TODO: 设置通信数据缓冲区大小(根据平均通信数据包大小调整设置,通常设置为 1024 的倍数) */ }
+procedure HP_TcpServer_SetSocketBufferSize(pServer: HP_TcpServer; dwSocketBufferSize: LongInt); stdcall; external HPSocketDLL;
+{ TODO: 设置心跳包间隔(毫秒,0 则不发送心跳包) */ }
+procedure HP_TcpServer_SetKeepAliveTime(pServer: HP_TcpServer; dwKeepAliveTime: LongInt); stdcall; external HPSocketDLL;
+{ TODO: 设置心跳确认包检测间隔(毫秒,0 不发送心跳包,如果超过若干次 [默认:WinXP 5 次, Win7 10 次] 检测不到心跳确认包则认为已断线) */ }
+procedure HP_TcpServer_SetKeepAliveInterval(pServer: HP_TcpServer; dwKeepAliveInterval: LongInt); stdcall; external HPSocketDLL;
+
+{ TODO: 获取 Accept 预投递数量 */ }
+function HP_TcpServer_GetAcceptSocketCount(pServer: HP_TcpServer): LongInt; stdcall; external HPSocketDLL;
+{ TODO: 获取通信数据缓冲区大小 */ }
+function HP_TcpServer_GetSocketBufferSize(pServer: HP_TcpServer): LongInt; stdcall; external HPSocketDLL;
+{ TODO: 获取监听 Socket 的等候队列大小 */ }
+function HP_TcpServer_GetSocketListenQueue(pServer: HP_TcpServer): LongInt; stdcall; external HPSocketDLL;
+{ TODO: 获取心跳检查次数 */ }
+function HP_TcpServer_GetKeepAliveTime(pServer: HP_TcpServer): LongInt; stdcall; external HPSocketDLL;
+{ TODO: 获取心跳检查间隔 */ }
+function HP_TcpServer_GetKeepAliveInterval(pServer: HP_TcpServer): LongInt; stdcall; external HPSocketDLL;
+
+{ /***************************** UDP Server 属性访问方法 *****************************/ }
+
+{ TODO: 设置数据报文最大长度(建议在局域网环境下不超过 1472 字节,在广域网环境下不超过 548 字节) */ }
+procedure HP_UdpServer_SetMaxDatagramSize(pServer: HP_UdpServer; dwMaxDatagramSize: LongInt); stdcall; external HPSocketDLL;
+{ TODO: 获取数据报文最大长度 */ }
+function HP_UdpServer_GetMaxDatagramSize(pServer: HP_UdpServer): LongInt; stdcall; external HPSocketDLL;
+
+{ TODO: 设置 Receive 预投递数量(根据负载调整设置,Receive 预投递数量越大则丢包概率越小) */ }
+procedure HP_UdpServer_SetPostReceiveCount(pServer: HP_UdpServer; dwPostReceiveCount: LongInt); stdcall; external HPSocketDLL;
+{ TODO: 获取 Receive 预投递数量 */ }
+function HP_UdpServer_GetPostReceiveCount(pServer: HP_UdpServer): LongInt; stdcall; external HPSocketDLL;
+
+{ TODO: 设置监测包尝试次数(0 则不发送监测跳包,如果超过最大尝试次数则认为已断线) */ }
+procedure HP_UdpServer_SetDetectAttempts(pServer: HP_UdpServer; dwDetectAttempts: LongInt); stdcall; external HPSocketDLL;
+{ TODO: 设置监测包发送间隔(秒,0 不发送监测包) */ }
+procedure HP_UdpServer_SetDetectInterval(pServer: HP_UdpServer; dwDetectInterval: LongInt); stdcall; external HPSocketDLL;
+{ TODO: 获取心跳检查次数 */ }
+function HP_UdpServer_GetDetectAttempts(pServer: HP_UdpServer): LongInt; stdcall; external HPSocketDLL;
+{ TODO: 获取心跳检查间隔 */ }
+function HP_UdpServer_GetDetectInterval(pServer: HP_UdpServer): LongInt; stdcall; external HPSocketDLL;
+
+{ ***************************** Agent 操作方法 ***************************** }
+
+{ TODO:
+ * 名称:启动通信组件
+ * 描述:启动通信代理组件,启动完成后可开始连接远程服务器
+ *
+ * 参数: pszBindAddress -- 监听地址
+ * bAsyncConnect -- 是否采用异步 Connect
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败,可通过 GetLastError() 获取错误代码
+ */ }
+function HP_Agent_Start(pAgent: HP_Agent; pszBindAddress: PWideChar; bAsyncConnect: BOOL): BOOL; stdcall; external HPSocketDLL;
+
+{ TODO:
+ * 名称:关闭通信组件
+ * 描述:关闭通信组件,关闭完成后断开所有连接并释放所有资源
+ *
+ * 参数:
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败,可通过 GetLastError() 获取错误代码
+ */ }
+function HP_Agent_Stop(pAgent: HP_Agent): BOOL; stdcall; external HPSocketDLL;
+
+{ TODO:
+ * 名称:连接服务器
+ * 描述:连接服务器,连接成功后 IAgentListener 会接收到 OnConnect() 事件
+ *
+ * 参数: pszRemoteAddress -- 服务端地址
+ * usPort -- 服务端端口
+ * pdwConnID -- 连接 ID(默认:nullptr,不获取连接 ID)
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败,可通过函数 SYS_GetLastError() 获取 Windows 错误代码
+ */ }
+function HP_Agent_Connect(pAgent: HP_Agent; pszRemoteAddress: PWideChar; usPort: Word; pdwConnID: PHP_CONNID): BOOL;
+stdcall; external HPSocketDLL;
+
+{ TODO:
+ * 名称:发送数据
+ * 描述:向指定连接发送数据
+ *
+ * 参数: dwConnID -- 连接 ID
+ * pBuffer -- 发送缓冲区
+ * iLength -- 发送缓冲区长度
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败,可通过 Windows API 函数 ::GetLastError() 获取 Windows 错误代码
+ */ }
+function HP_Agent_Send(pAgent: HP_Agent; dwConnID: HP_CONNID; const pBuffer: Pointer; iLength: Integer): BOOL;
+stdcall; external HPSocketDLL;
+
+{ TODO:
+ * 名称:发送数据
+ * 描述:向指定连接发送数据
+ *
+ * 参数: dwConnID -- 连接 ID
+ * pBuffer -- 发送缓冲区
+ * iLength -- 发送缓冲区长度
+ * iOffset -- 发送缓冲区指针偏移量
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败,可通过 Windows API 函数 ::GetLastError() 获取 Windows 错误代码
+ */ }
+function HP_Agent_SendPart(pAgent: HP_Agent; dwConnID: HP_CONNID; const pBuffer: Pointer; iLength: Integer; iOffset: Integer): BOOL;
+stdcall; external HPSocketDLL;
+
+{ TODO:
+ * 名称:发送多组数据
+ * 描述:向指定连接发送多组数据
+ * TCP - 顺序发送所有数据包
+ * UDP - 把所有数据包组合成一个数据包发送(数据包的总长度不能大于设置的 UDP 包最大长度)
+ *
+ * 参数: dwConnID -- 连接 ID
+ * pBuffers -- 发送缓冲区数组
+ * iCount -- 发送缓冲区数目
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败,可通过 Windows API 函数 ::GetLastError() 获取 Windows 错误代码
+ */ }
+function HP_Agent_SendPackets(pAgent: HP_Agent; dwConnID: HP_CONNID; const pBuffers: WSABUFArray; iCount: Integer): BOOL;
+stdcall; external HPSocketDLL;
+
+{ TODO:
+ * 名称:断开连接
+ * 描述:断开某个连接
+ *
+ * 参数: dwConnID -- 连接 ID
+ * bForce -- 是否强制断开连接
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败
+ */ }
+function HP_Agent_Disconnect(pAgent: HP_Agent; dwConnID: HP_CONNID; bForce: BOOL): BOOL;
+stdcall; external HPSocketDLL;
+
+{ TODO:
+ * 名称:断开超时连接
+ * 描述:断开超过指定时长的连接
+ *
+ * 参数: dwPeriod -- 时长(毫秒)
+ * bForce -- 是否强制断开连接
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败
+ */ }
+function HP_Agent_DisconnectLongConnections(pAgent: HP_Agent; dwPeriod: LongInt; bForce: BOOL): BOOL;
+stdcall; external HPSocketDLL;
+
+{ TODO:
+ * 名称:断开静默连接
+ * 描述:断开超过指定时长的静默连接
+ *
+ * 参数: dwPeriod -- 时长(毫秒)
+ * bForce -- 是否强制断开连接
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败
+ */ }
+function HP_Agent_DisconnectSilenceConnections(pAgent: HP_Agent; dwPeriod: LongInt; bForce: BOOL): BOOL;
+stdcall; external HPSocketDLL;
+
+{ /******************************************************************************/
+ /***************************** Agent 属性访问方法 *****************************/ }
+
+{ TODO
+ * 名称:设置连接的附加数据
+ * 描述:是否为连接绑定附加数据或者绑定什么样的数据,均由应用程序只身决定
+ *
+ * 参数: dwConnID -- 连接 ID
+ * pv -- 数据
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败(无效的连接 ID)
+ */ }
+function HP_Agent_SetConnectionExtra(pAgent: HP_Agent; dwConnID: HP_CONNID; pExtra: Pointer): BOOL;
+stdcall; external HPSocketDLL;
+
+{ TODO
+ * 名称:获取连接的附加数据
+ * 描述:是否为连接绑定附加数据或者绑定什么样的数据,均由应用程序只身决定
+ *
+ * 参数: dwConnID -- 连接 ID
+ * ppv -- 数据指针
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败(无效的连接 ID)
+ */ }
+function HP_Agent_GetConnectionExtra(pAgent: HP_Agent; dwConnID: HP_CONNID;
+ ppExtra: Pointer): BOOL; stdcall; external HPSocketDLL;
+
+{TODO 检查通信组件是否已启动 */ }
+function HP_Agent_HasStarted(pAgent: HP_Agent): BOOL; stdcall; external HPSocketDLL;
+{TODO 查看通信组件当前状态 */ }
+function HP_Agent_GetState(pAgent: HP_Agent): En_HP_ServiceState; stdcall; external HPSocketDLL;
+{TODO 获取连接数 */ }
+function HP_Agent_GetConnectionCount(pAgent: HP_Agent): LongInt; stdcall; external HPSocketDLL;
+{ TODO 获取所有连接的 CONNID */ }
+function HP_Agent_GetAllConnectionIDs(pAgent: HP_Agent; pIDs: HP_CONNIDArray; pdwCount: PLongint): BOOL; stdcall; external HPSocketDLL;
+{TODO 获取某个连接时长(毫秒) */ }
+function HP_Agent_GetConnectPeriod(pAgent: HP_Agent; dwConnID: HP_CONNID; pdwPeriod: PLongint): BOOL; stdcall; external HPSocketDLL;
+{TODO 获取某个连接静默时间(毫秒) */ }
+function HP_Agent_GetSilencePeriod(pAgent: HP_Agent; dwConnID: HP_CONNID; pdwPeriod: PLongint): BOOL; stdcall; external HPSocketDLL;
+{TODO 获取某个连接的本地地址信息 */ }
+function HP_Agent_GetLocalAddress(pAgent: HP_Agent; dwConnID: HP_CONNID; lpszAddress: PWideChar; piAddressLen: PInteger; pusPort: PUShort): BOOL; stdcall; external HPSocketDLL;
+{TODO 获取某个连接的远程地址信息 */ }
+function HP_Agent_GetRemoteAddress(pAgent: HP_Agent; dwConnID: HP_CONNID; lpszAddress: PWideChar; piAddressLen: PInteger; pusPort: PUShort): BOOL; stdcall; external HPSocketDLL;
+{TODO 获取最近一次失败操作的错误代码 */ }
+function HP_Agent_GetLastError(pAgent: HP_Agent): En_HP_SocketError; stdcall; external HPSocketDLL;
+{TODO 获取最近一次失败操作的错误描述 */ }
+function HP_Agent_GetLastErrorDesc(pAgent: HP_Agent): PWideChar; stdcall; external HPSocketDLL;
+{TODO 获取连接中未发出数据的长度 */ }
+function HP_Agent_GetPendingDataLength(pAgent: HP_Agent; dwConnID: HP_CONNID; piPending: PInteger): BOOL; stdcall; external HPSocketDLL;
+
+{TODO 设置数据发送策略 */ }
+procedure HP_Agent_SetSendPolicy(pAgent: HP_Agent; enSendPolicy: En_HP_SendPolicy); stdcall; external HPSocketDLL;
+{TODO 设置 Socket 缓存对象锁定时间(毫秒,在锁定期间该 Socket 缓存对象不能被获取使用) */ }
+procedure HP_Agent_SetFreeSocketObjLockTime(pAgent: HP_Agent; dwFreeSocketObjLockTime: LongInt); stdcall; external HPSocketDLL;
+{TODO 设置 Socket 缓存池大小(通常设置为平均并发连接数量的 1/3 - 1/2) */ }
+procedure HP_Agent_SetFreeSocketObjPool(pAgent: HP_Agent; dwFreeSocketObjPool: LongInt); stdcall; external HPSocketDLL;
+{TODO 设置内存块缓存池大小(通常设置为 Socket 缓存池大小的 2 - 3 倍) */ }
+procedure HP_Agent_SetFreeBufferObjPool(pAgent: HP_Agent; dwFreeBufferObjPool: LongInt); stdcall; external HPSocketDLL;
+{TODO 设置 Socket 缓存池回收阀值(通常设置为 Socket 缓存池大小的 3 倍) */ }
+procedure HP_Agent_SetFreeSocketObjHold(pAgent: HP_Agent; dwFreeSocketObjHold: LongInt); stdcall; external HPSocketDLL;
+{TODO 设置内存块缓存池回收阀值(通常设置为内存块缓存池大小的 3 倍) */ }
+procedure HP_Agent_SetFreeBufferObjHold(pAgent: HP_Agent; dwFreeBufferObjHold: LongInt); stdcall; external HPSocketDLL;
+{TODO 设置工作线程数量(通常设置为 2 * CPU + 2) */ }
+procedure HP_Agent_SetWorkerThreadCount(pAgent: HP_Agent; dwWorkerThreadCount: LongInt); stdcall; external HPSocketDLL;
+{TODO 设置是否标记静默时间(设置为 TRUE 时 DisconnectSilenceConnections() 和 GetSilencePeriod() 才有效,默认:FALSE) */ }
+procedure HP_Agent_SetMarkSilence(pAgent: HP_Agent; bMarkSilence: BOOL); stdcall; external HPSocketDLL;
+
+{TODO 获取数据发送策略 */ }
+function HP_Agent_GetSendPolicy(pAgent: HP_Agent): En_HP_SendPolicy; stdcall; external HPSocketDLL;
+{TODO 获取 Socket 缓存对象锁定时间 */ }
+function HP_Agent_GetFreeSocketObjLockTime(pAgent: HP_Agent): LongInt; stdcall; external HPSocketDLL;
+{TODO 获取 Socket 缓存池大小 */ }
+function HP_Agent_GetFreeSocketObjPool(pAgent: HP_Agent): LongInt; stdcall; external HPSocketDLL;
+{TODO 获取内存块缓存池大小 */ }
+function HP_Agent_GetFreeBufferObjPool(HpAgent: HP_Agent): LongInt; stdcall; external HPSocketDLL;
+{TODO 获取 Socket 缓存池回收阀值 */ }
+function HP_Agent_GetFreeSocketObjHold(pAgent: HP_Agent): LongInt; stdcall; external HPSocketDLL;
+{TODO 获取内存块缓存池回收阀值 */ }
+function HP_Agent_GetFreeBufferObjHold(pAgent: HP_Agent): LongInt; stdcall; external HPSocketDLL;
+{TODO 获取工作线程数量 */ }
+function HP_Agent_GetWorkerThreadCount(pAgent: HP_Agent): LongInt; stdcall; external HPSocketDLL;
+{TODO 检测是否标记静默时间 */ }
+function HP_Agent_IsMarkSilence(pAgent: HP_Agent): BOOL; stdcall; external HPSocketDLL;
+
+{ ******************************* TCP Agent 操作方法 ******************************* }
+
+{TODO
+ * 名称:发送小文件
+ * 描述:向指定连接发送 4096 KB 以下的小文件
+ *
+ * 参数: dwConnID -- 连接 ID
+ * lpszFileName -- 文件路径
+ * pHead -- 头部附加数据
+ * pTail -- 尾部附加数据
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败,可通过 Windows API 函数 ::GetLastError() 获取 Windows 错误代码
+ */ }
+function HP_TcpAgent_SendSmallFile(pAgent: HP_Agent; dwConnID: HP_CONNID; lpszFileName: PWideChar; const pHead: LPWSABUF; const pTail: LPWSABUF): BOOL;
+stdcall; external HPSocketDLL;
+
+{ ***************************** TCP Agent 属性访问方法 *****************************/ }
+
+{ TODO 设置是否启用地址重用机制(默认:不启用) */ }
+procedure HP_TcpAgent_SetReuseAddress(pAgent: HP_TcpAgent; bReuseAddress: BOOL); stdcall; external HPSocketDLL;
+{ TODO 检测是否启用地址重用机制 */ }
+function HP_TcpAgent_IsReuseAddress(pAgent: HP_TcpAgent): BOOL; stdcall; external HPSocketDLL;
+
+{ TODO 设置通信数据缓冲区大小(根据平均通信数据包大小调整设置,通常设置为 1024 的倍数) */ }
+procedure HP_TcpAgent_SetSocketBufferSize(pAgent: HP_TcpAgent; dwSocketBufferSize: LongInt); stdcall; external HPSocketDLL;
+{ TODO 设置心跳包间隔(毫秒,0 则不发送心跳包) */ }
+procedure HP_TcpAgent_SetKeepAliveTime(pAgent: HP_TcpAgent; dwKeepAliveTime: LongInt); stdcall; external HPSocketDLL;
+{ TODO 设置心跳确认包检测间隔(毫秒,0 不发送心跳包,如果超过若干次 [默认:WinXP 5 次, Win7 10 次] 检测不到心跳确认包则认为已断线) */ }
+procedure HP_TcpAgent_SetKeepAliveInterval(pAgent: HP_TcpAgent; dwKeepAliveInterval: LongInt); stdcall; external HPSocketDLL;
+
+{ TODO 获取通信数据缓冲区大小 */ }
+function HP_TcpAgent_GetSocketBufferSize(pAgent: HP_TcpAgent): LongInt; stdcall; external HPSocketDLL;
+{ TODO 获取心跳检查次数 */ }
+function HP_TcpAgent_GetKeepAliveTime(pAgent: HP_TcpAgent): LongInt; stdcall; external HPSocketDLL;
+{ TODO 获取心跳检查间隔 */ }
+function HP_TcpAgent_GetKeepAliveInterval(pAgent: HP_TcpAgent): LongInt; stdcall; external HPSocketDLL;
+
+
+{ /***************************** Client 组件操作方法 *****************************/ }
+
+{ TODO
+ * 名称:启动通信组件
+ * 描述:启动客户端通信组件并连接服务端,启动完成后可开始收发数据
+ *
+ * 参数: pszRemoteAddress -- 服务端地址
+ * usPort -- 服务端端口
+ * bAsyncConnect -- 是否采用异步 Connect
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败,可通过 GetLastError() 获取错误代码
+ */ }
+function HP_Client_Start(pClient: HP_Client; pszRemoteAddress: PWideChar; usPort: Word; bAsyncConnect: BOOL): BOOL;
+stdcall; external HPSocketDLL;
+
+{ TODO
+ * 名称:关闭通信组件
+ * 描述:关闭客户端通信组件,关闭完成后断开与服务端的连接并释放所有资源
+ *
+ * 参数:
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败,可通过 GetLastError() 获取错误代码
+ */ }
+function HP_Client_Stop(pClient: HP_Client): BOOL; stdcall; external HPSocketDLL;
+
+{ TODO
+ * 名称:发送数据
+ * 描述:向服务端发送数据
+ *
+ * 参数: pBuffer -- 发送缓冲区
+ * iLength -- 发送缓冲区长度
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败,可通过 Windows API 函数 ::GetLastError() 获取 Windows 错误代码
+ */ }
+function HP_Client_Send(pClient: HP_Client; const pBuffer: Pointer; iLength: Integer): BOOL; stdcall; external HPSocketDLL;
+
+{ TODO
+ * 名称:发送数据
+ * 描述:向服务端发送数据
+ *
+ * 参数: pBuffer -- 发送缓冲区
+ * iLength -- 发送缓冲区长度
+ * iOffset -- 发送缓冲区指针偏移量
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败,可通过 Windows API 函数 ::GetLastError() 获取 Windows 错误代码
+ */ }
+function HP_Client_SendPart(pClient: HP_Client; const pBuffer: Pointer; iLength: Integer; iOffset: Integer): BOOL;
+stdcall; external HPSocketDLL;
+
+{ TODO
+ * 名称:发送多组数据
+ * 描述:向服务端发送多组数据
+ * TCP - 顺序发送所有数据包
+ * UDP - 把所有数据包组合成一个数据包发送(数据包的总长度不能大于设置的 UDP 包最大长度)
+ *
+ * 参数: pBuffers -- 发送缓冲区数组
+ * iCount -- 发送缓冲区数目
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败,可通过 Windows API 函数 ::GetLastError() 获取 Windows 错误代码
+ */ }
+function HP_Client_SendPackets(pClient: HP_Client; const pBuffers: WSABUFArray; iCount: Integer): BOOL; stdcall; external HPSocketDLL;
+
+{ /******************************************************************************/
+ /***************************** Client 属性访问方法 *****************************/ }
+
+{ TODO 设置连接的附加数据 */ }
+procedure HP_Client_SetExtra(pClient: HP_Client; pExtra: Pointer); stdcall; external HPSocketDLL;
+{ TODO 获取连接的附加数据 */ }
+function HP_Client_GetExtra(pClient: HP_Client): Pointer; stdcall; external HPSocketDLL;
+
+{ TODO 检查通信组件是否已启动 */ }
+function HP_Client_HasStarted(pClient: HP_Client): BOOL; stdcall; external HPSocketDLL;
+{ TODO 查看通信组件当前状态 */ }
+function HP_Client_GetState(pClient: HP_Client): En_HP_ServiceState; stdcall; external HPSocketDLL;
+{ TODO 获取最近一次失败操作的错误代码 */ }
+function HP_Client_GetLastError(pClient: HP_Client): En_HP_SocketError; stdcall; external HPSocketDLL;
+{ TODO 获取最近一次失败操作的错误描述 */ }
+function HP_Client_GetLastErrorDesc(pClient: HP_Client): PWideChar; stdcall; external HPSocketDLL;
+{ TODO 获取该组件对象的连接 ID */ }
+function HP_Client_GetConnectionID(pClient: HP_Client): HP_CONNID; stdcall; external HPSocketDLL;
+{ TODO 获取 Client Socket 的地址信息 */ }
+function HP_Client_GetLocalAddress(pClient: HP_Client; lpszAddress: PWideChar; piAddressLen: PInteger; pusPort: PUShort): BOOL;
+stdcall; external HPSocketDLL;
+{ TODO 获取连接中未发出数据的长度 */ }
+function HP_Client_GetPendingDataLength(pClient: HP_Client; piPending: PInteger): BOOL; stdcall; external HPSocketDLL;
+{ TODO 设置内存块缓存池大小(通常设置为 -> PUSH 模型:5 - 10;PULL 模型:10 - 20 ) */ }
+procedure HP_Client_SetFreeBufferPoolSize(pClient: HP_Client; dwFreeBufferPoolSize: LongInt); stdcall; external HPSocketDLL;
+{ TODO 设置内存块缓存池回收阀值(通常设置为内存块缓存池大小的 3 倍) */ }
+procedure HP_Client_SetFreeBufferPoolHold(pClient: HP_Client; dwFreeBufferPoolHold: LongInt); stdcall; external HPSocketDLL;
+{ TODO 获取内存块缓存池大小 */ }
+function HP_Client_GetFreeBufferPoolSize(pClient: HP_Client): LongInt; stdcall; external HPSocketDLL;
+{ TODO 获取内存块缓存池回收阀值 */ }
+function HP_Client_GetFreeBufferPoolHold(pClient: HP_Client): LongInt; stdcall; external HPSocketDLL;
+
+{ /**********************************************************************************/
+ /******************************* TCP Client 操作方法 *******************************/ }
+
+{ /*
+ * 名称:发送小文件
+ * 描述:向服务端发送 4096 KB 以下的小文件
+ *
+ * 参数: lpszFileName -- 文件路径
+ * pHead -- 头部附加数据
+ * pTail -- 尾部附加数据
+ * 返回值: TRUE -- 成功
+ * FALSE -- 失败,可通过 Windows API 函数 ::GetLastError() 获取 Windows 错误代码
+ */ }
+function HP_TcpClient_SendSmallFile(pClient: HP_Client; lpszFileName: PWideChar; const pHead: LPWSABUF; const pTail: LPWSABUF): BOOL;
+stdcall; external HPSocketDLL;
+
+{ /**********************************************************************************/
+ /***************************** TCP Client 属性访问方法 *****************************/ }
+
+{ TODO 设置通信数据缓冲区大小(根据平均通信数据包大小调整设置,通常设置为:(N * 1024) - sizeof(TBufferObj)) */ }
+procedure HP_TcpClient_SetSocketBufferSize(pClient: HP_TcpClient; dwSocketBufferSize: LongInt); stdcall; external HPSocketDLL;
+{ TODO 设置心跳包间隔(毫秒,0 则不发送心跳包) */ }
+procedure HP_TcpClient_SetKeepAliveTime(pClient: HP_TcpClient; dwKeepAliveTime: LongInt); stdcall; external HPSocketDLL;
+{ TODO 设置心跳确认包检测间隔(毫秒,0 不发送心跳包,如果超过若干次 [默认:WinXP 5 次, Win7 10 次] 检测不到心跳确认包则认为已断线) */ }
+procedure HP_TcpClient_SetKeepAliveInterval(pClient: HP_TcpClient; dwKeepAliveInterval: LongInt); stdcall; external HPSocketDLL;
+
+{ TODO 获取通信数据缓冲区大小 */ }
+function HP_TcpClient_GetSocketBufferSize(pClient: HP_TcpClient): LongInt; stdcall; external HPSocketDLL;
+{ TODO 获取心跳检查次数 */ }
+function HP_TcpClient_GetKeepAliveTime(pClient: HP_TcpClient): LongInt; stdcall; external HPSocketDLL;
+{ TODO 获取心跳检查间隔 */ }
+function HP_TcpClient_GetKeepAliveInterval(pClient: HP_TcpClient): LongInt; stdcall; external HPSocketDLL;
+
+{***************************** UDP Client 属性访问方法 *****************************/ }
+
+{ TODO 设置数据报文最大长度(建议在局域网环境下不超过 1472 字节,在广域网环境下不超过 548 字节) */ }
+procedure HP_UdpClient_SetMaxDatagramSize(pClient: HP_UdpClient; dwMaxDatagramSize: LongInt); stdcall; external HPSocketDLL;
+{ TODO 获取数据报文最大长度 */ }
+function HP_UdpClient_GetMaxDatagramSize(pClient: HP_UdpClient): LongInt; stdcall; external HPSocketDLL;
+
+{ TODO 设置监测包尝试次数(0 则不发送监测跳包,如果超过最大尝试次数则认为已断线) */ }
+procedure HP_UdpClient_SetDetectAttempts(pClient: HP_UdpClient; dwDetectAttempts: LongInt); stdcall; external HPSocketDLL;
+{ TODO 设置监测包发送间隔(秒,0 不发送监测包) */ }
+procedure HP_UdpClient_SetDetectInterval(pClient: HP_UdpClient; dwDetectInterval: LongInt); stdcall; external HPSocketDLL;
+{ TODO 获取心跳检查次数 */ }
+function HP_UdpClient_GetDetectAttempts(pClient: HP_UdpClient): LongInt; stdcall; external HPSocketDLL;
+{ TODO 获取心跳检查间隔 */ }
+function HP_UdpClient_GetDetectInterval(pClient: HP_UdpClient): LongInt; stdcall; external HPSocketDLL;
+
+{ ***************************** UDP Cast 属性访问方法 *****************************/ }
+{TODO 设置数据报文最大长度(建议在局域网环境下不超过 1472 字节,在广域网环境下不超过 548 字节) */}
+procedure HP_UdpCast_SetMaxDatagramSize(pCast: HP_UdpCast; dwMaxDatagramSize: LongInt); stdcall; external HPSocketdll;
+{TODO 获取数据报文最大长度 */ }
+function HP_UdpCast_GetMaxDatagramSize(pCast: HP_UdpCast): LongInt; stdcall; external HPSocketdll;
+{TODO 获取当前数据报的远程地址信息(通常在 OnReceive 事件中调用) */ }
+function HP_UdpCast_GetRemoteAddress(pCast: HP_UdpCast; lpszAddress: PWideChar; piAddresslen: PInteger; pusPort: PUShort): BOOL;
+stdcall; external HPSocketDLL;
+{TODO 设置绑定地址 */ }
+procedure HP_UdpCast_SetBindAdddress(pCast: HP_UdpCast; pszBindAddress: PWideChar); stdcall; external HPSocketDll;
+{TODO 获取绑定地址 */ }
+function HP_UdpCast_GetBindAdddress(pCast: HP_UdpCast): WideChar; stdcall external HPSocketDll;
+{TODO 设置是否启用地址重用机制(默认:不启用) */ }
+procedure HP_UdpCast_SetReuseAddress(pCast: HP_UdpCast; bReuseAddress: BOOL); stdcall; external HPSocketDll;
+{TODO 检测是否启用地址重用机制 */ }
+function HP_UdpCast_IsReuseAddress(pCast: HP_UdpCast): BOOL; stdcall; external HPSocketDll;
+{TODO 设置传播模式(组播或广播) */ }
+procedure HP_UdpCast_SetCastMode(pCast: HP_UdpCast; enCastMode: En_HP_CastMode); stdcall; external HPSocketDll;
+{TODO 获取传播模式 */ }
+function HP_UdpCast_GetCastMode(pCast: HP_UdpCast): En_HP_CastMode; stdcall; external HPSocketDll;
+{TODO 设置组播报文的 TTL(0 - 255) */ }
+procedure HP_UdpCast_SetMultiCastTtl(PChar: HP_UdpCast; iMCTtl: LongInt); stdcall; external HPSocketDll;
+{TODO 获取组播报文的 TTL */ }
+function HP_UdpCast_GetMultiCastTtl(PChar: HP_UdpCast): LongInt; stdcall; external HPSocketDll;
+{TODO 设置是否启用组播环路(TRUE or FALSE) */ }
+procedure HP_UdpCast_SetMultiCastLoop(PChar: HP_UdpCast; bMCLoop: BOOL); stdcall; external HPSocketDll;
+{TODO 检测是否启用组播环路 */ }
+function HP_UdpCast_IsMultiCastLoop(PChar: HP_UdpCast): BOOL; stdcall; external HPSocketDll;
+
+{ **************************** TCP Pull Server 组件操作方法 *****************************/ }
+
+{TODO
+ * 名称:抓取数据
+ * 描述:用户通过该方法从 Socket 组件中抓取数据
+ *
+ * 参数: dwConnID -- 连接 ID
+ * pBuffer -- 数据抓取缓冲区
+ * iLength -- 抓取数据长度
+ * 返回值: En_HP_FetchResult
+ */ }
+function HP_TcpPullServer_Fetch(pServer: HP_TcpPullServer; dwConnID: HP_CONNID; pData: Pointer; iLength: Integer): En_HP_FetchResult;
+stdcall; external HPSocketDLL;
+
+{ TODO
+* 名称:窥探数据(不会移除缓冲区数据)
+* 描述:用户通过该方法从 Socket 组件中窥探数据
+*
+* 参数: dwConnID -- 连接 ID
+* pData -- 窥探缓冲区
+* iLength -- 窥探数据长度
+* 返回值: En_HP_FetchResult
+*/ }
+function HP_TcpPullServer_Peek(pServer: HP_TcpPullServer; dwConnID: HP_CONNID; pData: Pointer; iLength: Integer): En_HP_FetchResult;
+stdcall; external HPSocketDLL;
+
+{ /***************************************************************************************/
+ /***************************** TCP Pull Server 属性访问方法 *****************************/ }
+
+{ /***************************************************************************************/
+ /***************************** TCP Pull Agent 组件操作方法 *****************************/ }
+
+{ TODO
+ * 名称:抓取数据
+ * 描述:用户通过该方法从 Socket 组件中抓取数据
+ *
+ * 参数: dwConnID -- 连接 ID
+ * pBuffer -- 数据抓取缓冲区
+ * iLength -- 抓取数据长度
+ * 返回值: En_HP_FetchResult
+ */ }
+function HP_TcpPullAgent_Fetch(pAgent: HP_TcpPullAgent; dwConnID: HP_CONNID; pBuffer: Pointer; iLength: Integer): En_HP_FetchResult;
+stdcall; external HPSocketDLL;
+
+{TODO* 名称:窥探数据(不会移除缓冲区数据)
+* 描述:用户通过该方法从 Socket 组件中窥探数据
+*
+* 参数: dwConnID -- 连接 ID
+* pData -- 窥探缓冲区
+* iLength -- 窥探数据长度
+* 返回值: En_HP_FetchResult }
+function HP_TcpPullAgent_Peek(pAgent: HP_TcpPullAgent; dwConnID: HP_CONNID; pBuffer: Pointer; iLength: Integer): En_HP_FetchResult;
+stdcall; external HPSocketDLL;
+
+{ ***************************** TCP Pull Client 组件操作方法 *****************************/ }
+{ TODO
+* 名称:抓取数据
+* 描述:用户通过该方法从 Socket 组件中抓取数据
+*
+* 参数: dwConnID -- 连接 ID
+* pData -- 抓取缓冲区
+* iLength -- 抓取数据长度
+* 返回值: En_HP_FetchResult
+ */ }
+function HP_TcpPullClient_Fetch(pClient: HP_TcpPullClient; pData: Pointer; iLength: Integer): En_HP_FetchResult;
+stdcall; external HPSocketDLL;
+
+{ TODO
+* 名称:窥探数据(不会移除缓冲区数据)
+* 描述:用户通过该方法从 Socket 组件中窥探数据
+*
+* 参数: dwConnID -- 连接 ID
+* pData -- 窥探缓冲区
+* iLength -- 窥探数据长度
+* 返回值: En_HP_FetchResult
+*/ }
+function HP_TcpPullClient_Peek(pClient: HP_TcpPullClient; pData: Pointer; iLength: Integer): En_HP_FetchResult;
+stdcall; external HPSocketDLL;
+{/***************************** TCP Pack Server 属性访问方法 *****************************/ }
+
+{TODO/* 设置数据包最大长度(有效数据包最大长度不能超过 524287/0x7FFFF 字节,默认:262144/0x40000) */}
+procedure HP_TcpPackServer_SetMaxPackSize(pServer: HP_TcpPackServer ; dwMaxPackSize: LongWord); stdcall; external HPSocketDLL;
+{TODO 设置包头标识(有效包头标识取值范围 0 ~ 8191/0x1FFF,当包头标识为 0 时不校验包头,默认:0) */ }
+procedure HP_TcpPackServer_SetPackHeaderFlag(pServer: HP_TcpPackServer ; usPackHeaderFlag: Word); stdcall; external HPSocketDLL;
+
+{TODO 获取数据包最大长度 */ }
+function HP_TcpPackServer_GetMaxPackSize(pServer: HP_TcpPackServer): LongWord; stdcall; external HPSocketDLL;
+{TODO 获取包头标识 */ }
+function HP_TcpPackServer_GetPackHeaderFlag(pServer: HP_TcpPackServer): Word; stdcall; external HPSocketDLL;
+
+//***************************** TCP Pack Agent 属性访问方法 *****************************/
+
+{TODO 设置数据包最大长度(有效数据包最大长度不能超过 524287/0x7FFFF 字节,默认:262144/0x40000) */}
+procedure HP_TcpPackAgent_SetMaxPackSize(pAgent: HP_TcpPackAgent; dwMaxPackSize: LongWord); stdcall; external HPSocketDLL;
+{TODO 设置包头标识(有效包头标识取值范围 0 ~ 8191/0x1FFF,当包头标识为 0 时不校验包头,默认:0) */ }
+procedure HP_TcpPackAgent_SetPackHeaderFlag(pAgent: HP_TcpPackAgent; usPackHeaderFlag: Word); stdcall; external HPSocketDLL;
+
+{TODO 获取数据包最大长度 */ }
+function HP_TcpPackAgent_GetMaxPackSize(pAgent: HP_TcpPackAgent): LongWord; stdcall; external HPSocketDLL;
+{TODO 获取包头标识 */ }
+function HP_TcpPackAgent_GetPackHeaderFlag(pAgent: HP_TcpPackAgent): Word; stdcall; external HPSocketDLL;
+
+//***************************** TCP Pack Client 属性访问方法 *****************************/
+
+{TODO 设置数据包最大长度(有效数据包最大长度不能超过 524287/0x7FFFF 字节,默认:262144/0x40000) */ }
+procedure HP_TcpPackClient_SetMaxPackSize(pClient: HP_TcpPackAgent; dwMaxPackSize: LongWord); stdcall; external HPSocketDLL;
+{TODO 设置包头标识(有效包头标识取值范围 0 ~ 8191/0x1FFF,当包头标识为 0 时不校验包头,默认:0) */ }
+procedure HP_TcpPackClient_SetPackHeaderFlag(pClient: HP_TcpPackAgent; usPackHeaderFlag: Word); stdcall; external HPSocketDLL;
+
+{TODO 获取数据包最大长度 */ }
+function HP_TcpPackClient_GetMaxPackSize(pClient: HP_TcpPackAgent): LongWord; stdcall; external HPSocketDLL;
+{TODO 获取包头标识 */ }
+function HP_TcpPackClient_GetPackHeaderFlag(pClient: HP_TcpPackAgent): Word; stdcall; external HPSocketDLL;
+
+{ ************************************** 其它方法 ***************************************/ }
+{ /* 获取错误描述文本 */ }
+function HP_GetSocketErrorDesc(enCode: En_HP_SocketError): PWideChar; stdcall; external HPSocketDLL;
+{ /* 调用系统的 ::GetLastError() 方法获取系统错误代码 */ }
+function SYS_GetLastError(): LongInt; stdcall; external HPSocketDLL;
+// 调用系统的 ::WSAGetLastError() 方法获取通信错误代码
+function SYS_WSAGetLastError(): Integer; stdcall; external HPSocketDLL;
+// 调用系统的 setsockopt()
+function SYS_SetSocketOption(sock: SOCKET; level: Integer; name: Integer; val: pointer; len: Integer): Integer; stdcall; external HPSocketDLL;
+// 调用系统的 getsockopt()
+function SYS_GetSocketOption(sock: SOCKET; level: Integer; name: Integer; val: Pointer; len: PInteger): Integer; stdcall; external HPSocketDLL;
+// 调用系统的 ioctlsocket()
+function SYS_IoctlSocket(sock: SOCKET; cmd: LongInt; arg: PULONG): Integer; stdcall; external HPSocketDLL;
+// 调用系统的 ::WSAIoctl()
+function SYS_WSAIoctl(sock: SOCKET; dwIoControlCode: LongInt; lpvInBuffer: pointer; cbInBuffer: LongInt; lpvOutBuffer: pointer; cbOutBuffer: LongInt; lpcbBytesReturned: LPDWORD): Integer; stdcall; external HPSocketDLL;
+
+
+implementation
+
+
+initialization
+ IsMultiThread := True;
+end.
+
+
\ No newline at end of file
diff --git a/HP-Socket/Demo/Other Languages Demos/Delphi/Server/Project1.cfg b/HP-Socket/Demo/Other Languages Demos/Delphi/Server/Project1.cfg
new file mode 100644
index 000000000..a03d9e94d
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/Delphi/Server/Project1.cfg
@@ -0,0 +1,35 @@
+-$A8
+-$B-
+-$C+
+-$D+
+-$E-
+-$F-
+-$G+
+-$H+
+-$I+
+-$J-
+-$K-
+-$L+
+-$M-
+-$N+
+-$O+
+-$P+
+-$Q-
+-$R-
+-$S-
+-$T-
+-$U-
+-$V+
+-$W-
+-$X+
+-$YD
+-$Z1
+-cg
+-AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
+-H+
+-W+
+-M
+-$M16384,1048576
+-K$00400000
+-LE"e:\编程工具\delphi7.3\delphi7\Projects\Bpl"
+-LN"e:\编程工具\delphi7.3\delphi7\Projects\Bpl"
diff --git a/HP-Socket/Demo/Other Languages Demos/Delphi/Server/Project1.dof b/HP-Socket/Demo/Other Languages Demos/Delphi/Server/Project1.dof
new file mode 100644
index 000000000..6f3b1c900
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/Delphi/Server/Project1.dof
@@ -0,0 +1,121 @@
+[FileVersion]
+Version=7.0
+[Compiler]
+A=8
+B=0
+C=1
+D=1
+E=0
+F=0
+G=1
+H=1
+I=1
+J=0
+K=0
+L=1
+M=0
+N=1
+O=1
+P=1
+Q=0
+R=0
+S=0
+T=0
+U=0
+V=1
+W=0
+X=1
+Y=1
+Z=1
+ShowHints=1
+ShowWarnings=1
+UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
+NamespacePrefix=
+SymbolDeprecated=1
+SymbolLibrary=1
+SymbolPlatform=1
+UnitLibrary=1
+UnitPlatform=1
+UnitDeprecated=1
+HResultCompat=1
+HidingMember=1
+HiddenVirtual=1
+Garbage=1
+BoundsError=1
+ZeroNilCompat=1
+StringConstTruncated=1
+ForLoopVarVarPar=1
+TypedConstVarPar=1
+AsgToTypedConst=1
+CaseLabelRange=1
+ForVariable=1
+ConstructingAbstract=1
+ComparisonFalse=1
+ComparisonTrue=1
+ComparingSignedUnsigned=1
+CombiningSignedUnsigned=1
+UnsupportedConstruct=1
+FileOpen=1
+FileOpenUnitSrc=1
+BadGlobalSymbol=1
+DuplicateConstructorDestructor=1
+InvalidDirective=1
+PackageNoLink=1
+PackageThreadVar=1
+ImplicitImport=1
+HPPEMITIgnored=1
+NoRetVal=1
+UseBeforeDef=1
+ForLoopVarUndef=1
+UnitNameMismatch=1
+NoCFGFileFound=1
+MessageDirective=1
+ImplicitVariants=1
+UnicodeToLocale=1
+LocaleToUnicode=1
+ImagebaseMultiple=1
+SuspiciousTypecast=1
+PrivatePropAccessor=1
+UnsafeType=1
+UnsafeCode=1
+UnsafeCast=1
+[Linker]
+MapFile=0
+OutputObjs=0
+ConsoleApp=1
+DebugInfo=0
+RemoteSymbols=0
+MinStackSize=16384
+MaxStackSize=1048576
+ImageBase=4194304
+ExeDescription=
+[Directories]
+OutputDir=
+UnitOutputDir=
+PackageDLLOutputDir=
+PackageDCPOutputDir=
+SearchPath=
+Packages=
+Conditionals=
+DebugSourceDirs=
+UsePackages=0
+[Parameters]
+RunParams=
+HostApplication=
+Launcher=
+UseLauncher=0
+DebugCWD=
+[Version Info]
+IncludeVerInfo=0
+AutoIncBuild=0
+MajorVer=1
+MinorVer=0
+Release=0
+Build=0
+Debug=0
+PreRelease=0
+Special=0
+Private=0
+DLL=0
+Locale=2052
+CodePage=936
diff --git a/HP-Socket/Demo/Other Languages Demos/Delphi/Server/Project1.dpr b/HP-Socket/Demo/Other Languages Demos/Delphi/Server/Project1.dpr
new file mode 100644
index 000000000..95d84c1f7
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/Delphi/Server/Project1.dpr
@@ -0,0 +1,13 @@
+program Project1;
+
+uses
+ Forms,
+ Unit1 in 'Unit1.pas' {Form1},
+ HPSocketSDKUnit in 'HPSocketSDKUnit.pas';
+{$R *.res}
+
+begin
+ Application.Initialize;
+ Application.CreateForm(TForm1, Form1);
+ Application.Run;
+end.
diff --git a/HP-Socket/Demo/Other Languages Demos/Delphi/Server/Project1.exe b/HP-Socket/Demo/Other Languages Demos/Delphi/Server/Project1.exe
new file mode 100644
index 000000000..62929bbf5
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/Delphi/Server/Project1.exe differ
diff --git a/HP-Socket/Demo/Other Languages Demos/Delphi/Server/Project1.res b/HP-Socket/Demo/Other Languages Demos/Delphi/Server/Project1.res
new file mode 100644
index 000000000..e84b2e499
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/Delphi/Server/Project1.res differ
diff --git a/HP-Socket/Demo/Other Languages Demos/Delphi/Server/Unit1.dcu b/HP-Socket/Demo/Other Languages Demos/Delphi/Server/Unit1.dcu
new file mode 100644
index 000000000..b4c63c8ff
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/Delphi/Server/Unit1.dcu differ
diff --git a/HP-Socket/Demo/Other Languages Demos/Delphi/Server/Unit1.ddp b/HP-Socket/Demo/Other Languages Demos/Delphi/Server/Unit1.ddp
new file mode 100644
index 000000000..4370276c1
Binary files /dev/null and b/HP-Socket/Demo/Other Languages Demos/Delphi/Server/Unit1.ddp differ
diff --git a/HP-Socket/Demo/Other Languages Demos/Delphi/Server/Unit1.dfm b/HP-Socket/Demo/Other Languages Demos/Delphi/Server/Unit1.dfm
new file mode 100644
index 000000000..79273ce11
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/Delphi/Server/Unit1.dfm
@@ -0,0 +1,94 @@
+object Form1: TForm1
+ Left = 544
+ Top = 125
+ Width = 549
+ Height = 411
+ Caption = 'Delphi HP Demo'
+ Color = clBtnFace
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ OldCreateOrder = False
+ OnCreate = FormCreate
+ OnDestroy = FormDestroy
+ PixelsPerInch = 96
+ TextHeight = 13
+ object Label1: TLabel
+ Left = 16
+ Top = 16
+ Width = 60
+ Height = 13
+ Caption = #26381#21153#22320#22336#65306
+ end
+ object Label2: TLabel
+ Left = 15
+ Top = 47
+ Width = 60
+ Height = 13
+ Caption = #26381#21153#31471#21475#65306
+ end
+ object Label3: TLabel
+ Left = 216
+ Top = 16
+ Width = 60
+ Height = 13
+ Caption = #22312#32447#36830#25509#65306
+ end
+ object Label4: TLabel
+ Left = 272
+ Top = 16
+ Width = 6
+ Height = 13
+ Caption = '0'
+ end
+ object lst: TListBox
+ Left = 5
+ Top = 79
+ Width = 521
+ Height = 289
+ Enabled = False
+ ItemHeight = 13
+ TabOrder = 0
+ end
+ object Edit1: TEdit
+ Left = 71
+ Top = 14
+ Width = 121
+ Height = 21
+ TabOrder = 1
+ Text = '0.0.0.0'
+ end
+ object Edit2: TEdit
+ Left = 71
+ Top = 45
+ Width = 121
+ Height = 21
+ TabOrder = 2
+ Text = '8808'
+ end
+ object btn1: TButton
+ Left = 424
+ Top = 12
+ Width = 75
+ Height = 25
+ Caption = #21551#21160#26381#21153
+ TabOrder = 3
+ OnClick = btn1Click
+ end
+ object btn2: TButton
+ Left = 424
+ Top = 40
+ Width = 75
+ Height = 25
+ Caption = #20572#27490#26381#21153
+ TabOrder = 4
+ OnClick = btn2Click
+ end
+ object Timer1: TTimer
+ OnTimer = Timer1Timer
+ Left = 352
+ Top = 24
+ end
+end
diff --git a/HP-Socket/Demo/Other Languages Demos/Delphi/Server/Unit1.pas b/HP-Socket/Demo/Other Languages Demos/Delphi/Server/Unit1.pas
new file mode 100644
index 000000000..2db8e5b35
--- /dev/null
+++ b/HP-Socket/Demo/Other Languages Demos/Delphi/Server/Unit1.pas
@@ -0,0 +1,176 @@
+unit Unit1;
+
+interface
+
+uses
+ Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
+ Dialogs, StdCtrls,HPSocketSDKUnit, ExtCtrls;
+
+type
+ TForm1 = class(TForm)
+ lst: TListBox;
+ Label1: TLabel;
+ Edit1: TEdit;
+ Label2: TLabel;
+ Edit2: TEdit;
+ btn1: TButton;
+ btn2: TButton;
+ Label3: TLabel;
+ Label4: TLabel;
+ Timer1: TTimer;
+ procedure FormCreate(Sender: TObject);
+ procedure FormDestroy(Sender: TObject);
+ procedure btn1Click(Sender: TObject);
+ procedure btn2Click(Sender: TObject);
+ procedure Timer1Timer(Sender: TObject);
+ private
+ { Private declarations }
+ public
+ { Public declarations }
+ end;
+
+ Pserver = Record
+ DListener : Integer;
+ DServer : Integer;
+ end;
+
+var
+ Form1: TForm1;
+ PPserver: pserver;
+ cs:TRTLCriticalSection;
+implementation
+
+{$R *.dfm}
+procedure AddMsg(str: string);
+begin
+ EnterCriticalSection(CS);
+ Form1.lst.Items.Add('==> '+str);
+ LeaveCriticalSection(CS);
+
+end;
+
+function OnPrepareListen(soListen: Pointer): En_HP_HandleResult; stdcall;
+begin
+ AddMsg('准备监听 -> ' + inttostr(Integer(solisten)));
+ Result := HP_HR_OK;
+end;
+
+function OnAccept(dwConnId: DWORD; pClient: Pointer): En_HP_HandleResult; stdcall;
+var
+ ip: array [0 .. 40] of WideChar;
+ ipLength: Integer;
+ port: Word;
+begin
+ ipLength := 40;
+ if HP_Server_GetRemoteAddress(PPserver.DServer, dwConnId, ip, @ipLength, @port) then
+ begin
+ AddMsg('连接上线 -> '+ string(ip) +':'+ inttostr(port));
+ end
+ else
+ begin
+ AddMsg('取连接信息失败 -> ' + inttostr(dwConnId));
+ end;
+ Result := HP_HR_OK;
+end;
+
+function OnSend(dwConnId: DWORD; const pData: Pointer; iLength: Integer): En_HP_HandleResult; stdcall;
+begin
+ AddMsg('发送数据 -> ' + inttostr(iLength) + ' bytes');
+ Result := HP_HR_OK;
+end;
+
+function OnReceive(dwConnID: HP_CONNID;const pData: Pointer; iLength: Integer): En_HP_HandleResult; stdcall;
+begin
+ AddMsg('收到数据 -> ' + inttostr(iLength) + ' bytes');
+ Result:= HP_HR_OK;
+end;
+
+function OnCloseConn(dwConnId: DWORD; enOperation: En_HP_SocketOperation; iErrorCode: Integer ): En_HP_HandleResult; stdcall;
+begin
+ AddMsg('连接关闭 -> ' + inttostr(Integer(dwConnId)));
+ Result := HP_HR_OK;
+end;
+
+function OnShutdown(): En_HP_HandleResult; stdcall;
+begin
+ AddMsg('服务关闭 -> ');
+ Result:= HP_HR_OK;
+end;
+
+procedure TForm1.FormCreate(Sender: TObject);
+begin
+ // 创建监听器对象
+ PPserver.DListener:= Create_HP_TcpServerListener();
+
+ // 创建 Socket 对象
+ PPserver.DServer := Create_HP_TcpServer(PPserver.DListener);
+
+ // 设置 Socket 监听器回调函数
+ HP_Set_FN_Server_OnPrepareListen(PPserver.DListener, OnPrepareListen);
+ HP_Set_FN_Server_OnAccept(PPserver.DListener, OnAccept);
+ HP_Set_FN_Server_OnSend(PPserver.DListener, OnSend);
+ HP_Set_FN_Server_OnReceive(PPserver.DListener, OnReceive);
+ HP_Set_FN_Server_OnClose(PPserver.DListener, OnCloseConn);
+ HP_Set_FN_Server_OnShutdown(PPserver.DListener, OnShutdown);
+
+ // 设置HP模式为并发发送模式
+ HP_Server_SetSendPolicy(PPserver.DServer, HP_SP_DIRECT);
+
+ //设置工作线程
+ HP_Server_SetWorkerThreadCount(PPserver.DServer, 30);
+
+ //初始化临界区
+ InitializeCriticalSection(CS);
+
+ AddMsg('系统初始化完成');
+end;
+
+procedure TForm1.FormDestroy(Sender: TObject);
+begin
+ DeleteCriticalSection(CS); //删除临界区
+end;
+
+procedure TForm1.btn1Click(Sender: TObject);
+var
+ Ip:WideString;
+ Port:Word;
+ errorId: En_HP_SocketError;
+ errorMsg: WideString;
+begin
+ Ip := EDIT1.Text;
+ Port := StrToInt(Edit2.TEXT);
+
+ if HP_Server_Start(PPserver.DServer, ip, port) then
+ begin
+ AddMsg(Format('服务启动成功 -> (%s:%d)', [ip, port]));
+ end
+ else
+ begin
+ errorId := HP_Server_GetLastError(PPserver.DServer);
+ errorMsg := HP_Server_GetLastErrorDesc(PPserver.DServer);
+ AddMsg(Format('服务启动失败 -> %s(%d)', [errorMsg, Integer(errorId)]));
+ end;
+end;
+
+procedure TForm1.btn2Click(Sender: TObject);
+begin
+ if HP_Server_Stop(PPserver.DServer) then
+ begin
+ AddMsg('服务停止成功 -> ');
+ end
+ else
+ begin
+ AddMsg('服务停止失败 -> ');
+ end;
+
+end;
+
+procedure TForm1.Timer1Timer(Sender: TObject);
+var
+ Count:Integer;
+begin
+ Count:= HP_Server_GetConnectionCount(PPserver.DServer);
+ Label4.Caption:= IntToStr(Count);
+end;
+
+end.
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/dll\350\260\203\347\224\250/Bin/HPSocket4C.dll" "b/HP-Socket/Demo/Other Languages Demos/E/dll\350\260\203\347\224\250/Bin/HPSocket4C.dll"
new file mode 100644
index 000000000..e3ee99f44
Binary files /dev/null and "b/HP-Socket/Demo/Other Languages Demos/E/dll\350\260\203\347\224\250/Bin/HPSocket4C.dll" differ
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/dll\350\260\203\347\224\250/HPSocket.ec" "b/HP-Socket/Demo/Other Languages Demos/E/dll\350\260\203\347\224\250/HPSocket.ec"
new file mode 100644
index 000000000..59fc90836
Binary files /dev/null and "b/HP-Socket/Demo/Other Languages Demos/E/dll\350\260\203\347\224\250/HPSocket.ec" differ
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/dll\350\260\203\347\224\250/TestEcho-Pull/TestEcho-PullClient.e" "b/HP-Socket/Demo/Other Languages Demos/E/dll\350\260\203\347\224\250/TestEcho-Pull/TestEcho-PullClient.e"
new file mode 100644
index 000000000..a0783c5cc
Binary files /dev/null and "b/HP-Socket/Demo/Other Languages Demos/E/dll\350\260\203\347\224\250/TestEcho-Pull/TestEcho-PullClient.e" differ
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/dll\350\260\203\347\224\250/TestEcho-Pull/TestEcho-PullServer.e" "b/HP-Socket/Demo/Other Languages Demos/E/dll\350\260\203\347\224\250/TestEcho-Pull/TestEcho-PullServer.e"
new file mode 100644
index 000000000..707150fa1
Binary files /dev/null and "b/HP-Socket/Demo/Other Languages Demos/E/dll\350\260\203\347\224\250/TestEcho-Pull/TestEcho-PullServer.e" differ
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/dll\350\260\203\347\224\250/TestEcho-UDP/TestEcho-UdpClient.e" "b/HP-Socket/Demo/Other Languages Demos/E/dll\350\260\203\347\224\250/TestEcho-UDP/TestEcho-UdpClient.e"
new file mode 100644
index 000000000..24c1483e6
Binary files /dev/null and "b/HP-Socket/Demo/Other Languages Demos/E/dll\350\260\203\347\224\250/TestEcho-UDP/TestEcho-UdpClient.e" differ
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/dll\350\260\203\347\224\250/TestEcho-UDP/TestEcho-UdpServer.e" "b/HP-Socket/Demo/Other Languages Demos/E/dll\350\260\203\347\224\250/TestEcho-UDP/TestEcho-UdpServer.e"
new file mode 100644
index 000000000..a2b6adcb0
Binary files /dev/null and "b/HP-Socket/Demo/Other Languages Demos/E/dll\350\260\203\347\224\250/TestEcho-UDP/TestEcho-UdpServer.e" differ
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/dll\350\260\203\347\224\250/TestEcho/TestEcho-Client.e" "b/HP-Socket/Demo/Other Languages Demos/E/dll\350\260\203\347\224\250/TestEcho/TestEcho-Client.e"
new file mode 100644
index 000000000..da551b65e
Binary files /dev/null and "b/HP-Socket/Demo/Other Languages Demos/E/dll\350\260\203\347\224\250/TestEcho/TestEcho-Client.e" differ
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/dll\350\260\203\347\224\250/TestEcho/TestEcho-Server.e" "b/HP-Socket/Demo/Other Languages Demos/E/dll\350\260\203\347\224\250/TestEcho/TestEcho-Server.e"
new file mode 100644
index 000000000..cdf1b50dd
Binary files /dev/null and "b/HP-Socket/Demo/Other Languages Demos/E/dll\350\260\203\347\224\250/TestEcho/TestEcho-Server.e" differ
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/Bin/ssl-cert/ca.crt" "b/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/Bin/ssl-cert/ca.crt"
new file mode 100644
index 000000000..c31217076
--- /dev/null
+++ "b/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/Bin/ssl-cert/ca.crt"
@@ -0,0 +1,23 @@
+-----BEGIN CERTIFICATE-----
+MIID0TCCArmgAwIBAgIJALFGobpzN5MdMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNV
+BAYTAkNOMQswCQYDVQQIDAJHRDELMAkGA1UEBwwCR1oxDDAKBgNVBAoMA1NTVDEP
+MA0GA1UECwwGSmVzc01BMRcwFQYDVQQDDA53d3cuamVzc21hLm9yZzEeMBwGCSqG
+SIb3DQEJARYPbGRjc2FhQDIxY24uY29tMB4XDTE2MDQwMTE1MDIwMFoXDTI0MDYx
+ODE1MDIwMFowfzELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQswCQYDVQQHDAJH
+WjEMMAoGA1UECgwDU1NUMQ8wDQYDVQQLDAZKZXNzTUExFzAVBgNVBAMMDnd3dy5q
+ZXNzbWEub3JnMR4wHAYJKoZIhvcNAQkBFg9sZGNzYWFAMjFjbi5jb20wggEiMA0G
+CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDht6llexLtFkV8ijjdJGaHXXQysWOJ
+UM/YQFYP52nviurJSpMbWSXnuaDlfidk76B66Np5mlnN5BiHqbBj34GCVKz5VQtx
+3kMY1y30YWyiHAEZiV3PLQc8/A9MnJM/q/mHaulmTuJi8A85TWadqUNXgiaIMkqz
+bKaauR1/GCxXuEVroqtyR99RCWhfakTz04KfIbt83QR0imWC6uhmvD/DXJ03XFzd
+XkK5aNp+ef1sBQgFKjeXV6EMuq+UgEDPXlCDUJAqsZt6W/ohrCAHWQYZ/RSvvaMJ
+O7aWROGAC/lh6ATOIbFlGVppw6zUGdIDkB5FVF1MC7CyDndncFrY+OJzAgMBAAGj
+UDBOMB0GA1UdDgQWBBT8fu6QFIfxlQvMWjl5pmfBjL6ciDAfBgNVHSMEGDAWgBT8
+fu6QFIfxlQvMWjl5pmfBjL6ciDAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUA
+A4IBAQDI+f6GMBJxRJNKrgbUYLD1U6LWEQJQ50g2NxGy0j+TL6oypoo/kyME3tOR
+EmXEDzytGcSaQ78xYcg97UQd8OhXYQr0qwZ/JLarmhCVK/bfbGTIn4Mk4ZgDqcOU
+46jsJeEZwUSrrq7svKO5d7+wV0VGPO+Ww4yzRCPwm2puXFY1+KpTxYX31+wwMB8p
+7GuJEDgV08qzLfcBAfSFFYiOHL3tJ+XNKFNRqigjeYrWuAMphOhpYfYnU0d0upe8
+wWx9Unm8qSkc7hiS/vvs1v7Pv1sqMFRBoaKOTqZ7Wz/5AySGPQjeMV/atmArDEkx
+z58OEgTzg1J/Keztxwj7I2KnYHyH
+-----END CERTIFICATE-----
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/Bin/ssl-cert/ca.key" "b/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/Bin/ssl-cert/ca.key"
new file mode 100644
index 000000000..e0a85b46b
--- /dev/null
+++ "b/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/Bin/ssl-cert/ca.key"
@@ -0,0 +1,30 @@
+-----BEGIN RSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: AES-256-CBC,ABBC3A36C737CF487C5C36CA5ACA4A5D
+
+zv/FdREV9tlLsPPzIrm5EIbGaTiReEz+9jlgplyVLkAZe7MNF868t5g93Ve46ehy
+XzBf2QtBE12xAgKmjTvK7RnO1Rih5LqY7VTrEhIFSkYdDTqTV8I8cWig7Hmg+qNw
+EymXdrCYjBQB1U3jmOxBqQrDw75KYJFq5vN+vAmnreA9m9NdOAWOQ+n5K0sJLQpk
+6F9a4pzym7v4mMmP67Ddf/qHVcbWPLOo3QkBUItGJYPpBL1ODu+rd/3f9EyJspVw
+3dQNAaT0OzA0RZ9Pew7+ZxzgFFDHA4sh6r4fcfpEfXTr1QQUg0F4B66+OTE1duoE
+T+PIwYWp4yyuYgUA7txpDsGaENbvfnsP81oLMIvU0TicKJoYxr2Zxa+lK2MWCa5D
+L9VbRMQM0bXTF1qCgjnPmFhxhdYgidxPEZPahyMmFU3LB9W5ils/DK+AXW1gC4ZY
+O8hpUGaZ7Lj5H6suMSYIX7CAEi0NXXdRMXw7bOBecRFy+fhgHmMF1fGgBG2Fd1lP
+wgHlydLQDZoUpTnZrifDzlH8oDqEbCCOSUYc82fVKeNNORePHLGuV8utz0UTR9Rq
+Ko9ZYEN7j+JsPBdG3CnrjDILrZA3peKPhEifrRL2mjHdMdwFsE/fetyvUssgh9VY
+o2Bi25khVu+2TwBMEO1nlS6U+TWOU8u4qxGtSj5xN1Fdplb098VXY1T08+NvDJUN
+7S52KPAyeXY6V2/Q7IyDpsnmM9SWiLrvf2C/niEHRLfWoNP5bt6r/e8RIjFPc0KV
+E8KvANWXSArM359F4+ucvMzrYEtkgnldf6UIN007qqr2eEREeVwxVWIpJZJauVDV
+1uOvTQCDU7O4cIV/FiK1+oVt9MQYAHnnG3revFzqcZtH2x3qWNEGwiyfDZh7qx7c
+8LFYiFLIQX2HGYcEpcKAbj65sJLecz7VtNQ2GMoXHh09BQ5VnleVInmAfAv6r01k
+OdTJ3CNf8YcW/PAKTGrgmsncGp8EvHbmDC4r1ecxxp3Mu7M7T9XfQ41nk1nCLmOp
++3B9ecnJx6bSkg6wrrofl2MifCyl6AvxyKUeAt+dNV319QL/imgV3VQiD+Gu5i+c
+1tveD4cKNm01izEZz6xPBZ9sH4G8TFYFOx572q2DdSZe2MXy/h6QfKUADPOkvPyr
+0dqNbPQKJDL7YJOG39k0L/GOe6uH+JxXlvYLtqSLznLTQkm9kkWVOB54gV+v2NBp
+831BnDdlwv9AnScDY7o4fG1qAaWIZyMWntmORfpHkOMRbrBqK5TeczpoV2jr1iGl
+h1oIbbANJzaXEydnWcnUPujopP7oYG2KGhDbzhhR/PGlvLknIoAA55BqL23dzHct
+1/xaaHqxcjGNymgSPPD9Kjx0qQZovOb5WKDyg5+D5GIfRqq+c1SQeZw+5jcoMBIF
+TSdfiwAxhLkT8SQf72C6tAYsxkTubbcU1gc0Vkdd5Q2FWc6YgCb6XVPYC5jHATwV
+V4v5JVqGLRFi056heSpA0EFWp/AuSoaYaQRwGfBnUysaocDlEE4kTNzzJIwgbWrt
+iTL5qB7LIexqUVWVjmUmx6S0+f6qVYovDjFHVg61Xb6zdL04LmU0VrMCwgUBEt2j
+-----END RSA PRIVATE KEY-----
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/Bin/ssl-cert/ca.pem" "b/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/Bin/ssl-cert/ca.pem"
new file mode 100644
index 000000000..57f3b363b
--- /dev/null
+++ "b/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/Bin/ssl-cert/ca.pem"
@@ -0,0 +1,53 @@
+-----BEGIN RSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: AES-256-CBC,ABBC3A36C737CF487C5C36CA5ACA4A5D
+
+zv/FdREV9tlLsPPzIrm5EIbGaTiReEz+9jlgplyVLkAZe7MNF868t5g93Ve46ehy
+XzBf2QtBE12xAgKmjTvK7RnO1Rih5LqY7VTrEhIFSkYdDTqTV8I8cWig7Hmg+qNw
+EymXdrCYjBQB1U3jmOxBqQrDw75KYJFq5vN+vAmnreA9m9NdOAWOQ+n5K0sJLQpk
+6F9a4pzym7v4mMmP67Ddf/qHVcbWPLOo3QkBUItGJYPpBL1ODu+rd/3f9EyJspVw
+3dQNAaT0OzA0RZ9Pew7+ZxzgFFDHA4sh6r4fcfpEfXTr1QQUg0F4B66+OTE1duoE
+T+PIwYWp4yyuYgUA7txpDsGaENbvfnsP81oLMIvU0TicKJoYxr2Zxa+lK2MWCa5D
+L9VbRMQM0bXTF1qCgjnPmFhxhdYgidxPEZPahyMmFU3LB9W5ils/DK+AXW1gC4ZY
+O8hpUGaZ7Lj5H6suMSYIX7CAEi0NXXdRMXw7bOBecRFy+fhgHmMF1fGgBG2Fd1lP
+wgHlydLQDZoUpTnZrifDzlH8oDqEbCCOSUYc82fVKeNNORePHLGuV8utz0UTR9Rq
+Ko9ZYEN7j+JsPBdG3CnrjDILrZA3peKPhEifrRL2mjHdMdwFsE/fetyvUssgh9VY
+o2Bi25khVu+2TwBMEO1nlS6U+TWOU8u4qxGtSj5xN1Fdplb098VXY1T08+NvDJUN
+7S52KPAyeXY6V2/Q7IyDpsnmM9SWiLrvf2C/niEHRLfWoNP5bt6r/e8RIjFPc0KV
+E8KvANWXSArM359F4+ucvMzrYEtkgnldf6UIN007qqr2eEREeVwxVWIpJZJauVDV
+1uOvTQCDU7O4cIV/FiK1+oVt9MQYAHnnG3revFzqcZtH2x3qWNEGwiyfDZh7qx7c
+8LFYiFLIQX2HGYcEpcKAbj65sJLecz7VtNQ2GMoXHh09BQ5VnleVInmAfAv6r01k
+OdTJ3CNf8YcW/PAKTGrgmsncGp8EvHbmDC4r1ecxxp3Mu7M7T9XfQ41nk1nCLmOp
++3B9ecnJx6bSkg6wrrofl2MifCyl6AvxyKUeAt+dNV319QL/imgV3VQiD+Gu5i+c
+1tveD4cKNm01izEZz6xPBZ9sH4G8TFYFOx572q2DdSZe2MXy/h6QfKUADPOkvPyr
+0dqNbPQKJDL7YJOG39k0L/GOe6uH+JxXlvYLtqSLznLTQkm9kkWVOB54gV+v2NBp
+831BnDdlwv9AnScDY7o4fG1qAaWIZyMWntmORfpHkOMRbrBqK5TeczpoV2jr1iGl
+h1oIbbANJzaXEydnWcnUPujopP7oYG2KGhDbzhhR/PGlvLknIoAA55BqL23dzHct
+1/xaaHqxcjGNymgSPPD9Kjx0qQZovOb5WKDyg5+D5GIfRqq+c1SQeZw+5jcoMBIF
+TSdfiwAxhLkT8SQf72C6tAYsxkTubbcU1gc0Vkdd5Q2FWc6YgCb6XVPYC5jHATwV
+V4v5JVqGLRFi056heSpA0EFWp/AuSoaYaQRwGfBnUysaocDlEE4kTNzzJIwgbWrt
+iTL5qB7LIexqUVWVjmUmx6S0+f6qVYovDjFHVg61Xb6zdL04LmU0VrMCwgUBEt2j
+-----END RSA PRIVATE KEY-----
+-----BEGIN CERTIFICATE-----
+MIID0TCCArmgAwIBAgIJALFGobpzN5MdMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNV
+BAYTAkNOMQswCQYDVQQIDAJHRDELMAkGA1UEBwwCR1oxDDAKBgNVBAoMA1NTVDEP
+MA0GA1UECwwGSmVzc01BMRcwFQYDVQQDDA53d3cuamVzc21hLm9yZzEeMBwGCSqG
+SIb3DQEJARYPbGRjc2FhQDIxY24uY29tMB4XDTE2MDQwMTE1MDIwMFoXDTI0MDYx
+ODE1MDIwMFowfzELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQswCQYDVQQHDAJH
+WjEMMAoGA1UECgwDU1NUMQ8wDQYDVQQLDAZKZXNzTUExFzAVBgNVBAMMDnd3dy5q
+ZXNzbWEub3JnMR4wHAYJKoZIhvcNAQkBFg9sZGNzYWFAMjFjbi5jb20wggEiMA0G
+CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDht6llexLtFkV8ijjdJGaHXXQysWOJ
+UM/YQFYP52nviurJSpMbWSXnuaDlfidk76B66Np5mlnN5BiHqbBj34GCVKz5VQtx
+3kMY1y30YWyiHAEZiV3PLQc8/A9MnJM/q/mHaulmTuJi8A85TWadqUNXgiaIMkqz
+bKaauR1/GCxXuEVroqtyR99RCWhfakTz04KfIbt83QR0imWC6uhmvD/DXJ03XFzd
+XkK5aNp+ef1sBQgFKjeXV6EMuq+UgEDPXlCDUJAqsZt6W/ohrCAHWQYZ/RSvvaMJ
+O7aWROGAC/lh6ATOIbFlGVppw6zUGdIDkB5FVF1MC7CyDndncFrY+OJzAgMBAAGj
+UDBOMB0GA1UdDgQWBBT8fu6QFIfxlQvMWjl5pmfBjL6ciDAfBgNVHSMEGDAWgBT8
+fu6QFIfxlQvMWjl5pmfBjL6ciDAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUA
+A4IBAQDI+f6GMBJxRJNKrgbUYLD1U6LWEQJQ50g2NxGy0j+TL6oypoo/kyME3tOR
+EmXEDzytGcSaQ78xYcg97UQd8OhXYQr0qwZ/JLarmhCVK/bfbGTIn4Mk4ZgDqcOU
+46jsJeEZwUSrrq7svKO5d7+wV0VGPO+Ww4yzRCPwm2puXFY1+KpTxYX31+wwMB8p
+7GuJEDgV08qzLfcBAfSFFYiOHL3tJ+XNKFNRqigjeYrWuAMphOhpYfYnU0d0upe8
+wWx9Unm8qSkc7hiS/vvs1v7Pv1sqMFRBoaKOTqZ7Wz/5AySGPQjeMV/atmArDEkx
+z58OEgTzg1J/Keztxwj7I2KnYHyH
+-----END CERTIFICATE-----
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/Bin/ssl-cert/client.cer" "b/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/Bin/ssl-cert/client.cer"
new file mode 100644
index 000000000..33a266a82
--- /dev/null
+++ "b/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/Bin/ssl-cert/client.cer"
@@ -0,0 +1,23 @@
+-----BEGIN CERTIFICATE-----
+MIID6TCCAtGgAwIBAgIDAIFpMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNVBAYTAkNO
+MQswCQYDVQQIDAJHRDELMAkGA1UEBwwCR1oxDDAKBgNVBAoMA1NTVDEPMA0GA1UE
+CwwGSmVzc01BMRcwFQYDVQQDDA53d3cuamVzc21hLm9yZzEeMBwGCSqGSIb3DQEJ
+ARYPbGRjc2FhQDIxY24uY29tMB4XDTE2MDEwMTAwMDAwMFoXDTI2MDEwMTAwMDAw
+MFowcjELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQwwCgYDVQQKDANTU1QxDzAN
+BgNVBAsMBkplc3NNQTEXMBUGA1UEAwwOd3d3Lmplc3NtYS5vcmcxHjAcBgkqhkiG
+9w0BCQEWD2xkY3NhYUAyMWNuLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBAOFlDuWj95Nov+48W0ZaUp69GVB+U3orPuVm+fU5gXgl0tJbNbXS0GOM
+MspmMB0WxciTfj+t/WufpcHKzryHwrbqmMgrZiSyrp4ulA2mQuTPR32vgQ3/2eBs
+O884GmKOUbiaORgHGBoRAdOnoWarM7B/igS6WGqPetaUz12QAv2vzw9Qn0xxIBpr
+SVJumTo9HtOvuRj0BNXMRRYp+lfX2+96cftidyU1q+2Y2v3Fedzlo8Lr7m1ZkPcp
+ugQDz3R0kXvigDPAKhbTj6eAXJ/hcPOCGQ5RTIZJH4JnJ2jKw5lTjJ6y0rbt9Jq9
+NuIqz3GORHYWY4xBmbdTZy0BrbQOePECAwEAAaN7MHkwCQYDVR0TBAIwADAsBglg
+hkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0O
+BBYEFHYUdE6SbzXIWA8m3TwdgUJfAT6+MB8GA1UdIwQYMBaAFPx+7pAUh/GVC8xa
+OXmmZ8GMvpyIMA0GCSqGSIb3DQEBCwUAA4IBAQCZWaDrHbRHNNEaCVVFl5WCNqyd
+y1MpI2iErmfiCTNiG4v9wImTGWIWRHc3dZowniwSb43OuuhlpdWCxeal9nTL6iCP
+B486EMOsVWcfUZkPeK4cBgRXbHTmjxfmQEHHA6NTQdRc7LGq4tjhYs8zmxBVI2HO
+uIp0Qbj/Mb2j8r13IC91Z5Ontq0mQTIg0vvffZsqvcjs3Mmrxr2iX/EYpKNR2DP+
+9msWTZH734tZ2I7vORZOprpdAwELOyVLXkKIcP9qkRPAcFNk0Fl5peBQtBuP1ky5
+kUzWMQq2eoy73miPRnQ8ZjZ/3xTXhMKJ6bCn3tbWrjvc1TwpobfwyfsFH9sq
+-----END CERTIFICATE-----
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/Bin/ssl-cert/client.crt" "b/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/Bin/ssl-cert/client.crt"
new file mode 100644
index 000000000..a87d4f3f7
--- /dev/null
+++ "b/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/Bin/ssl-cert/client.crt"
@@ -0,0 +1,82 @@
+Certificate:
+ Data:
+ Version: 3 (0x2)
+ Serial Number: 33129 (0x8169)
+ Signature Algorithm: sha256WithRSAEncryption
+ Issuer: C=CN, ST=GD, L=GZ, O=SST, OU=JessMA, CN=www.jessma.org/emailAddress=ldcsaa@21cn.com
+ Validity
+ Not Before: Jan 1 00:00:00 2016 GMT
+ Not After : Jan 1 00:00:00 2026 GMT
+ Subject: C=CN, ST=GD, O=SST, OU=JessMA, CN=www.jessma.org/emailAddress=ldcsaa@21cn.com
+ Subject Public Key Info:
+ Public Key Algorithm: rsaEncryption
+ Public-Key: (2048 bit)
+ Modulus:
+ 00:e1:65:0e:e5:a3:f7:93:68:bf:ee:3c:5b:46:5a:
+ 52:9e:bd:19:50:7e:53:7a:2b:3e:e5:66:f9:f5:39:
+ 81:78:25:d2:d2:5b:35:b5:d2:d0:63:8c:32:ca:66:
+ 30:1d:16:c5:c8:93:7e:3f:ad:fd:6b:9f:a5:c1:ca:
+ ce:bc:87:c2:b6:ea:98:c8:2b:66:24:b2:ae:9e:2e:
+ 94:0d:a6:42:e4:cf:47:7d:af:81:0d:ff:d9:e0:6c:
+ 3b:cf:38:1a:62:8e:51:b8:9a:39:18:07:18:1a:11:
+ 01:d3:a7:a1:66:ab:33:b0:7f:8a:04:ba:58:6a:8f:
+ 7a:d6:94:cf:5d:90:02:fd:af:cf:0f:50:9f:4c:71:
+ 20:1a:6b:49:52:6e:99:3a:3d:1e:d3:af:b9:18:f4:
+ 04:d5:cc:45:16:29:fa:57:d7:db:ef:7a:71:fb:62:
+ 77:25:35:ab:ed:98:da:fd:c5:79:dc:e5:a3:c2:eb:
+ ee:6d:59:90:f7:29:ba:04:03:cf:74:74:91:7b:e2:
+ 80:33:c0:2a:16:d3:8f:a7:80:5c:9f:e1:70:f3:82:
+ 19:0e:51:4c:86:49:1f:82:67:27:68:ca:c3:99:53:
+ 8c:9e:b2:d2:b6:ed:f4:9a:bd:36:e2:2a:cf:71:8e:
+ 44:76:16:63:8c:41:99:b7:53:67:2d:01:ad:b4:0e:
+ 78:f1
+ Exponent: 65537 (0x10001)
+ X509v3 extensions:
+ X509v3 Basic Constraints:
+ CA:FALSE
+ Netscape Comment:
+ OpenSSL Generated Certificate
+ X509v3 Subject Key Identifier:
+ 76:14:74:4E:92:6F:35:C8:58:0F:26:DD:3C:1D:81:42:5F:01:3E:BE
+ X509v3 Authority Key Identifier:
+ keyid:FC:7E:EE:90:14:87:F1:95:0B:CC:5A:39:79:A6:67:C1:8C:BE:9C:88
+
+ Signature Algorithm: sha256WithRSAEncryption
+ 99:59:a0:eb:1d:b4:47:34:d1:1a:09:55:45:97:95:82:36:ac:
+ 9d:cb:53:29:23:68:84:ae:67:e2:09:33:62:1b:8b:fd:c0:89:
+ 93:19:62:16:44:77:37:75:9a:30:9e:2c:12:6f:8d:ce:ba:e8:
+ 65:a5:d5:82:c5:e6:a5:f6:74:cb:ea:20:8f:07:8f:3a:10:c3:
+ ac:55:67:1f:51:99:0f:78:ae:1c:06:04:57:6c:74:e6:8f:17:
+ e6:40:41:c7:03:a3:53:41:d4:5c:ec:b1:aa:e2:d8:e1:62:cf:
+ 33:9b:10:55:23:61:ce:b8:8a:74:41:b8:ff:31:bd:a3:f2:bd:
+ 77:20:2f:75:67:93:a7:b6:ad:26:41:32:20:d2:fb:df:7d:9b:
+ 2a:bd:c8:ec:dc:c9:ab:c6:bd:a2:5f:f1:18:a4:a3:51:d8:33:
+ fe:f6:6b:16:4d:91:fb:df:8b:59:d8:8e:ef:39:16:4e:a6:ba:
+ 5d:03:01:0b:3b:25:4b:5e:42:88:70:ff:6a:91:13:c0:70:53:
+ 64:d0:59:79:a5:e0:50:b4:1b:8f:d6:4c:b9:91:4c:d6:31:0a:
+ b6:7a:8c:bb:de:68:8f:46:74:3c:66:36:7f:df:14:d7:84:c2:
+ 89:e9:b0:a7:de:d6:d6:ae:3b:dc:d5:3c:29:a1:b7:f0:c9:fb:
+ 05:1f:db:2a
+-----BEGIN CERTIFICATE-----
+MIID6TCCAtGgAwIBAgIDAIFpMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNVBAYTAkNO
+MQswCQYDVQQIDAJHRDELMAkGA1UEBwwCR1oxDDAKBgNVBAoMA1NTVDEPMA0GA1UE
+CwwGSmVzc01BMRcwFQYDVQQDDA53d3cuamVzc21hLm9yZzEeMBwGCSqGSIb3DQEJ
+ARYPbGRjc2FhQDIxY24uY29tMB4XDTE2MDEwMTAwMDAwMFoXDTI2MDEwMTAwMDAw
+MFowcjELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQwwCgYDVQQKDANTU1QxDzAN
+BgNVBAsMBkplc3NNQTEXMBUGA1UEAwwOd3d3Lmplc3NtYS5vcmcxHjAcBgkqhkiG
+9w0BCQEWD2xkY3NhYUAyMWNuLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBAOFlDuWj95Nov+48W0ZaUp69GVB+U3orPuVm+fU5gXgl0tJbNbXS0GOM
+MspmMB0WxciTfj+t/WufpcHKzryHwrbqmMgrZiSyrp4ulA2mQuTPR32vgQ3/2eBs
+O884GmKOUbiaORgHGBoRAdOnoWarM7B/igS6WGqPetaUz12QAv2vzw9Qn0xxIBpr
+SVJumTo9HtOvuRj0BNXMRRYp+lfX2+96cftidyU1q+2Y2v3Fedzlo8Lr7m1ZkPcp
+ugQDz3R0kXvigDPAKhbTj6eAXJ/hcPOCGQ5RTIZJH4JnJ2jKw5lTjJ6y0rbt9Jq9
+NuIqz3GORHYWY4xBmbdTZy0BrbQOePECAwEAAaN7MHkwCQYDVR0TBAIwADAsBglg
+hkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0O
+BBYEFHYUdE6SbzXIWA8m3TwdgUJfAT6+MB8GA1UdIwQYMBaAFPx+7pAUh/GVC8xa
+OXmmZ8GMvpyIMA0GCSqGSIb3DQEBCwUAA4IBAQCZWaDrHbRHNNEaCVVFl5WCNqyd
+y1MpI2iErmfiCTNiG4v9wImTGWIWRHc3dZowniwSb43OuuhlpdWCxeal9nTL6iCP
+B486EMOsVWcfUZkPeK4cBgRXbHTmjxfmQEHHA6NTQdRc7LGq4tjhYs8zmxBVI2HO
+uIp0Qbj/Mb2j8r13IC91Z5Ontq0mQTIg0vvffZsqvcjs3Mmrxr2iX/EYpKNR2DP+
+9msWTZH734tZ2I7vORZOprpdAwELOyVLXkKIcP9qkRPAcFNk0Fl5peBQtBuP1ky5
+kUzWMQq2eoy73miPRnQ8ZjZ/3xTXhMKJ6bCn3tbWrjvc1TwpobfwyfsFH9sq
+-----END CERTIFICATE-----
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/Bin/ssl-cert/client.csr" "b/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/Bin/ssl-cert/client.csr"
new file mode 100644
index 000000000..d35803d5b
--- /dev/null
+++ "b/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/Bin/ssl-cert/client.csr"
@@ -0,0 +1,18 @@
+-----BEGIN CERTIFICATE REQUEST-----
+MIIC8TCCAdkCAQAwfzELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQswCQYDVQQH
+DAJHWjEMMAoGA1UECgwDU1NUMQ8wDQYDVQQLDAZKZXNzTUExFzAVBgNVBAMMDnd3
+dy5qZXNzbWEub3JnMR4wHAYJKoZIhvcNAQkBFg9sZGNzYWFAMjFjbi5jb20wggEi
+MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDhZQ7lo/eTaL/uPFtGWlKevRlQ
+flN6Kz7lZvn1OYF4JdLSWzW10tBjjDLKZjAdFsXIk34/rf1rn6XBys68h8K26pjI
+K2Yksq6eLpQNpkLkz0d9r4EN/9ngbDvPOBpijlG4mjkYBxgaEQHTp6FmqzOwf4oE
+ulhqj3rWlM9dkAL9r88PUJ9McSAaa0lSbpk6PR7Tr7kY9ATVzEUWKfpX19vvenH7
+YnclNavtmNr9xXnc5aPC6+5tWZD3KboEA890dJF74oAzwCoW04+ngFyf4XDzghkO
+UUyGSR+CZydoysOZU4yestK27fSavTbiKs9xjkR2FmOMQZm3U2ctAa20DnjxAgMB
+AAGgLTASBgkqhkiG9w0BCQIxBQwDU1NUMBcGCSqGSIb3DQEJBzEKDAhwcG1tQHNz
+dDANBgkqhkiG9w0BAQsFAAOCAQEAtHiWz0XuqZi/2aoinH472W/sqG7S7YizbcQC
+kCRgYqQw32U0ujI2ndTt2WYDgFUlI1KY5N4b5pl2pdDepFWXLcLyG3nyCjXlJng5
+8YLENg02+xsLOZUjZEsY5pxEkrKYBBjt537P+fA83jtxakC+9xvTEC94CxICWMvx
+OVw1mWjUE3a7Hby7ChkOX/PhJdNzHdsMU9fKCWEFFmyJgrNkFc1nB1omt0j+OkXA
+scwFqhji7yJuwxboaDLdnTNIGGBbDLcw44s7udWB4QayvHwuNgcZ8shxlm686Xi5
+K+SXJTi0DPFKcucU2LA+VCLnMtefghCxbrU7fcFyPsJuT+jdsg==
+-----END CERTIFICATE REQUEST-----
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/Bin/ssl-cert/client.key" "b/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/Bin/ssl-cert/client.key"
new file mode 100644
index 000000000..a9f3dd0ca
--- /dev/null
+++ "b/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/Bin/ssl-cert/client.key"
@@ -0,0 +1,30 @@
+-----BEGIN RSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: AES-256-CBC,5F6ACADA6B6B1238FD34A0EC0C5EC2ED
+
+F0JylDtptlBaFpbCP9Qa2pRf5z8sBbUta6G+rBwuWn7GxU//Nub49/Mf0uRm3YTN
+PmCbIQKRyn/u92Yk6cJ9vLCiWe89pa+qlv+kF9PWmYo8Lt6dvtSr1TNAjelGvQjC
+HAi58BHoXXIRrZJQKjzFKGcwhWExCAOct5UDuHu64IvWg+LDccd+tTU/kdKEI9QY
+3POohP6etBBsFIoJFd23yxxNrvxK/v0as7EI/SeFzv7Mfn7haL4LxEsN+9XPN/Ap
+U0IxOT84dMgtIsvW2gvit+qNuaSvrocyEOr5uEfpoS58/yyb0VyNg94itkc6IK3X
+Yeokm2YOJk/4yMoZAeNMMDdR82csCzpTTHurMIZLgtr+SO1ChtreKm0XQB8QNyJ+
+CouAAHOBsxTPgVY/QS1TDrmEZv7cHOAvJp7BYvKroD/pi5Wu2IHAlIEXhdW3Evwn
+jyzUgMUHdXJIcngkkopYEoTPVEXsYX6aHvPJI+jDDKIfDM75SOOw1z7Divsb77I8
+n1jMYDUH4i2g2BixfwFRPxZ6NnRLtqM+TD4yecu3zsqvs0UIlrZFuVIl98Guqa1H
+tJKCxWEaJNb5YZg8GgdZFXYWXUN/HtFqWJelhGcjy48RjOy7LHJ30fkXV07b2s6M
+XcXj9g4jRRyAiZ/kmTqs+Oj6hn+iI4vdGumc2sG0+ZkUwDkj3zfn1N1+J/htVM1z
+Y2kHpKGZzQZ4eriy6CM++FrZ9CSNIPqh5AzayPuMxvEtd27vBnO8nKMwThbhGPtj
+fd7uPPzfG/W7Zo55lYL5opEzvOdULWm8+31ojitN7GSjsFW46HWoyYfTOlTAzP5+
+yPlUGxUyBhlqeXnQNTiLtRb22I2FF41HYH7GsYcxonHw3rKCcJedzL5BMg6Ic2xN
+ZxwXdj20rkugtcSAPxp3OGrmBiCX0wYiZaSgNg5zqI1SIhiWzkq64xoiIFlmxGEo
+Q/Vv7mpRmf1X0eTjiTYz4tYU6TPgtAqLLpmVNbozPnb5eGaMDbRlJnGJjqlXzPAw
+7qUhsb/KZ/k7yZLE+rseicwtAYA0th9A2tpc0CY3/EiL0w5E3zR0SPMinCJeO0rJ
+91njgDPxJ5lPXC04Dlgt/a1WK6D/yQ2kpIiNBUIlGZtr+nD9GqPYiGTqND53TL5f
+PJrr1PibL2l3fyhNDgNhgmY1CGpB6hNkqPOpit+XhGq6X0PlELcj7zYN3acW47jp
+KVm2lT1AXhzqemTWqPQL1+3s8ix0nGVNlmzsOFHqCkmr7FZb76hD5YTtGkOU/Kn3
+I5GqS5GHSCAVJnJWuFk2Y8qqg69mJREcoKThoYsuo8hw9JqZM34JIqqT029Nj35B
+xau4hSXkmHuUCGpwbr0yvsz3ikRfM6y0cT3T6oBiWgfYktpX//89YbyYGcQX7tK0
+aaHW2zvAfMyCWT0CxRen5GAyVeb+WFBdo+xD0HpQcRFtByiNNXmm4kJAoZujeHpe
+ZWcu3xkVcTqWMixAYHcDv3L0EXUnVeWplovRh1+OSm7YvdaLL3cctHoW3a8Kzdc1
+rtoGVI+f4xSEDheB5P4NX6UYbDLIGMPPuR0F5EliL+vmyJcEMuLY8KTPJ0uwf7Ns
+-----END RSA PRIVATE KEY-----
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/Bin/ssl-cert/client.pem" "b/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/Bin/ssl-cert/client.pem"
new file mode 100644
index 000000000..600dc8514
--- /dev/null
+++ "b/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/Bin/ssl-cert/client.pem"
@@ -0,0 +1,53 @@
+-----BEGIN RSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: AES-256-CBC,5F6ACADA6B6B1238FD34A0EC0C5EC2ED
+
+F0JylDtptlBaFpbCP9Qa2pRf5z8sBbUta6G+rBwuWn7GxU//Nub49/Mf0uRm3YTN
+PmCbIQKRyn/u92Yk6cJ9vLCiWe89pa+qlv+kF9PWmYo8Lt6dvtSr1TNAjelGvQjC
+HAi58BHoXXIRrZJQKjzFKGcwhWExCAOct5UDuHu64IvWg+LDccd+tTU/kdKEI9QY
+3POohP6etBBsFIoJFd23yxxNrvxK/v0as7EI/SeFzv7Mfn7haL4LxEsN+9XPN/Ap
+U0IxOT84dMgtIsvW2gvit+qNuaSvrocyEOr5uEfpoS58/yyb0VyNg94itkc6IK3X
+Yeokm2YOJk/4yMoZAeNMMDdR82csCzpTTHurMIZLgtr+SO1ChtreKm0XQB8QNyJ+
+CouAAHOBsxTPgVY/QS1TDrmEZv7cHOAvJp7BYvKroD/pi5Wu2IHAlIEXhdW3Evwn
+jyzUgMUHdXJIcngkkopYEoTPVEXsYX6aHvPJI+jDDKIfDM75SOOw1z7Divsb77I8
+n1jMYDUH4i2g2BixfwFRPxZ6NnRLtqM+TD4yecu3zsqvs0UIlrZFuVIl98Guqa1H
+tJKCxWEaJNb5YZg8GgdZFXYWXUN/HtFqWJelhGcjy48RjOy7LHJ30fkXV07b2s6M
+XcXj9g4jRRyAiZ/kmTqs+Oj6hn+iI4vdGumc2sG0+ZkUwDkj3zfn1N1+J/htVM1z
+Y2kHpKGZzQZ4eriy6CM++FrZ9CSNIPqh5AzayPuMxvEtd27vBnO8nKMwThbhGPtj
+fd7uPPzfG/W7Zo55lYL5opEzvOdULWm8+31ojitN7GSjsFW46HWoyYfTOlTAzP5+
+yPlUGxUyBhlqeXnQNTiLtRb22I2FF41HYH7GsYcxonHw3rKCcJedzL5BMg6Ic2xN
+ZxwXdj20rkugtcSAPxp3OGrmBiCX0wYiZaSgNg5zqI1SIhiWzkq64xoiIFlmxGEo
+Q/Vv7mpRmf1X0eTjiTYz4tYU6TPgtAqLLpmVNbozPnb5eGaMDbRlJnGJjqlXzPAw
+7qUhsb/KZ/k7yZLE+rseicwtAYA0th9A2tpc0CY3/EiL0w5E3zR0SPMinCJeO0rJ
+91njgDPxJ5lPXC04Dlgt/a1WK6D/yQ2kpIiNBUIlGZtr+nD9GqPYiGTqND53TL5f
+PJrr1PibL2l3fyhNDgNhgmY1CGpB6hNkqPOpit+XhGq6X0PlELcj7zYN3acW47jp
+KVm2lT1AXhzqemTWqPQL1+3s8ix0nGVNlmzsOFHqCkmr7FZb76hD5YTtGkOU/Kn3
+I5GqS5GHSCAVJnJWuFk2Y8qqg69mJREcoKThoYsuo8hw9JqZM34JIqqT029Nj35B
+xau4hSXkmHuUCGpwbr0yvsz3ikRfM6y0cT3T6oBiWgfYktpX//89YbyYGcQX7tK0
+aaHW2zvAfMyCWT0CxRen5GAyVeb+WFBdo+xD0HpQcRFtByiNNXmm4kJAoZujeHpe
+ZWcu3xkVcTqWMixAYHcDv3L0EXUnVeWplovRh1+OSm7YvdaLL3cctHoW3a8Kzdc1
+rtoGVI+f4xSEDheB5P4NX6UYbDLIGMPPuR0F5EliL+vmyJcEMuLY8KTPJ0uwf7Ns
+-----END RSA PRIVATE KEY-----
+-----BEGIN CERTIFICATE-----
+MIID6TCCAtGgAwIBAgIDAIFpMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNVBAYTAkNO
+MQswCQYDVQQIDAJHRDELMAkGA1UEBwwCR1oxDDAKBgNVBAoMA1NTVDEPMA0GA1UE
+CwwGSmVzc01BMRcwFQYDVQQDDA53d3cuamVzc21hLm9yZzEeMBwGCSqGSIb3DQEJ
+ARYPbGRjc2FhQDIxY24uY29tMB4XDTE2MDEwMTAwMDAwMFoXDTI2MDEwMTAwMDAw
+MFowcjELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQwwCgYDVQQKDANTU1QxDzAN
+BgNVBAsMBkplc3NNQTEXMBUGA1UEAwwOd3d3Lmplc3NtYS5vcmcxHjAcBgkqhkiG
+9w0BCQEWD2xkY3NhYUAyMWNuLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBAOFlDuWj95Nov+48W0ZaUp69GVB+U3orPuVm+fU5gXgl0tJbNbXS0GOM
+MspmMB0WxciTfj+t/WufpcHKzryHwrbqmMgrZiSyrp4ulA2mQuTPR32vgQ3/2eBs
+O884GmKOUbiaORgHGBoRAdOnoWarM7B/igS6WGqPetaUz12QAv2vzw9Qn0xxIBpr
+SVJumTo9HtOvuRj0BNXMRRYp+lfX2+96cftidyU1q+2Y2v3Fedzlo8Lr7m1ZkPcp
+ugQDz3R0kXvigDPAKhbTj6eAXJ/hcPOCGQ5RTIZJH4JnJ2jKw5lTjJ6y0rbt9Jq9
+NuIqz3GORHYWY4xBmbdTZy0BrbQOePECAwEAAaN7MHkwCQYDVR0TBAIwADAsBglg
+hkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0O
+BBYEFHYUdE6SbzXIWA8m3TwdgUJfAT6+MB8GA1UdIwQYMBaAFPx+7pAUh/GVC8xa
+OXmmZ8GMvpyIMA0GCSqGSIb3DQEBCwUAA4IBAQCZWaDrHbRHNNEaCVVFl5WCNqyd
+y1MpI2iErmfiCTNiG4v9wImTGWIWRHc3dZowniwSb43OuuhlpdWCxeal9nTL6iCP
+B486EMOsVWcfUZkPeK4cBgRXbHTmjxfmQEHHA6NTQdRc7LGq4tjhYs8zmxBVI2HO
+uIp0Qbj/Mb2j8r13IC91Z5Ontq0mQTIg0vvffZsqvcjs3Mmrxr2iX/EYpKNR2DP+
+9msWTZH734tZ2I7vORZOprpdAwELOyVLXkKIcP9qkRPAcFNk0Fl5peBQtBuP1ky5
+kUzWMQq2eoy73miPRnQ8ZjZ/3xTXhMKJ6bCn3tbWrjvc1TwpobfwyfsFH9sq
+-----END CERTIFICATE-----
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/Bin/ssl-cert/server.cer" "b/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/Bin/ssl-cert/server.cer"
new file mode 100644
index 000000000..0f8fe3b83
--- /dev/null
+++ "b/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/Bin/ssl-cert/server.cer"
@@ -0,0 +1,23 @@
+-----BEGIN CERTIFICATE-----
+MIID6TCCAtGgAwIBAgIDAIFoMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNVBAYTAkNO
+MQswCQYDVQQIDAJHRDELMAkGA1UEBwwCR1oxDDAKBgNVBAoMA1NTVDEPMA0GA1UE
+CwwGSmVzc01BMRcwFQYDVQQDDA53d3cuamVzc21hLm9yZzEeMBwGCSqGSIb3DQEJ
+ARYPbGRjc2FhQDIxY24uY29tMB4XDTE2MDEwMTAwMDAwMFoXDTI2MDEwMTAwMDAw
+MFowcjELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQwwCgYDVQQKDANTU1QxDzAN
+BgNVBAsMBkplc3NNQTEXMBUGA1UEAwwOd3d3Lmplc3NtYS5vcmcxHjAcBgkqhkiG
+9w0BCQEWD2xkY3NhYUAyMWNuLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBALEOPuYKEl/iN3ub/QNaaqo0Hynk62znTp5kXj0zQAqxLxwHU117xHBk
+0LCZux0LnDFl9JAlilvqfeaXRWmQd6hrvV+1mNpnIe2xfyNWwa37QDNjXB7mEg3V
+O/dN9KeVxq9RlH/dQJ7qZlYy4i7wznYMUlz38378wYoOvdAQBX1UrdjWA5T4q0Da
+cRRAV0fIp45hBarp6T1nhDEvttU8yud2lIEV9jWblkyGIhU4FisGOIRRGhnKzCAh
+CYSZ59mq8Wf4FawMyz/H4noHcWWJu4ID1oAE+VFGXKm78qjp/T71/myn5lcGquTx
+oSoJrx7og+529eaJwgeJd2JF7OQ5NysCAwEAAaN7MHkwCQYDVR0TBAIwADAsBglg
+hkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0O
+BBYEFO0CmyFtrGLrkNkkA62QPzSp8vgJMB8GA1UdIwQYMBaAFPx+7pAUh/GVC8xa
+OXmmZ8GMvpyIMA0GCSqGSIb3DQEBCwUAA4IBAQBT1JGXn7HMyNHZntM4kCp7kwN9
+HSpcbQxbWFtk+l8ANP9SqCIEd4xc4rAaUDDDMdD2S0wF9iio1MA1KC5OoJ5Dqw6C
+yTa08LRowlmnw+NNZC2xzaSRmzLGlPDHNauZ/G2ScdWsqR5v2+pKF7bYxAajRkk5
+oqRRDI6X7vHsvX/kqTn9Prk0sFmU0EU64az2iUe/MG9v1WY8eOV+tTEq29GuYYjJ
+E3H8vaeq1fTB0vYgT5xoCc36xVXju/3l17CE12n5of004u4eRi3/T0wbp9WgG2ns
+wjetaYeIAWS/AJQzIK22tztGAbAk6kTgsO5YLx2h6GLGpytDXWvgzr2PdEu1
+-----END CERTIFICATE-----
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/Bin/ssl-cert/server.crt" "b/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/Bin/ssl-cert/server.crt"
new file mode 100644
index 000000000..a6213ed40
--- /dev/null
+++ "b/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/Bin/ssl-cert/server.crt"
@@ -0,0 +1,82 @@
+Certificate:
+ Data:
+ Version: 3 (0x2)
+ Serial Number: 33128 (0x8168)
+ Signature Algorithm: sha256WithRSAEncryption
+ Issuer: C=CN, ST=GD, L=GZ, O=SST, OU=JessMA, CN=www.jessma.org/emailAddress=ldcsaa@21cn.com
+ Validity
+ Not Before: Jan 1 00:00:00 2016 GMT
+ Not After : Jan 1 00:00:00 2026 GMT
+ Subject: C=CN, ST=GD, O=SST, OU=JessMA, CN=www.jessma.org/emailAddress=ldcsaa@21cn.com
+ Subject Public Key Info:
+ Public Key Algorithm: rsaEncryption
+ Public-Key: (2048 bit)
+ Modulus:
+ 00:b1:0e:3e:e6:0a:12:5f:e2:37:7b:9b:fd:03:5a:
+ 6a:aa:34:1f:29:e4:eb:6c:e7:4e:9e:64:5e:3d:33:
+ 40:0a:b1:2f:1c:07:53:5d:7b:c4:70:64:d0:b0:99:
+ bb:1d:0b:9c:31:65:f4:90:25:8a:5b:ea:7d:e6:97:
+ 45:69:90:77:a8:6b:bd:5f:b5:98:da:67:21:ed:b1:
+ 7f:23:56:c1:ad:fb:40:33:63:5c:1e:e6:12:0d:d5:
+ 3b:f7:4d:f4:a7:95:c6:af:51:94:7f:dd:40:9e:ea:
+ 66:56:32:e2:2e:f0:ce:76:0c:52:5c:f7:f3:7e:fc:
+ c1:8a:0e:bd:d0:10:05:7d:54:ad:d8:d6:03:94:f8:
+ ab:40:da:71:14:40:57:47:c8:a7:8e:61:05:aa:e9:
+ e9:3d:67:84:31:2f:b6:d5:3c:ca:e7:76:94:81:15:
+ f6:35:9b:96:4c:86:22:15:38:16:2b:06:38:84:51:
+ 1a:19:ca:cc:20:21:09:84:99:e7:d9:aa:f1:67:f8:
+ 15:ac:0c:cb:3f:c7:e2:7a:07:71:65:89:bb:82:03:
+ d6:80:04:f9:51:46:5c:a9:bb:f2:a8:e9:fd:3e:f5:
+ fe:6c:a7:e6:57:06:aa:e4:f1:a1:2a:09:af:1e:e8:
+ 83:ee:76:f5:e6:89:c2:07:89:77:62:45:ec:e4:39:
+ 37:2b
+ Exponent: 65537 (0x10001)
+ X509v3 extensions:
+ X509v3 Basic Constraints:
+ CA:FALSE
+ Netscape Comment:
+ OpenSSL Generated Certificate
+ X509v3 Subject Key Identifier:
+ ED:02:9B:21:6D:AC:62:EB:90:D9:24:03:AD:90:3F:34:A9:F2:F8:09
+ X509v3 Authority Key Identifier:
+ keyid:FC:7E:EE:90:14:87:F1:95:0B:CC:5A:39:79:A6:67:C1:8C:BE:9C:88
+
+ Signature Algorithm: sha256WithRSAEncryption
+ 53:d4:91:97:9f:b1:cc:c8:d1:d9:9e:d3:38:90:2a:7b:93:03:
+ 7d:1d:2a:5c:6d:0c:5b:58:5b:64:fa:5f:00:34:ff:52:a8:22:
+ 04:77:8c:5c:e2:b0:1a:50:30:c3:31:d0:f6:4b:4c:05:f6:28:
+ a8:d4:c0:35:28:2e:4e:a0:9e:43:ab:0e:82:c9:36:b4:f0:b4:
+ 68:c2:59:a7:c3:e3:4d:64:2d:b1:cd:a4:91:9b:32:c6:94:f0:
+ c7:35:ab:99:fc:6d:92:71:d5:ac:a9:1e:6f:db:ea:4a:17:b6:
+ d8:c4:06:a3:46:49:39:a2:a4:51:0c:8e:97:ee:f1:ec:bd:7f:
+ e4:a9:39:fd:3e:b9:34:b0:59:94:d0:45:3a:e1:ac:f6:89:47:
+ bf:30:6f:6f:d5:66:3c:78:e5:7e:b5:31:2a:db:d1:ae:61:88:
+ c9:13:71:fc:bd:a7:aa:d5:f4:c1:d2:f6:20:4f:9c:68:09:cd:
+ fa:c5:55:e3:bb:fd:e5:d7:b0:84:d7:69:f9:a1:fd:34:e2:ee:
+ 1e:46:2d:ff:4f:4c:1b:a7:d5:a0:1b:69:ec:c2:37:ad:69:87:
+ 88:01:64:bf:00:94:33:20:ad:b6:b7:3b:46:01:b0:24:ea:44:
+ e0:b0:ee:58:2f:1d:a1:e8:62:c6:a7:2b:43:5d:6b:e0:ce:bd:
+ 8f:74:4b:b5
+-----BEGIN CERTIFICATE-----
+MIID6TCCAtGgAwIBAgIDAIFoMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNVBAYTAkNO
+MQswCQYDVQQIDAJHRDELMAkGA1UEBwwCR1oxDDAKBgNVBAoMA1NTVDEPMA0GA1UE
+CwwGSmVzc01BMRcwFQYDVQQDDA53d3cuamVzc21hLm9yZzEeMBwGCSqGSIb3DQEJ
+ARYPbGRjc2FhQDIxY24uY29tMB4XDTE2MDEwMTAwMDAwMFoXDTI2MDEwMTAwMDAw
+MFowcjELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQwwCgYDVQQKDANTU1QxDzAN
+BgNVBAsMBkplc3NNQTEXMBUGA1UEAwwOd3d3Lmplc3NtYS5vcmcxHjAcBgkqhkiG
+9w0BCQEWD2xkY3NhYUAyMWNuLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBALEOPuYKEl/iN3ub/QNaaqo0Hynk62znTp5kXj0zQAqxLxwHU117xHBk
+0LCZux0LnDFl9JAlilvqfeaXRWmQd6hrvV+1mNpnIe2xfyNWwa37QDNjXB7mEg3V
+O/dN9KeVxq9RlH/dQJ7qZlYy4i7wznYMUlz38378wYoOvdAQBX1UrdjWA5T4q0Da
+cRRAV0fIp45hBarp6T1nhDEvttU8yud2lIEV9jWblkyGIhU4FisGOIRRGhnKzCAh
+CYSZ59mq8Wf4FawMyz/H4noHcWWJu4ID1oAE+VFGXKm78qjp/T71/myn5lcGquTx
+oSoJrx7og+529eaJwgeJd2JF7OQ5NysCAwEAAaN7MHkwCQYDVR0TBAIwADAsBglg
+hkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0O
+BBYEFO0CmyFtrGLrkNkkA62QPzSp8vgJMB8GA1UdIwQYMBaAFPx+7pAUh/GVC8xa
+OXmmZ8GMvpyIMA0GCSqGSIb3DQEBCwUAA4IBAQBT1JGXn7HMyNHZntM4kCp7kwN9
+HSpcbQxbWFtk+l8ANP9SqCIEd4xc4rAaUDDDMdD2S0wF9iio1MA1KC5OoJ5Dqw6C
+yTa08LRowlmnw+NNZC2xzaSRmzLGlPDHNauZ/G2ScdWsqR5v2+pKF7bYxAajRkk5
+oqRRDI6X7vHsvX/kqTn9Prk0sFmU0EU64az2iUe/MG9v1WY8eOV+tTEq29GuYYjJ
+E3H8vaeq1fTB0vYgT5xoCc36xVXju/3l17CE12n5of004u4eRi3/T0wbp9WgG2ns
+wjetaYeIAWS/AJQzIK22tztGAbAk6kTgsO5YLx2h6GLGpytDXWvgzr2PdEu1
+-----END CERTIFICATE-----
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/Bin/ssl-cert/server.csr" "b/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/Bin/ssl-cert/server.csr"
new file mode 100644
index 000000000..0306648a3
--- /dev/null
+++ "b/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/Bin/ssl-cert/server.csr"
@@ -0,0 +1,18 @@
+-----BEGIN CERTIFICATE REQUEST-----
+MIIC8TCCAdkCAQAwfzELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQswCQYDVQQH
+DAJHWjEMMAoGA1UECgwDU1NUMQ8wDQYDVQQLDAZKZXNzTUExFzAVBgNVBAMMDnd3
+dy5qZXNzbWEub3JnMR4wHAYJKoZIhvcNAQkBFg9sZGNzYWFAMjFjbi5jb20wggEi
+MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCxDj7mChJf4jd7m/0DWmqqNB8p
+5Ots506eZF49M0AKsS8cB1Nde8RwZNCwmbsdC5wxZfSQJYpb6n3ml0VpkHeoa71f
+tZjaZyHtsX8jVsGt+0AzY1we5hIN1Tv3TfSnlcavUZR/3UCe6mZWMuIu8M52DFJc
+9/N+/MGKDr3QEAV9VK3Y1gOU+KtA2nEUQFdHyKeOYQWq6ek9Z4QxL7bVPMrndpSB
+FfY1m5ZMhiIVOBYrBjiEURoZyswgIQmEmefZqvFn+BWsDMs/x+J6B3FlibuCA9aA
+BPlRRlypu/Ko6f0+9f5sp+ZXBqrk8aEqCa8e6IPudvXmicIHiXdiRezkOTcrAgMB
+AAGgLTASBgkqhkiG9w0BCQIxBQwDU1NUMBcGCSqGSIb3DQEJBzEKDAhwcG1tQHNz
+dDANBgkqhkiG9w0BAQsFAAOCAQEAk9/S/9YUKjayh62Tagnk3hcJ5+YKJLHRtvv0
+Qu2HyPzpvyxORjQpnHaf+vpUj1W1amVQl7NSlNV181VzITtrySJyOdjvxTOvmITY
+stgCOXQiZeR6I9s2cZsh0yDcpiytlwnjWrFTgtIQ1dZgBRAvvJQIqoyrpgb22fva
+S3jilbFASColhEBeO0S8matO50qYwil7BabgQoUiu4QT6MhCXsJpNwi1qDD2rC/o
+Kffj63s4dRyJgqdbiYXMTDSfZvbx7UfnNCATBlniaoOTqbut1vmRGDYE+mkxly5X
+3KgcLvgpBoq0uUXNwsTNWo6CNthD8kY0fAkz34LG2aTKGy8Now==
+-----END CERTIFICATE REQUEST-----
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/Bin/ssl-cert/server.key" "b/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/Bin/ssl-cert/server.key"
new file mode 100644
index 000000000..2f36a1915
--- /dev/null
+++ "b/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/Bin/ssl-cert/server.key"
@@ -0,0 +1,30 @@
+-----BEGIN RSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: AES-256-CBC,107800C9B21513D8F642A394FAD9047E
+
+bmaTCBYAzKzpUrdaT6sb/dbH5o3JbFu2d8s1NfKhghYUG/RWgzx5H8QWSsh1Ll+8
+701HwSwauwbKaBWzWP5bj4mjw9hXcva8l1QWeuW+Q0GsE7uWNZGFQZbCxER/9jOu
+36KMlx0twcIEGs9PNwnY7d9oS/BMVpiUqhL8sPihMLCFK0fm6VGjMrfdIZJuZXEv
+BKt+c0UPkkPmivZjSm6iTPKI6VpGeyg0sM/uZr+mRj7IOAD6vsSQnCfUOq00Rm14
+ABrer8dCWJDKrx1iLq7tFojII+JcB7oBy+8KC/t0MlqmIP2jx93/MVW5lbZ3mj2v
+BanVQvklHTLe/WHjoaltqBEKN0sIzfyed6qWudKHUa8yjAr0PS4rsTbO0S4fFz+A
+KFWEs8fuXsanFHt5akWDTMiw1n4HaiioT4jjhWRRIKGEndztyGMklShYAdSTqsZO
+vzPO+xqLlg6wOgCGZ3Kl/c243XyLMCI+lJlzu3ccqzQJbNfPADXUcxSTqaEByWG3
+YIXttKY5WFBcNjf9B3c1qfJMt3nGY2QewnL+rNm/qpose/AsFS+2aqMeRw7fYh3R
+O+H+G+0gxrSK0E3WiewMIvUqFI6W300MWx6O7d87OkbfwMLpLPumsfLKswOKaAIF
+p0RxSABSe5ixqnErsoiYGNf3bln4tsQ+v5jYUY+Gn/9mVTPEYs6uwC78UW5Gj+Za
+lB3V8aRxQjWBerhLhf3iCmkkOVaG5JvVJDmvwo6iBRZ4NNzkAqOJm/UvfWoKN91b
+riHAWNayqvOfzaK6KYiJlOR9D779pK6xL+gZ0zo3rIA2yzs5MJAvJmaq6SQmQFl1
+Vzhnf3hIGJFtJYQJhlr36pkPgG9jVdJPhZisY9EsIAHvDbbLlBNexSmZc2RZmsVL
+VG6WqOm85DzuZxGULK/CnXCLpBMKWf9y5YPJrLkuwQILrr2btnAivPfUU80S3E0c
+VslBodCkSGVx3iQoAVJv2+6ZNMRNLVzpLnlaVtHl/gvw+InJlXmzBlZQFKOCaOny
+sz67qKmK1KWui2G3AzuvTEL9O++FVO+irpSNSLozxif/erLJl7R60pBkrWwd6jGB
+8qQv7ni+xIeXDBLSu26zPunLR/2PhrrCv49KmqNmF7sSNx6xmcc3CfgEy+5+Tm97
+KPE4JlaH/ZW61TlzXojbZMaiJltkFkpagFgm2bXrN1nMk2d6R+Yfe78lSvPKoB8k
+1m7LY1lNXFZJh2hxQRhdV9oTokFahUSitQCg1S3eASuE2jFRRL4jrh4LcBWUHZnJ
+OOAwBDOF4RfGyfiDs0IlrnLvK3a2KorlHfvUyj+cwkRmgI8sWgkJuNpz1mKDn5UZ
+yGn2JczHY0CiInRGgwMnS1Z/WpJZYGNh7pP7Hm1RnzVslkWSJGaKJv9jDNUCyy8R
+L+nwUSd6m6r8YWcs3zdBYsDHGOO5MgAU5Q8yuLbEgaK5NJSJgGkm+ya5oB88Y6T0
+JcL/u5xKw4kJiKgiLr3zrWe5qV6+lpH7fGKy7fucJWltDkfQSD3Dp0b64TW4FuQq
+VQhDR+KykLK6QxM2x3/maMfG578Ku1F6g4RboDR/6uCFu6hQuCoNYBk/QB0XpY13
+-----END RSA PRIVATE KEY-----
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/Bin/ssl-cert/server.pem" "b/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/Bin/ssl-cert/server.pem"
new file mode 100644
index 000000000..1d6040ca9
--- /dev/null
+++ "b/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/Bin/ssl-cert/server.pem"
@@ -0,0 +1,53 @@
+-----BEGIN RSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: AES-256-CBC,107800C9B21513D8F642A394FAD9047E
+
+bmaTCBYAzKzpUrdaT6sb/dbH5o3JbFu2d8s1NfKhghYUG/RWgzx5H8QWSsh1Ll+8
+701HwSwauwbKaBWzWP5bj4mjw9hXcva8l1QWeuW+Q0GsE7uWNZGFQZbCxER/9jOu
+36KMlx0twcIEGs9PNwnY7d9oS/BMVpiUqhL8sPihMLCFK0fm6VGjMrfdIZJuZXEv
+BKt+c0UPkkPmivZjSm6iTPKI6VpGeyg0sM/uZr+mRj7IOAD6vsSQnCfUOq00Rm14
+ABrer8dCWJDKrx1iLq7tFojII+JcB7oBy+8KC/t0MlqmIP2jx93/MVW5lbZ3mj2v
+BanVQvklHTLe/WHjoaltqBEKN0sIzfyed6qWudKHUa8yjAr0PS4rsTbO0S4fFz+A
+KFWEs8fuXsanFHt5akWDTMiw1n4HaiioT4jjhWRRIKGEndztyGMklShYAdSTqsZO
+vzPO+xqLlg6wOgCGZ3Kl/c243XyLMCI+lJlzu3ccqzQJbNfPADXUcxSTqaEByWG3
+YIXttKY5WFBcNjf9B3c1qfJMt3nGY2QewnL+rNm/qpose/AsFS+2aqMeRw7fYh3R
+O+H+G+0gxrSK0E3WiewMIvUqFI6W300MWx6O7d87OkbfwMLpLPumsfLKswOKaAIF
+p0RxSABSe5ixqnErsoiYGNf3bln4tsQ+v5jYUY+Gn/9mVTPEYs6uwC78UW5Gj+Za
+lB3V8aRxQjWBerhLhf3iCmkkOVaG5JvVJDmvwo6iBRZ4NNzkAqOJm/UvfWoKN91b
+riHAWNayqvOfzaK6KYiJlOR9D779pK6xL+gZ0zo3rIA2yzs5MJAvJmaq6SQmQFl1
+Vzhnf3hIGJFtJYQJhlr36pkPgG9jVdJPhZisY9EsIAHvDbbLlBNexSmZc2RZmsVL
+VG6WqOm85DzuZxGULK/CnXCLpBMKWf9y5YPJrLkuwQILrr2btnAivPfUU80S3E0c
+VslBodCkSGVx3iQoAVJv2+6ZNMRNLVzpLnlaVtHl/gvw+InJlXmzBlZQFKOCaOny
+sz67qKmK1KWui2G3AzuvTEL9O++FVO+irpSNSLozxif/erLJl7R60pBkrWwd6jGB
+8qQv7ni+xIeXDBLSu26zPunLR/2PhrrCv49KmqNmF7sSNx6xmcc3CfgEy+5+Tm97
+KPE4JlaH/ZW61TlzXojbZMaiJltkFkpagFgm2bXrN1nMk2d6R+Yfe78lSvPKoB8k
+1m7LY1lNXFZJh2hxQRhdV9oTokFahUSitQCg1S3eASuE2jFRRL4jrh4LcBWUHZnJ
+OOAwBDOF4RfGyfiDs0IlrnLvK3a2KorlHfvUyj+cwkRmgI8sWgkJuNpz1mKDn5UZ
+yGn2JczHY0CiInRGgwMnS1Z/WpJZYGNh7pP7Hm1RnzVslkWSJGaKJv9jDNUCyy8R
+L+nwUSd6m6r8YWcs3zdBYsDHGOO5MgAU5Q8yuLbEgaK5NJSJgGkm+ya5oB88Y6T0
+JcL/u5xKw4kJiKgiLr3zrWe5qV6+lpH7fGKy7fucJWltDkfQSD3Dp0b64TW4FuQq
+VQhDR+KykLK6QxM2x3/maMfG578Ku1F6g4RboDR/6uCFu6hQuCoNYBk/QB0XpY13
+-----END RSA PRIVATE KEY-----
+-----BEGIN CERTIFICATE-----
+MIID6TCCAtGgAwIBAgIDAIFoMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNVBAYTAkNO
+MQswCQYDVQQIDAJHRDELMAkGA1UEBwwCR1oxDDAKBgNVBAoMA1NTVDEPMA0GA1UE
+CwwGSmVzc01BMRcwFQYDVQQDDA53d3cuamVzc21hLm9yZzEeMBwGCSqGSIb3DQEJ
+ARYPbGRjc2FhQDIxY24uY29tMB4XDTE2MDEwMTAwMDAwMFoXDTI2MDEwMTAwMDAw
+MFowcjELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQwwCgYDVQQKDANTU1QxDzAN
+BgNVBAsMBkplc3NNQTEXMBUGA1UEAwwOd3d3Lmplc3NtYS5vcmcxHjAcBgkqhkiG
+9w0BCQEWD2xkY3NhYUAyMWNuLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBALEOPuYKEl/iN3ub/QNaaqo0Hynk62znTp5kXj0zQAqxLxwHU117xHBk
+0LCZux0LnDFl9JAlilvqfeaXRWmQd6hrvV+1mNpnIe2xfyNWwa37QDNjXB7mEg3V
+O/dN9KeVxq9RlH/dQJ7qZlYy4i7wznYMUlz38378wYoOvdAQBX1UrdjWA5T4q0Da
+cRRAV0fIp45hBarp6T1nhDEvttU8yud2lIEV9jWblkyGIhU4FisGOIRRGhnKzCAh
+CYSZ59mq8Wf4FawMyz/H4noHcWWJu4ID1oAE+VFGXKm78qjp/T71/myn5lcGquTx
+oSoJrx7og+529eaJwgeJd2JF7OQ5NysCAwEAAaN7MHkwCQYDVR0TBAIwADAsBglg
+hkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0O
+BBYEFO0CmyFtrGLrkNkkA62QPzSp8vgJMB8GA1UdIwQYMBaAFPx+7pAUh/GVC8xa
+OXmmZ8GMvpyIMA0GCSqGSIb3DQEBCwUAA4IBAQBT1JGXn7HMyNHZntM4kCp7kwN9
+HSpcbQxbWFtk+l8ANP9SqCIEd4xc4rAaUDDDMdD2S0wF9iio1MA1KC5OoJ5Dqw6C
+yTa08LRowlmnw+NNZC2xzaSRmzLGlPDHNauZ/G2ScdWsqR5v2+pKF7bYxAajRkk5
+oqRRDI6X7vHsvX/kqTn9Prk0sFmU0EU64az2iUe/MG9v1WY8eOV+tTEq29GuYYjJ
+E3H8vaeq1fTB0vYgT5xoCc36xVXju/3l17CE12n5of004u4eRi3/T0wbp9WgG2ns
+wjetaYeIAWS/AJQzIK22tztGAbAk6kTgsO5YLx2h6GLGpytDXWvgzr2PdEu1
+-----END CERTIFICATE-----
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/TestEcho-SSL-PullClient.e" "b/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/TestEcho-SSL-PullClient.e"
new file mode 100644
index 000000000..ffd56c035
Binary files /dev/null and "b/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/TestEcho-SSL-PullClient.e" differ
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/TestEcho-SSL-PullServer.e" "b/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/TestEcho-SSL-PullServer.e"
new file mode 100644
index 000000000..13840fdf9
Binary files /dev/null and "b/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/TestEcho-SSL-PullServer.e" differ
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/ssl-cert/ca.crt" "b/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/ssl-cert/ca.crt"
new file mode 100644
index 000000000..c31217076
--- /dev/null
+++ "b/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/ssl-cert/ca.crt"
@@ -0,0 +1,23 @@
+-----BEGIN CERTIFICATE-----
+MIID0TCCArmgAwIBAgIJALFGobpzN5MdMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNV
+BAYTAkNOMQswCQYDVQQIDAJHRDELMAkGA1UEBwwCR1oxDDAKBgNVBAoMA1NTVDEP
+MA0GA1UECwwGSmVzc01BMRcwFQYDVQQDDA53d3cuamVzc21hLm9yZzEeMBwGCSqG
+SIb3DQEJARYPbGRjc2FhQDIxY24uY29tMB4XDTE2MDQwMTE1MDIwMFoXDTI0MDYx
+ODE1MDIwMFowfzELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQswCQYDVQQHDAJH
+WjEMMAoGA1UECgwDU1NUMQ8wDQYDVQQLDAZKZXNzTUExFzAVBgNVBAMMDnd3dy5q
+ZXNzbWEub3JnMR4wHAYJKoZIhvcNAQkBFg9sZGNzYWFAMjFjbi5jb20wggEiMA0G
+CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDht6llexLtFkV8ijjdJGaHXXQysWOJ
+UM/YQFYP52nviurJSpMbWSXnuaDlfidk76B66Np5mlnN5BiHqbBj34GCVKz5VQtx
+3kMY1y30YWyiHAEZiV3PLQc8/A9MnJM/q/mHaulmTuJi8A85TWadqUNXgiaIMkqz
+bKaauR1/GCxXuEVroqtyR99RCWhfakTz04KfIbt83QR0imWC6uhmvD/DXJ03XFzd
+XkK5aNp+ef1sBQgFKjeXV6EMuq+UgEDPXlCDUJAqsZt6W/ohrCAHWQYZ/RSvvaMJ
+O7aWROGAC/lh6ATOIbFlGVppw6zUGdIDkB5FVF1MC7CyDndncFrY+OJzAgMBAAGj
+UDBOMB0GA1UdDgQWBBT8fu6QFIfxlQvMWjl5pmfBjL6ciDAfBgNVHSMEGDAWgBT8
+fu6QFIfxlQvMWjl5pmfBjL6ciDAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUA
+A4IBAQDI+f6GMBJxRJNKrgbUYLD1U6LWEQJQ50g2NxGy0j+TL6oypoo/kyME3tOR
+EmXEDzytGcSaQ78xYcg97UQd8OhXYQr0qwZ/JLarmhCVK/bfbGTIn4Mk4ZgDqcOU
+46jsJeEZwUSrrq7svKO5d7+wV0VGPO+Ww4yzRCPwm2puXFY1+KpTxYX31+wwMB8p
+7GuJEDgV08qzLfcBAfSFFYiOHL3tJ+XNKFNRqigjeYrWuAMphOhpYfYnU0d0upe8
+wWx9Unm8qSkc7hiS/vvs1v7Pv1sqMFRBoaKOTqZ7Wz/5AySGPQjeMV/atmArDEkx
+z58OEgTzg1J/Keztxwj7I2KnYHyH
+-----END CERTIFICATE-----
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/ssl-cert/ca.key" "b/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/ssl-cert/ca.key"
new file mode 100644
index 000000000..e0a85b46b
--- /dev/null
+++ "b/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/ssl-cert/ca.key"
@@ -0,0 +1,30 @@
+-----BEGIN RSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: AES-256-CBC,ABBC3A36C737CF487C5C36CA5ACA4A5D
+
+zv/FdREV9tlLsPPzIrm5EIbGaTiReEz+9jlgplyVLkAZe7MNF868t5g93Ve46ehy
+XzBf2QtBE12xAgKmjTvK7RnO1Rih5LqY7VTrEhIFSkYdDTqTV8I8cWig7Hmg+qNw
+EymXdrCYjBQB1U3jmOxBqQrDw75KYJFq5vN+vAmnreA9m9NdOAWOQ+n5K0sJLQpk
+6F9a4pzym7v4mMmP67Ddf/qHVcbWPLOo3QkBUItGJYPpBL1ODu+rd/3f9EyJspVw
+3dQNAaT0OzA0RZ9Pew7+ZxzgFFDHA4sh6r4fcfpEfXTr1QQUg0F4B66+OTE1duoE
+T+PIwYWp4yyuYgUA7txpDsGaENbvfnsP81oLMIvU0TicKJoYxr2Zxa+lK2MWCa5D
+L9VbRMQM0bXTF1qCgjnPmFhxhdYgidxPEZPahyMmFU3LB9W5ils/DK+AXW1gC4ZY
+O8hpUGaZ7Lj5H6suMSYIX7CAEi0NXXdRMXw7bOBecRFy+fhgHmMF1fGgBG2Fd1lP
+wgHlydLQDZoUpTnZrifDzlH8oDqEbCCOSUYc82fVKeNNORePHLGuV8utz0UTR9Rq
+Ko9ZYEN7j+JsPBdG3CnrjDILrZA3peKPhEifrRL2mjHdMdwFsE/fetyvUssgh9VY
+o2Bi25khVu+2TwBMEO1nlS6U+TWOU8u4qxGtSj5xN1Fdplb098VXY1T08+NvDJUN
+7S52KPAyeXY6V2/Q7IyDpsnmM9SWiLrvf2C/niEHRLfWoNP5bt6r/e8RIjFPc0KV
+E8KvANWXSArM359F4+ucvMzrYEtkgnldf6UIN007qqr2eEREeVwxVWIpJZJauVDV
+1uOvTQCDU7O4cIV/FiK1+oVt9MQYAHnnG3revFzqcZtH2x3qWNEGwiyfDZh7qx7c
+8LFYiFLIQX2HGYcEpcKAbj65sJLecz7VtNQ2GMoXHh09BQ5VnleVInmAfAv6r01k
+OdTJ3CNf8YcW/PAKTGrgmsncGp8EvHbmDC4r1ecxxp3Mu7M7T9XfQ41nk1nCLmOp
++3B9ecnJx6bSkg6wrrofl2MifCyl6AvxyKUeAt+dNV319QL/imgV3VQiD+Gu5i+c
+1tveD4cKNm01izEZz6xPBZ9sH4G8TFYFOx572q2DdSZe2MXy/h6QfKUADPOkvPyr
+0dqNbPQKJDL7YJOG39k0L/GOe6uH+JxXlvYLtqSLznLTQkm9kkWVOB54gV+v2NBp
+831BnDdlwv9AnScDY7o4fG1qAaWIZyMWntmORfpHkOMRbrBqK5TeczpoV2jr1iGl
+h1oIbbANJzaXEydnWcnUPujopP7oYG2KGhDbzhhR/PGlvLknIoAA55BqL23dzHct
+1/xaaHqxcjGNymgSPPD9Kjx0qQZovOb5WKDyg5+D5GIfRqq+c1SQeZw+5jcoMBIF
+TSdfiwAxhLkT8SQf72C6tAYsxkTubbcU1gc0Vkdd5Q2FWc6YgCb6XVPYC5jHATwV
+V4v5JVqGLRFi056heSpA0EFWp/AuSoaYaQRwGfBnUysaocDlEE4kTNzzJIwgbWrt
+iTL5qB7LIexqUVWVjmUmx6S0+f6qVYovDjFHVg61Xb6zdL04LmU0VrMCwgUBEt2j
+-----END RSA PRIVATE KEY-----
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/ssl-cert/ca.pem" "b/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/ssl-cert/ca.pem"
new file mode 100644
index 000000000..57f3b363b
--- /dev/null
+++ "b/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/ssl-cert/ca.pem"
@@ -0,0 +1,53 @@
+-----BEGIN RSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: AES-256-CBC,ABBC3A36C737CF487C5C36CA5ACA4A5D
+
+zv/FdREV9tlLsPPzIrm5EIbGaTiReEz+9jlgplyVLkAZe7MNF868t5g93Ve46ehy
+XzBf2QtBE12xAgKmjTvK7RnO1Rih5LqY7VTrEhIFSkYdDTqTV8I8cWig7Hmg+qNw
+EymXdrCYjBQB1U3jmOxBqQrDw75KYJFq5vN+vAmnreA9m9NdOAWOQ+n5K0sJLQpk
+6F9a4pzym7v4mMmP67Ddf/qHVcbWPLOo3QkBUItGJYPpBL1ODu+rd/3f9EyJspVw
+3dQNAaT0OzA0RZ9Pew7+ZxzgFFDHA4sh6r4fcfpEfXTr1QQUg0F4B66+OTE1duoE
+T+PIwYWp4yyuYgUA7txpDsGaENbvfnsP81oLMIvU0TicKJoYxr2Zxa+lK2MWCa5D
+L9VbRMQM0bXTF1qCgjnPmFhxhdYgidxPEZPahyMmFU3LB9W5ils/DK+AXW1gC4ZY
+O8hpUGaZ7Lj5H6suMSYIX7CAEi0NXXdRMXw7bOBecRFy+fhgHmMF1fGgBG2Fd1lP
+wgHlydLQDZoUpTnZrifDzlH8oDqEbCCOSUYc82fVKeNNORePHLGuV8utz0UTR9Rq
+Ko9ZYEN7j+JsPBdG3CnrjDILrZA3peKPhEifrRL2mjHdMdwFsE/fetyvUssgh9VY
+o2Bi25khVu+2TwBMEO1nlS6U+TWOU8u4qxGtSj5xN1Fdplb098VXY1T08+NvDJUN
+7S52KPAyeXY6V2/Q7IyDpsnmM9SWiLrvf2C/niEHRLfWoNP5bt6r/e8RIjFPc0KV
+E8KvANWXSArM359F4+ucvMzrYEtkgnldf6UIN007qqr2eEREeVwxVWIpJZJauVDV
+1uOvTQCDU7O4cIV/FiK1+oVt9MQYAHnnG3revFzqcZtH2x3qWNEGwiyfDZh7qx7c
+8LFYiFLIQX2HGYcEpcKAbj65sJLecz7VtNQ2GMoXHh09BQ5VnleVInmAfAv6r01k
+OdTJ3CNf8YcW/PAKTGrgmsncGp8EvHbmDC4r1ecxxp3Mu7M7T9XfQ41nk1nCLmOp
++3B9ecnJx6bSkg6wrrofl2MifCyl6AvxyKUeAt+dNV319QL/imgV3VQiD+Gu5i+c
+1tveD4cKNm01izEZz6xPBZ9sH4G8TFYFOx572q2DdSZe2MXy/h6QfKUADPOkvPyr
+0dqNbPQKJDL7YJOG39k0L/GOe6uH+JxXlvYLtqSLznLTQkm9kkWVOB54gV+v2NBp
+831BnDdlwv9AnScDY7o4fG1qAaWIZyMWntmORfpHkOMRbrBqK5TeczpoV2jr1iGl
+h1oIbbANJzaXEydnWcnUPujopP7oYG2KGhDbzhhR/PGlvLknIoAA55BqL23dzHct
+1/xaaHqxcjGNymgSPPD9Kjx0qQZovOb5WKDyg5+D5GIfRqq+c1SQeZw+5jcoMBIF
+TSdfiwAxhLkT8SQf72C6tAYsxkTubbcU1gc0Vkdd5Q2FWc6YgCb6XVPYC5jHATwV
+V4v5JVqGLRFi056heSpA0EFWp/AuSoaYaQRwGfBnUysaocDlEE4kTNzzJIwgbWrt
+iTL5qB7LIexqUVWVjmUmx6S0+f6qVYovDjFHVg61Xb6zdL04LmU0VrMCwgUBEt2j
+-----END RSA PRIVATE KEY-----
+-----BEGIN CERTIFICATE-----
+MIID0TCCArmgAwIBAgIJALFGobpzN5MdMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNV
+BAYTAkNOMQswCQYDVQQIDAJHRDELMAkGA1UEBwwCR1oxDDAKBgNVBAoMA1NTVDEP
+MA0GA1UECwwGSmVzc01BMRcwFQYDVQQDDA53d3cuamVzc21hLm9yZzEeMBwGCSqG
+SIb3DQEJARYPbGRjc2FhQDIxY24uY29tMB4XDTE2MDQwMTE1MDIwMFoXDTI0MDYx
+ODE1MDIwMFowfzELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQswCQYDVQQHDAJH
+WjEMMAoGA1UECgwDU1NUMQ8wDQYDVQQLDAZKZXNzTUExFzAVBgNVBAMMDnd3dy5q
+ZXNzbWEub3JnMR4wHAYJKoZIhvcNAQkBFg9sZGNzYWFAMjFjbi5jb20wggEiMA0G
+CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDht6llexLtFkV8ijjdJGaHXXQysWOJ
+UM/YQFYP52nviurJSpMbWSXnuaDlfidk76B66Np5mlnN5BiHqbBj34GCVKz5VQtx
+3kMY1y30YWyiHAEZiV3PLQc8/A9MnJM/q/mHaulmTuJi8A85TWadqUNXgiaIMkqz
+bKaauR1/GCxXuEVroqtyR99RCWhfakTz04KfIbt83QR0imWC6uhmvD/DXJ03XFzd
+XkK5aNp+ef1sBQgFKjeXV6EMuq+UgEDPXlCDUJAqsZt6W/ohrCAHWQYZ/RSvvaMJ
+O7aWROGAC/lh6ATOIbFlGVppw6zUGdIDkB5FVF1MC7CyDndncFrY+OJzAgMBAAGj
+UDBOMB0GA1UdDgQWBBT8fu6QFIfxlQvMWjl5pmfBjL6ciDAfBgNVHSMEGDAWgBT8
+fu6QFIfxlQvMWjl5pmfBjL6ciDAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUA
+A4IBAQDI+f6GMBJxRJNKrgbUYLD1U6LWEQJQ50g2NxGy0j+TL6oypoo/kyME3tOR
+EmXEDzytGcSaQ78xYcg97UQd8OhXYQr0qwZ/JLarmhCVK/bfbGTIn4Mk4ZgDqcOU
+46jsJeEZwUSrrq7svKO5d7+wV0VGPO+Ww4yzRCPwm2puXFY1+KpTxYX31+wwMB8p
+7GuJEDgV08qzLfcBAfSFFYiOHL3tJ+XNKFNRqigjeYrWuAMphOhpYfYnU0d0upe8
+wWx9Unm8qSkc7hiS/vvs1v7Pv1sqMFRBoaKOTqZ7Wz/5AySGPQjeMV/atmArDEkx
+z58OEgTzg1J/Keztxwj7I2KnYHyH
+-----END CERTIFICATE-----
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/ssl-cert/client.cer" "b/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/ssl-cert/client.cer"
new file mode 100644
index 000000000..33a266a82
--- /dev/null
+++ "b/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/ssl-cert/client.cer"
@@ -0,0 +1,23 @@
+-----BEGIN CERTIFICATE-----
+MIID6TCCAtGgAwIBAgIDAIFpMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNVBAYTAkNO
+MQswCQYDVQQIDAJHRDELMAkGA1UEBwwCR1oxDDAKBgNVBAoMA1NTVDEPMA0GA1UE
+CwwGSmVzc01BMRcwFQYDVQQDDA53d3cuamVzc21hLm9yZzEeMBwGCSqGSIb3DQEJ
+ARYPbGRjc2FhQDIxY24uY29tMB4XDTE2MDEwMTAwMDAwMFoXDTI2MDEwMTAwMDAw
+MFowcjELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQwwCgYDVQQKDANTU1QxDzAN
+BgNVBAsMBkplc3NNQTEXMBUGA1UEAwwOd3d3Lmplc3NtYS5vcmcxHjAcBgkqhkiG
+9w0BCQEWD2xkY3NhYUAyMWNuLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBAOFlDuWj95Nov+48W0ZaUp69GVB+U3orPuVm+fU5gXgl0tJbNbXS0GOM
+MspmMB0WxciTfj+t/WufpcHKzryHwrbqmMgrZiSyrp4ulA2mQuTPR32vgQ3/2eBs
+O884GmKOUbiaORgHGBoRAdOnoWarM7B/igS6WGqPetaUz12QAv2vzw9Qn0xxIBpr
+SVJumTo9HtOvuRj0BNXMRRYp+lfX2+96cftidyU1q+2Y2v3Fedzlo8Lr7m1ZkPcp
+ugQDz3R0kXvigDPAKhbTj6eAXJ/hcPOCGQ5RTIZJH4JnJ2jKw5lTjJ6y0rbt9Jq9
+NuIqz3GORHYWY4xBmbdTZy0BrbQOePECAwEAAaN7MHkwCQYDVR0TBAIwADAsBglg
+hkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0O
+BBYEFHYUdE6SbzXIWA8m3TwdgUJfAT6+MB8GA1UdIwQYMBaAFPx+7pAUh/GVC8xa
+OXmmZ8GMvpyIMA0GCSqGSIb3DQEBCwUAA4IBAQCZWaDrHbRHNNEaCVVFl5WCNqyd
+y1MpI2iErmfiCTNiG4v9wImTGWIWRHc3dZowniwSb43OuuhlpdWCxeal9nTL6iCP
+B486EMOsVWcfUZkPeK4cBgRXbHTmjxfmQEHHA6NTQdRc7LGq4tjhYs8zmxBVI2HO
+uIp0Qbj/Mb2j8r13IC91Z5Ontq0mQTIg0vvffZsqvcjs3Mmrxr2iX/EYpKNR2DP+
+9msWTZH734tZ2I7vORZOprpdAwELOyVLXkKIcP9qkRPAcFNk0Fl5peBQtBuP1ky5
+kUzWMQq2eoy73miPRnQ8ZjZ/3xTXhMKJ6bCn3tbWrjvc1TwpobfwyfsFH9sq
+-----END CERTIFICATE-----
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/ssl-cert/client.crt" "b/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/ssl-cert/client.crt"
new file mode 100644
index 000000000..a87d4f3f7
--- /dev/null
+++ "b/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/ssl-cert/client.crt"
@@ -0,0 +1,82 @@
+Certificate:
+ Data:
+ Version: 3 (0x2)
+ Serial Number: 33129 (0x8169)
+ Signature Algorithm: sha256WithRSAEncryption
+ Issuer: C=CN, ST=GD, L=GZ, O=SST, OU=JessMA, CN=www.jessma.org/emailAddress=ldcsaa@21cn.com
+ Validity
+ Not Before: Jan 1 00:00:00 2016 GMT
+ Not After : Jan 1 00:00:00 2026 GMT
+ Subject: C=CN, ST=GD, O=SST, OU=JessMA, CN=www.jessma.org/emailAddress=ldcsaa@21cn.com
+ Subject Public Key Info:
+ Public Key Algorithm: rsaEncryption
+ Public-Key: (2048 bit)
+ Modulus:
+ 00:e1:65:0e:e5:a3:f7:93:68:bf:ee:3c:5b:46:5a:
+ 52:9e:bd:19:50:7e:53:7a:2b:3e:e5:66:f9:f5:39:
+ 81:78:25:d2:d2:5b:35:b5:d2:d0:63:8c:32:ca:66:
+ 30:1d:16:c5:c8:93:7e:3f:ad:fd:6b:9f:a5:c1:ca:
+ ce:bc:87:c2:b6:ea:98:c8:2b:66:24:b2:ae:9e:2e:
+ 94:0d:a6:42:e4:cf:47:7d:af:81:0d:ff:d9:e0:6c:
+ 3b:cf:38:1a:62:8e:51:b8:9a:39:18:07:18:1a:11:
+ 01:d3:a7:a1:66:ab:33:b0:7f:8a:04:ba:58:6a:8f:
+ 7a:d6:94:cf:5d:90:02:fd:af:cf:0f:50:9f:4c:71:
+ 20:1a:6b:49:52:6e:99:3a:3d:1e:d3:af:b9:18:f4:
+ 04:d5:cc:45:16:29:fa:57:d7:db:ef:7a:71:fb:62:
+ 77:25:35:ab:ed:98:da:fd:c5:79:dc:e5:a3:c2:eb:
+ ee:6d:59:90:f7:29:ba:04:03:cf:74:74:91:7b:e2:
+ 80:33:c0:2a:16:d3:8f:a7:80:5c:9f:e1:70:f3:82:
+ 19:0e:51:4c:86:49:1f:82:67:27:68:ca:c3:99:53:
+ 8c:9e:b2:d2:b6:ed:f4:9a:bd:36:e2:2a:cf:71:8e:
+ 44:76:16:63:8c:41:99:b7:53:67:2d:01:ad:b4:0e:
+ 78:f1
+ Exponent: 65537 (0x10001)
+ X509v3 extensions:
+ X509v3 Basic Constraints:
+ CA:FALSE
+ Netscape Comment:
+ OpenSSL Generated Certificate
+ X509v3 Subject Key Identifier:
+ 76:14:74:4E:92:6F:35:C8:58:0F:26:DD:3C:1D:81:42:5F:01:3E:BE
+ X509v3 Authority Key Identifier:
+ keyid:FC:7E:EE:90:14:87:F1:95:0B:CC:5A:39:79:A6:67:C1:8C:BE:9C:88
+
+ Signature Algorithm: sha256WithRSAEncryption
+ 99:59:a0:eb:1d:b4:47:34:d1:1a:09:55:45:97:95:82:36:ac:
+ 9d:cb:53:29:23:68:84:ae:67:e2:09:33:62:1b:8b:fd:c0:89:
+ 93:19:62:16:44:77:37:75:9a:30:9e:2c:12:6f:8d:ce:ba:e8:
+ 65:a5:d5:82:c5:e6:a5:f6:74:cb:ea:20:8f:07:8f:3a:10:c3:
+ ac:55:67:1f:51:99:0f:78:ae:1c:06:04:57:6c:74:e6:8f:17:
+ e6:40:41:c7:03:a3:53:41:d4:5c:ec:b1:aa:e2:d8:e1:62:cf:
+ 33:9b:10:55:23:61:ce:b8:8a:74:41:b8:ff:31:bd:a3:f2:bd:
+ 77:20:2f:75:67:93:a7:b6:ad:26:41:32:20:d2:fb:df:7d:9b:
+ 2a:bd:c8:ec:dc:c9:ab:c6:bd:a2:5f:f1:18:a4:a3:51:d8:33:
+ fe:f6:6b:16:4d:91:fb:df:8b:59:d8:8e:ef:39:16:4e:a6:ba:
+ 5d:03:01:0b:3b:25:4b:5e:42:88:70:ff:6a:91:13:c0:70:53:
+ 64:d0:59:79:a5:e0:50:b4:1b:8f:d6:4c:b9:91:4c:d6:31:0a:
+ b6:7a:8c:bb:de:68:8f:46:74:3c:66:36:7f:df:14:d7:84:c2:
+ 89:e9:b0:a7:de:d6:d6:ae:3b:dc:d5:3c:29:a1:b7:f0:c9:fb:
+ 05:1f:db:2a
+-----BEGIN CERTIFICATE-----
+MIID6TCCAtGgAwIBAgIDAIFpMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNVBAYTAkNO
+MQswCQYDVQQIDAJHRDELMAkGA1UEBwwCR1oxDDAKBgNVBAoMA1NTVDEPMA0GA1UE
+CwwGSmVzc01BMRcwFQYDVQQDDA53d3cuamVzc21hLm9yZzEeMBwGCSqGSIb3DQEJ
+ARYPbGRjc2FhQDIxY24uY29tMB4XDTE2MDEwMTAwMDAwMFoXDTI2MDEwMTAwMDAw
+MFowcjELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQwwCgYDVQQKDANTU1QxDzAN
+BgNVBAsMBkplc3NNQTEXMBUGA1UEAwwOd3d3Lmplc3NtYS5vcmcxHjAcBgkqhkiG
+9w0BCQEWD2xkY3NhYUAyMWNuLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBAOFlDuWj95Nov+48W0ZaUp69GVB+U3orPuVm+fU5gXgl0tJbNbXS0GOM
+MspmMB0WxciTfj+t/WufpcHKzryHwrbqmMgrZiSyrp4ulA2mQuTPR32vgQ3/2eBs
+O884GmKOUbiaORgHGBoRAdOnoWarM7B/igS6WGqPetaUz12QAv2vzw9Qn0xxIBpr
+SVJumTo9HtOvuRj0BNXMRRYp+lfX2+96cftidyU1q+2Y2v3Fedzlo8Lr7m1ZkPcp
+ugQDz3R0kXvigDPAKhbTj6eAXJ/hcPOCGQ5RTIZJH4JnJ2jKw5lTjJ6y0rbt9Jq9
+NuIqz3GORHYWY4xBmbdTZy0BrbQOePECAwEAAaN7MHkwCQYDVR0TBAIwADAsBglg
+hkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0O
+BBYEFHYUdE6SbzXIWA8m3TwdgUJfAT6+MB8GA1UdIwQYMBaAFPx+7pAUh/GVC8xa
+OXmmZ8GMvpyIMA0GCSqGSIb3DQEBCwUAA4IBAQCZWaDrHbRHNNEaCVVFl5WCNqyd
+y1MpI2iErmfiCTNiG4v9wImTGWIWRHc3dZowniwSb43OuuhlpdWCxeal9nTL6iCP
+B486EMOsVWcfUZkPeK4cBgRXbHTmjxfmQEHHA6NTQdRc7LGq4tjhYs8zmxBVI2HO
+uIp0Qbj/Mb2j8r13IC91Z5Ontq0mQTIg0vvffZsqvcjs3Mmrxr2iX/EYpKNR2DP+
+9msWTZH734tZ2I7vORZOprpdAwELOyVLXkKIcP9qkRPAcFNk0Fl5peBQtBuP1ky5
+kUzWMQq2eoy73miPRnQ8ZjZ/3xTXhMKJ6bCn3tbWrjvc1TwpobfwyfsFH9sq
+-----END CERTIFICATE-----
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/ssl-cert/client.csr" "b/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/ssl-cert/client.csr"
new file mode 100644
index 000000000..d35803d5b
--- /dev/null
+++ "b/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/ssl-cert/client.csr"
@@ -0,0 +1,18 @@
+-----BEGIN CERTIFICATE REQUEST-----
+MIIC8TCCAdkCAQAwfzELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQswCQYDVQQH
+DAJHWjEMMAoGA1UECgwDU1NUMQ8wDQYDVQQLDAZKZXNzTUExFzAVBgNVBAMMDnd3
+dy5qZXNzbWEub3JnMR4wHAYJKoZIhvcNAQkBFg9sZGNzYWFAMjFjbi5jb20wggEi
+MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDhZQ7lo/eTaL/uPFtGWlKevRlQ
+flN6Kz7lZvn1OYF4JdLSWzW10tBjjDLKZjAdFsXIk34/rf1rn6XBys68h8K26pjI
+K2Yksq6eLpQNpkLkz0d9r4EN/9ngbDvPOBpijlG4mjkYBxgaEQHTp6FmqzOwf4oE
+ulhqj3rWlM9dkAL9r88PUJ9McSAaa0lSbpk6PR7Tr7kY9ATVzEUWKfpX19vvenH7
+YnclNavtmNr9xXnc5aPC6+5tWZD3KboEA890dJF74oAzwCoW04+ngFyf4XDzghkO
+UUyGSR+CZydoysOZU4yestK27fSavTbiKs9xjkR2FmOMQZm3U2ctAa20DnjxAgMB
+AAGgLTASBgkqhkiG9w0BCQIxBQwDU1NUMBcGCSqGSIb3DQEJBzEKDAhwcG1tQHNz
+dDANBgkqhkiG9w0BAQsFAAOCAQEAtHiWz0XuqZi/2aoinH472W/sqG7S7YizbcQC
+kCRgYqQw32U0ujI2ndTt2WYDgFUlI1KY5N4b5pl2pdDepFWXLcLyG3nyCjXlJng5
+8YLENg02+xsLOZUjZEsY5pxEkrKYBBjt537P+fA83jtxakC+9xvTEC94CxICWMvx
+OVw1mWjUE3a7Hby7ChkOX/PhJdNzHdsMU9fKCWEFFmyJgrNkFc1nB1omt0j+OkXA
+scwFqhji7yJuwxboaDLdnTNIGGBbDLcw44s7udWB4QayvHwuNgcZ8shxlm686Xi5
+K+SXJTi0DPFKcucU2LA+VCLnMtefghCxbrU7fcFyPsJuT+jdsg==
+-----END CERTIFICATE REQUEST-----
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/ssl-cert/client.key" "b/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/ssl-cert/client.key"
new file mode 100644
index 000000000..a9f3dd0ca
--- /dev/null
+++ "b/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/ssl-cert/client.key"
@@ -0,0 +1,30 @@
+-----BEGIN RSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: AES-256-CBC,5F6ACADA6B6B1238FD34A0EC0C5EC2ED
+
+F0JylDtptlBaFpbCP9Qa2pRf5z8sBbUta6G+rBwuWn7GxU//Nub49/Mf0uRm3YTN
+PmCbIQKRyn/u92Yk6cJ9vLCiWe89pa+qlv+kF9PWmYo8Lt6dvtSr1TNAjelGvQjC
+HAi58BHoXXIRrZJQKjzFKGcwhWExCAOct5UDuHu64IvWg+LDccd+tTU/kdKEI9QY
+3POohP6etBBsFIoJFd23yxxNrvxK/v0as7EI/SeFzv7Mfn7haL4LxEsN+9XPN/Ap
+U0IxOT84dMgtIsvW2gvit+qNuaSvrocyEOr5uEfpoS58/yyb0VyNg94itkc6IK3X
+Yeokm2YOJk/4yMoZAeNMMDdR82csCzpTTHurMIZLgtr+SO1ChtreKm0XQB8QNyJ+
+CouAAHOBsxTPgVY/QS1TDrmEZv7cHOAvJp7BYvKroD/pi5Wu2IHAlIEXhdW3Evwn
+jyzUgMUHdXJIcngkkopYEoTPVEXsYX6aHvPJI+jDDKIfDM75SOOw1z7Divsb77I8
+n1jMYDUH4i2g2BixfwFRPxZ6NnRLtqM+TD4yecu3zsqvs0UIlrZFuVIl98Guqa1H
+tJKCxWEaJNb5YZg8GgdZFXYWXUN/HtFqWJelhGcjy48RjOy7LHJ30fkXV07b2s6M
+XcXj9g4jRRyAiZ/kmTqs+Oj6hn+iI4vdGumc2sG0+ZkUwDkj3zfn1N1+J/htVM1z
+Y2kHpKGZzQZ4eriy6CM++FrZ9CSNIPqh5AzayPuMxvEtd27vBnO8nKMwThbhGPtj
+fd7uPPzfG/W7Zo55lYL5opEzvOdULWm8+31ojitN7GSjsFW46HWoyYfTOlTAzP5+
+yPlUGxUyBhlqeXnQNTiLtRb22I2FF41HYH7GsYcxonHw3rKCcJedzL5BMg6Ic2xN
+ZxwXdj20rkugtcSAPxp3OGrmBiCX0wYiZaSgNg5zqI1SIhiWzkq64xoiIFlmxGEo
+Q/Vv7mpRmf1X0eTjiTYz4tYU6TPgtAqLLpmVNbozPnb5eGaMDbRlJnGJjqlXzPAw
+7qUhsb/KZ/k7yZLE+rseicwtAYA0th9A2tpc0CY3/EiL0w5E3zR0SPMinCJeO0rJ
+91njgDPxJ5lPXC04Dlgt/a1WK6D/yQ2kpIiNBUIlGZtr+nD9GqPYiGTqND53TL5f
+PJrr1PibL2l3fyhNDgNhgmY1CGpB6hNkqPOpit+XhGq6X0PlELcj7zYN3acW47jp
+KVm2lT1AXhzqemTWqPQL1+3s8ix0nGVNlmzsOFHqCkmr7FZb76hD5YTtGkOU/Kn3
+I5GqS5GHSCAVJnJWuFk2Y8qqg69mJREcoKThoYsuo8hw9JqZM34JIqqT029Nj35B
+xau4hSXkmHuUCGpwbr0yvsz3ikRfM6y0cT3T6oBiWgfYktpX//89YbyYGcQX7tK0
+aaHW2zvAfMyCWT0CxRen5GAyVeb+WFBdo+xD0HpQcRFtByiNNXmm4kJAoZujeHpe
+ZWcu3xkVcTqWMixAYHcDv3L0EXUnVeWplovRh1+OSm7YvdaLL3cctHoW3a8Kzdc1
+rtoGVI+f4xSEDheB5P4NX6UYbDLIGMPPuR0F5EliL+vmyJcEMuLY8KTPJ0uwf7Ns
+-----END RSA PRIVATE KEY-----
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/ssl-cert/client.pem" "b/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/ssl-cert/client.pem"
new file mode 100644
index 000000000..600dc8514
--- /dev/null
+++ "b/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/ssl-cert/client.pem"
@@ -0,0 +1,53 @@
+-----BEGIN RSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: AES-256-CBC,5F6ACADA6B6B1238FD34A0EC0C5EC2ED
+
+F0JylDtptlBaFpbCP9Qa2pRf5z8sBbUta6G+rBwuWn7GxU//Nub49/Mf0uRm3YTN
+PmCbIQKRyn/u92Yk6cJ9vLCiWe89pa+qlv+kF9PWmYo8Lt6dvtSr1TNAjelGvQjC
+HAi58BHoXXIRrZJQKjzFKGcwhWExCAOct5UDuHu64IvWg+LDccd+tTU/kdKEI9QY
+3POohP6etBBsFIoJFd23yxxNrvxK/v0as7EI/SeFzv7Mfn7haL4LxEsN+9XPN/Ap
+U0IxOT84dMgtIsvW2gvit+qNuaSvrocyEOr5uEfpoS58/yyb0VyNg94itkc6IK3X
+Yeokm2YOJk/4yMoZAeNMMDdR82csCzpTTHurMIZLgtr+SO1ChtreKm0XQB8QNyJ+
+CouAAHOBsxTPgVY/QS1TDrmEZv7cHOAvJp7BYvKroD/pi5Wu2IHAlIEXhdW3Evwn
+jyzUgMUHdXJIcngkkopYEoTPVEXsYX6aHvPJI+jDDKIfDM75SOOw1z7Divsb77I8
+n1jMYDUH4i2g2BixfwFRPxZ6NnRLtqM+TD4yecu3zsqvs0UIlrZFuVIl98Guqa1H
+tJKCxWEaJNb5YZg8GgdZFXYWXUN/HtFqWJelhGcjy48RjOy7LHJ30fkXV07b2s6M
+XcXj9g4jRRyAiZ/kmTqs+Oj6hn+iI4vdGumc2sG0+ZkUwDkj3zfn1N1+J/htVM1z
+Y2kHpKGZzQZ4eriy6CM++FrZ9CSNIPqh5AzayPuMxvEtd27vBnO8nKMwThbhGPtj
+fd7uPPzfG/W7Zo55lYL5opEzvOdULWm8+31ojitN7GSjsFW46HWoyYfTOlTAzP5+
+yPlUGxUyBhlqeXnQNTiLtRb22I2FF41HYH7GsYcxonHw3rKCcJedzL5BMg6Ic2xN
+ZxwXdj20rkugtcSAPxp3OGrmBiCX0wYiZaSgNg5zqI1SIhiWzkq64xoiIFlmxGEo
+Q/Vv7mpRmf1X0eTjiTYz4tYU6TPgtAqLLpmVNbozPnb5eGaMDbRlJnGJjqlXzPAw
+7qUhsb/KZ/k7yZLE+rseicwtAYA0th9A2tpc0CY3/EiL0w5E3zR0SPMinCJeO0rJ
+91njgDPxJ5lPXC04Dlgt/a1WK6D/yQ2kpIiNBUIlGZtr+nD9GqPYiGTqND53TL5f
+PJrr1PibL2l3fyhNDgNhgmY1CGpB6hNkqPOpit+XhGq6X0PlELcj7zYN3acW47jp
+KVm2lT1AXhzqemTWqPQL1+3s8ix0nGVNlmzsOFHqCkmr7FZb76hD5YTtGkOU/Kn3
+I5GqS5GHSCAVJnJWuFk2Y8qqg69mJREcoKThoYsuo8hw9JqZM34JIqqT029Nj35B
+xau4hSXkmHuUCGpwbr0yvsz3ikRfM6y0cT3T6oBiWgfYktpX//89YbyYGcQX7tK0
+aaHW2zvAfMyCWT0CxRen5GAyVeb+WFBdo+xD0HpQcRFtByiNNXmm4kJAoZujeHpe
+ZWcu3xkVcTqWMixAYHcDv3L0EXUnVeWplovRh1+OSm7YvdaLL3cctHoW3a8Kzdc1
+rtoGVI+f4xSEDheB5P4NX6UYbDLIGMPPuR0F5EliL+vmyJcEMuLY8KTPJ0uwf7Ns
+-----END RSA PRIVATE KEY-----
+-----BEGIN CERTIFICATE-----
+MIID6TCCAtGgAwIBAgIDAIFpMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNVBAYTAkNO
+MQswCQYDVQQIDAJHRDELMAkGA1UEBwwCR1oxDDAKBgNVBAoMA1NTVDEPMA0GA1UE
+CwwGSmVzc01BMRcwFQYDVQQDDA53d3cuamVzc21hLm9yZzEeMBwGCSqGSIb3DQEJ
+ARYPbGRjc2FhQDIxY24uY29tMB4XDTE2MDEwMTAwMDAwMFoXDTI2MDEwMTAwMDAw
+MFowcjELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQwwCgYDVQQKDANTU1QxDzAN
+BgNVBAsMBkplc3NNQTEXMBUGA1UEAwwOd3d3Lmplc3NtYS5vcmcxHjAcBgkqhkiG
+9w0BCQEWD2xkY3NhYUAyMWNuLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBAOFlDuWj95Nov+48W0ZaUp69GVB+U3orPuVm+fU5gXgl0tJbNbXS0GOM
+MspmMB0WxciTfj+t/WufpcHKzryHwrbqmMgrZiSyrp4ulA2mQuTPR32vgQ3/2eBs
+O884GmKOUbiaORgHGBoRAdOnoWarM7B/igS6WGqPetaUz12QAv2vzw9Qn0xxIBpr
+SVJumTo9HtOvuRj0BNXMRRYp+lfX2+96cftidyU1q+2Y2v3Fedzlo8Lr7m1ZkPcp
+ugQDz3R0kXvigDPAKhbTj6eAXJ/hcPOCGQ5RTIZJH4JnJ2jKw5lTjJ6y0rbt9Jq9
+NuIqz3GORHYWY4xBmbdTZy0BrbQOePECAwEAAaN7MHkwCQYDVR0TBAIwADAsBglg
+hkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0O
+BBYEFHYUdE6SbzXIWA8m3TwdgUJfAT6+MB8GA1UdIwQYMBaAFPx+7pAUh/GVC8xa
+OXmmZ8GMvpyIMA0GCSqGSIb3DQEBCwUAA4IBAQCZWaDrHbRHNNEaCVVFl5WCNqyd
+y1MpI2iErmfiCTNiG4v9wImTGWIWRHc3dZowniwSb43OuuhlpdWCxeal9nTL6iCP
+B486EMOsVWcfUZkPeK4cBgRXbHTmjxfmQEHHA6NTQdRc7LGq4tjhYs8zmxBVI2HO
+uIp0Qbj/Mb2j8r13IC91Z5Ontq0mQTIg0vvffZsqvcjs3Mmrxr2iX/EYpKNR2DP+
+9msWTZH734tZ2I7vORZOprpdAwELOyVLXkKIcP9qkRPAcFNk0Fl5peBQtBuP1ky5
+kUzWMQq2eoy73miPRnQ8ZjZ/3xTXhMKJ6bCn3tbWrjvc1TwpobfwyfsFH9sq
+-----END CERTIFICATE-----
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/ssl-cert/server.cer" "b/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/ssl-cert/server.cer"
new file mode 100644
index 000000000..0f8fe3b83
--- /dev/null
+++ "b/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/ssl-cert/server.cer"
@@ -0,0 +1,23 @@
+-----BEGIN CERTIFICATE-----
+MIID6TCCAtGgAwIBAgIDAIFoMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNVBAYTAkNO
+MQswCQYDVQQIDAJHRDELMAkGA1UEBwwCR1oxDDAKBgNVBAoMA1NTVDEPMA0GA1UE
+CwwGSmVzc01BMRcwFQYDVQQDDA53d3cuamVzc21hLm9yZzEeMBwGCSqGSIb3DQEJ
+ARYPbGRjc2FhQDIxY24uY29tMB4XDTE2MDEwMTAwMDAwMFoXDTI2MDEwMTAwMDAw
+MFowcjELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQwwCgYDVQQKDANTU1QxDzAN
+BgNVBAsMBkplc3NNQTEXMBUGA1UEAwwOd3d3Lmplc3NtYS5vcmcxHjAcBgkqhkiG
+9w0BCQEWD2xkY3NhYUAyMWNuLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBALEOPuYKEl/iN3ub/QNaaqo0Hynk62znTp5kXj0zQAqxLxwHU117xHBk
+0LCZux0LnDFl9JAlilvqfeaXRWmQd6hrvV+1mNpnIe2xfyNWwa37QDNjXB7mEg3V
+O/dN9KeVxq9RlH/dQJ7qZlYy4i7wznYMUlz38378wYoOvdAQBX1UrdjWA5T4q0Da
+cRRAV0fIp45hBarp6T1nhDEvttU8yud2lIEV9jWblkyGIhU4FisGOIRRGhnKzCAh
+CYSZ59mq8Wf4FawMyz/H4noHcWWJu4ID1oAE+VFGXKm78qjp/T71/myn5lcGquTx
+oSoJrx7og+529eaJwgeJd2JF7OQ5NysCAwEAAaN7MHkwCQYDVR0TBAIwADAsBglg
+hkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0O
+BBYEFO0CmyFtrGLrkNkkA62QPzSp8vgJMB8GA1UdIwQYMBaAFPx+7pAUh/GVC8xa
+OXmmZ8GMvpyIMA0GCSqGSIb3DQEBCwUAA4IBAQBT1JGXn7HMyNHZntM4kCp7kwN9
+HSpcbQxbWFtk+l8ANP9SqCIEd4xc4rAaUDDDMdD2S0wF9iio1MA1KC5OoJ5Dqw6C
+yTa08LRowlmnw+NNZC2xzaSRmzLGlPDHNauZ/G2ScdWsqR5v2+pKF7bYxAajRkk5
+oqRRDI6X7vHsvX/kqTn9Prk0sFmU0EU64az2iUe/MG9v1WY8eOV+tTEq29GuYYjJ
+E3H8vaeq1fTB0vYgT5xoCc36xVXju/3l17CE12n5of004u4eRi3/T0wbp9WgG2ns
+wjetaYeIAWS/AJQzIK22tztGAbAk6kTgsO5YLx2h6GLGpytDXWvgzr2PdEu1
+-----END CERTIFICATE-----
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/ssl-cert/server.crt" "b/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/ssl-cert/server.crt"
new file mode 100644
index 000000000..a6213ed40
--- /dev/null
+++ "b/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/ssl-cert/server.crt"
@@ -0,0 +1,82 @@
+Certificate:
+ Data:
+ Version: 3 (0x2)
+ Serial Number: 33128 (0x8168)
+ Signature Algorithm: sha256WithRSAEncryption
+ Issuer: C=CN, ST=GD, L=GZ, O=SST, OU=JessMA, CN=www.jessma.org/emailAddress=ldcsaa@21cn.com
+ Validity
+ Not Before: Jan 1 00:00:00 2016 GMT
+ Not After : Jan 1 00:00:00 2026 GMT
+ Subject: C=CN, ST=GD, O=SST, OU=JessMA, CN=www.jessma.org/emailAddress=ldcsaa@21cn.com
+ Subject Public Key Info:
+ Public Key Algorithm: rsaEncryption
+ Public-Key: (2048 bit)
+ Modulus:
+ 00:b1:0e:3e:e6:0a:12:5f:e2:37:7b:9b:fd:03:5a:
+ 6a:aa:34:1f:29:e4:eb:6c:e7:4e:9e:64:5e:3d:33:
+ 40:0a:b1:2f:1c:07:53:5d:7b:c4:70:64:d0:b0:99:
+ bb:1d:0b:9c:31:65:f4:90:25:8a:5b:ea:7d:e6:97:
+ 45:69:90:77:a8:6b:bd:5f:b5:98:da:67:21:ed:b1:
+ 7f:23:56:c1:ad:fb:40:33:63:5c:1e:e6:12:0d:d5:
+ 3b:f7:4d:f4:a7:95:c6:af:51:94:7f:dd:40:9e:ea:
+ 66:56:32:e2:2e:f0:ce:76:0c:52:5c:f7:f3:7e:fc:
+ c1:8a:0e:bd:d0:10:05:7d:54:ad:d8:d6:03:94:f8:
+ ab:40:da:71:14:40:57:47:c8:a7:8e:61:05:aa:e9:
+ e9:3d:67:84:31:2f:b6:d5:3c:ca:e7:76:94:81:15:
+ f6:35:9b:96:4c:86:22:15:38:16:2b:06:38:84:51:
+ 1a:19:ca:cc:20:21:09:84:99:e7:d9:aa:f1:67:f8:
+ 15:ac:0c:cb:3f:c7:e2:7a:07:71:65:89:bb:82:03:
+ d6:80:04:f9:51:46:5c:a9:bb:f2:a8:e9:fd:3e:f5:
+ fe:6c:a7:e6:57:06:aa:e4:f1:a1:2a:09:af:1e:e8:
+ 83:ee:76:f5:e6:89:c2:07:89:77:62:45:ec:e4:39:
+ 37:2b
+ Exponent: 65537 (0x10001)
+ X509v3 extensions:
+ X509v3 Basic Constraints:
+ CA:FALSE
+ Netscape Comment:
+ OpenSSL Generated Certificate
+ X509v3 Subject Key Identifier:
+ ED:02:9B:21:6D:AC:62:EB:90:D9:24:03:AD:90:3F:34:A9:F2:F8:09
+ X509v3 Authority Key Identifier:
+ keyid:FC:7E:EE:90:14:87:F1:95:0B:CC:5A:39:79:A6:67:C1:8C:BE:9C:88
+
+ Signature Algorithm: sha256WithRSAEncryption
+ 53:d4:91:97:9f:b1:cc:c8:d1:d9:9e:d3:38:90:2a:7b:93:03:
+ 7d:1d:2a:5c:6d:0c:5b:58:5b:64:fa:5f:00:34:ff:52:a8:22:
+ 04:77:8c:5c:e2:b0:1a:50:30:c3:31:d0:f6:4b:4c:05:f6:28:
+ a8:d4:c0:35:28:2e:4e:a0:9e:43:ab:0e:82:c9:36:b4:f0:b4:
+ 68:c2:59:a7:c3:e3:4d:64:2d:b1:cd:a4:91:9b:32:c6:94:f0:
+ c7:35:ab:99:fc:6d:92:71:d5:ac:a9:1e:6f:db:ea:4a:17:b6:
+ d8:c4:06:a3:46:49:39:a2:a4:51:0c:8e:97:ee:f1:ec:bd:7f:
+ e4:a9:39:fd:3e:b9:34:b0:59:94:d0:45:3a:e1:ac:f6:89:47:
+ bf:30:6f:6f:d5:66:3c:78:e5:7e:b5:31:2a:db:d1:ae:61:88:
+ c9:13:71:fc:bd:a7:aa:d5:f4:c1:d2:f6:20:4f:9c:68:09:cd:
+ fa:c5:55:e3:bb:fd:e5:d7:b0:84:d7:69:f9:a1:fd:34:e2:ee:
+ 1e:46:2d:ff:4f:4c:1b:a7:d5:a0:1b:69:ec:c2:37:ad:69:87:
+ 88:01:64:bf:00:94:33:20:ad:b6:b7:3b:46:01:b0:24:ea:44:
+ e0:b0:ee:58:2f:1d:a1:e8:62:c6:a7:2b:43:5d:6b:e0:ce:bd:
+ 8f:74:4b:b5
+-----BEGIN CERTIFICATE-----
+MIID6TCCAtGgAwIBAgIDAIFoMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNVBAYTAkNO
+MQswCQYDVQQIDAJHRDELMAkGA1UEBwwCR1oxDDAKBgNVBAoMA1NTVDEPMA0GA1UE
+CwwGSmVzc01BMRcwFQYDVQQDDA53d3cuamVzc21hLm9yZzEeMBwGCSqGSIb3DQEJ
+ARYPbGRjc2FhQDIxY24uY29tMB4XDTE2MDEwMTAwMDAwMFoXDTI2MDEwMTAwMDAw
+MFowcjELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQwwCgYDVQQKDANTU1QxDzAN
+BgNVBAsMBkplc3NNQTEXMBUGA1UEAwwOd3d3Lmplc3NtYS5vcmcxHjAcBgkqhkiG
+9w0BCQEWD2xkY3NhYUAyMWNuLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBALEOPuYKEl/iN3ub/QNaaqo0Hynk62znTp5kXj0zQAqxLxwHU117xHBk
+0LCZux0LnDFl9JAlilvqfeaXRWmQd6hrvV+1mNpnIe2xfyNWwa37QDNjXB7mEg3V
+O/dN9KeVxq9RlH/dQJ7qZlYy4i7wznYMUlz38378wYoOvdAQBX1UrdjWA5T4q0Da
+cRRAV0fIp45hBarp6T1nhDEvttU8yud2lIEV9jWblkyGIhU4FisGOIRRGhnKzCAh
+CYSZ59mq8Wf4FawMyz/H4noHcWWJu4ID1oAE+VFGXKm78qjp/T71/myn5lcGquTx
+oSoJrx7og+529eaJwgeJd2JF7OQ5NysCAwEAAaN7MHkwCQYDVR0TBAIwADAsBglg
+hkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0O
+BBYEFO0CmyFtrGLrkNkkA62QPzSp8vgJMB8GA1UdIwQYMBaAFPx+7pAUh/GVC8xa
+OXmmZ8GMvpyIMA0GCSqGSIb3DQEBCwUAA4IBAQBT1JGXn7HMyNHZntM4kCp7kwN9
+HSpcbQxbWFtk+l8ANP9SqCIEd4xc4rAaUDDDMdD2S0wF9iio1MA1KC5OoJ5Dqw6C
+yTa08LRowlmnw+NNZC2xzaSRmzLGlPDHNauZ/G2ScdWsqR5v2+pKF7bYxAajRkk5
+oqRRDI6X7vHsvX/kqTn9Prk0sFmU0EU64az2iUe/MG9v1WY8eOV+tTEq29GuYYjJ
+E3H8vaeq1fTB0vYgT5xoCc36xVXju/3l17CE12n5of004u4eRi3/T0wbp9WgG2ns
+wjetaYeIAWS/AJQzIK22tztGAbAk6kTgsO5YLx2h6GLGpytDXWvgzr2PdEu1
+-----END CERTIFICATE-----
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/ssl-cert/server.csr" "b/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/ssl-cert/server.csr"
new file mode 100644
index 000000000..0306648a3
--- /dev/null
+++ "b/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/ssl-cert/server.csr"
@@ -0,0 +1,18 @@
+-----BEGIN CERTIFICATE REQUEST-----
+MIIC8TCCAdkCAQAwfzELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQswCQYDVQQH
+DAJHWjEMMAoGA1UECgwDU1NUMQ8wDQYDVQQLDAZKZXNzTUExFzAVBgNVBAMMDnd3
+dy5qZXNzbWEub3JnMR4wHAYJKoZIhvcNAQkBFg9sZGNzYWFAMjFjbi5jb20wggEi
+MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCxDj7mChJf4jd7m/0DWmqqNB8p
+5Ots506eZF49M0AKsS8cB1Nde8RwZNCwmbsdC5wxZfSQJYpb6n3ml0VpkHeoa71f
+tZjaZyHtsX8jVsGt+0AzY1we5hIN1Tv3TfSnlcavUZR/3UCe6mZWMuIu8M52DFJc
+9/N+/MGKDr3QEAV9VK3Y1gOU+KtA2nEUQFdHyKeOYQWq6ek9Z4QxL7bVPMrndpSB
+FfY1m5ZMhiIVOBYrBjiEURoZyswgIQmEmefZqvFn+BWsDMs/x+J6B3FlibuCA9aA
+BPlRRlypu/Ko6f0+9f5sp+ZXBqrk8aEqCa8e6IPudvXmicIHiXdiRezkOTcrAgMB
+AAGgLTASBgkqhkiG9w0BCQIxBQwDU1NUMBcGCSqGSIb3DQEJBzEKDAhwcG1tQHNz
+dDANBgkqhkiG9w0BAQsFAAOCAQEAk9/S/9YUKjayh62Tagnk3hcJ5+YKJLHRtvv0
+Qu2HyPzpvyxORjQpnHaf+vpUj1W1amVQl7NSlNV181VzITtrySJyOdjvxTOvmITY
+stgCOXQiZeR6I9s2cZsh0yDcpiytlwnjWrFTgtIQ1dZgBRAvvJQIqoyrpgb22fva
+S3jilbFASColhEBeO0S8matO50qYwil7BabgQoUiu4QT6MhCXsJpNwi1qDD2rC/o
+Kffj63s4dRyJgqdbiYXMTDSfZvbx7UfnNCATBlniaoOTqbut1vmRGDYE+mkxly5X
+3KgcLvgpBoq0uUXNwsTNWo6CNthD8kY0fAkz34LG2aTKGy8Now==
+-----END CERTIFICATE REQUEST-----
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/ssl-cert/server.key" "b/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/ssl-cert/server.key"
new file mode 100644
index 000000000..2f36a1915
--- /dev/null
+++ "b/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/ssl-cert/server.key"
@@ -0,0 +1,30 @@
+-----BEGIN RSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: AES-256-CBC,107800C9B21513D8F642A394FAD9047E
+
+bmaTCBYAzKzpUrdaT6sb/dbH5o3JbFu2d8s1NfKhghYUG/RWgzx5H8QWSsh1Ll+8
+701HwSwauwbKaBWzWP5bj4mjw9hXcva8l1QWeuW+Q0GsE7uWNZGFQZbCxER/9jOu
+36KMlx0twcIEGs9PNwnY7d9oS/BMVpiUqhL8sPihMLCFK0fm6VGjMrfdIZJuZXEv
+BKt+c0UPkkPmivZjSm6iTPKI6VpGeyg0sM/uZr+mRj7IOAD6vsSQnCfUOq00Rm14
+ABrer8dCWJDKrx1iLq7tFojII+JcB7oBy+8KC/t0MlqmIP2jx93/MVW5lbZ3mj2v
+BanVQvklHTLe/WHjoaltqBEKN0sIzfyed6qWudKHUa8yjAr0PS4rsTbO0S4fFz+A
+KFWEs8fuXsanFHt5akWDTMiw1n4HaiioT4jjhWRRIKGEndztyGMklShYAdSTqsZO
+vzPO+xqLlg6wOgCGZ3Kl/c243XyLMCI+lJlzu3ccqzQJbNfPADXUcxSTqaEByWG3
+YIXttKY5WFBcNjf9B3c1qfJMt3nGY2QewnL+rNm/qpose/AsFS+2aqMeRw7fYh3R
+O+H+G+0gxrSK0E3WiewMIvUqFI6W300MWx6O7d87OkbfwMLpLPumsfLKswOKaAIF
+p0RxSABSe5ixqnErsoiYGNf3bln4tsQ+v5jYUY+Gn/9mVTPEYs6uwC78UW5Gj+Za
+lB3V8aRxQjWBerhLhf3iCmkkOVaG5JvVJDmvwo6iBRZ4NNzkAqOJm/UvfWoKN91b
+riHAWNayqvOfzaK6KYiJlOR9D779pK6xL+gZ0zo3rIA2yzs5MJAvJmaq6SQmQFl1
+Vzhnf3hIGJFtJYQJhlr36pkPgG9jVdJPhZisY9EsIAHvDbbLlBNexSmZc2RZmsVL
+VG6WqOm85DzuZxGULK/CnXCLpBMKWf9y5YPJrLkuwQILrr2btnAivPfUU80S3E0c
+VslBodCkSGVx3iQoAVJv2+6ZNMRNLVzpLnlaVtHl/gvw+InJlXmzBlZQFKOCaOny
+sz67qKmK1KWui2G3AzuvTEL9O++FVO+irpSNSLozxif/erLJl7R60pBkrWwd6jGB
+8qQv7ni+xIeXDBLSu26zPunLR/2PhrrCv49KmqNmF7sSNx6xmcc3CfgEy+5+Tm97
+KPE4JlaH/ZW61TlzXojbZMaiJltkFkpagFgm2bXrN1nMk2d6R+Yfe78lSvPKoB8k
+1m7LY1lNXFZJh2hxQRhdV9oTokFahUSitQCg1S3eASuE2jFRRL4jrh4LcBWUHZnJ
+OOAwBDOF4RfGyfiDs0IlrnLvK3a2KorlHfvUyj+cwkRmgI8sWgkJuNpz1mKDn5UZ
+yGn2JczHY0CiInRGgwMnS1Z/WpJZYGNh7pP7Hm1RnzVslkWSJGaKJv9jDNUCyy8R
+L+nwUSd6m6r8YWcs3zdBYsDHGOO5MgAU5Q8yuLbEgaK5NJSJgGkm+ya5oB88Y6T0
+JcL/u5xKw4kJiKgiLr3zrWe5qV6+lpH7fGKy7fucJWltDkfQSD3Dp0b64TW4FuQq
+VQhDR+KykLK6QxM2x3/maMfG578Ku1F6g4RboDR/6uCFu6hQuCoNYBk/QB0XpY13
+-----END RSA PRIVATE KEY-----
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/ssl-cert/server.pem" "b/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/ssl-cert/server.pem"
new file mode 100644
index 000000000..1d6040ca9
--- /dev/null
+++ "b/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull-SSL/ssl-cert/server.pem"
@@ -0,0 +1,53 @@
+-----BEGIN RSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: AES-256-CBC,107800C9B21513D8F642A394FAD9047E
+
+bmaTCBYAzKzpUrdaT6sb/dbH5o3JbFu2d8s1NfKhghYUG/RWgzx5H8QWSsh1Ll+8
+701HwSwauwbKaBWzWP5bj4mjw9hXcva8l1QWeuW+Q0GsE7uWNZGFQZbCxER/9jOu
+36KMlx0twcIEGs9PNwnY7d9oS/BMVpiUqhL8sPihMLCFK0fm6VGjMrfdIZJuZXEv
+BKt+c0UPkkPmivZjSm6iTPKI6VpGeyg0sM/uZr+mRj7IOAD6vsSQnCfUOq00Rm14
+ABrer8dCWJDKrx1iLq7tFojII+JcB7oBy+8KC/t0MlqmIP2jx93/MVW5lbZ3mj2v
+BanVQvklHTLe/WHjoaltqBEKN0sIzfyed6qWudKHUa8yjAr0PS4rsTbO0S4fFz+A
+KFWEs8fuXsanFHt5akWDTMiw1n4HaiioT4jjhWRRIKGEndztyGMklShYAdSTqsZO
+vzPO+xqLlg6wOgCGZ3Kl/c243XyLMCI+lJlzu3ccqzQJbNfPADXUcxSTqaEByWG3
+YIXttKY5WFBcNjf9B3c1qfJMt3nGY2QewnL+rNm/qpose/AsFS+2aqMeRw7fYh3R
+O+H+G+0gxrSK0E3WiewMIvUqFI6W300MWx6O7d87OkbfwMLpLPumsfLKswOKaAIF
+p0RxSABSe5ixqnErsoiYGNf3bln4tsQ+v5jYUY+Gn/9mVTPEYs6uwC78UW5Gj+Za
+lB3V8aRxQjWBerhLhf3iCmkkOVaG5JvVJDmvwo6iBRZ4NNzkAqOJm/UvfWoKN91b
+riHAWNayqvOfzaK6KYiJlOR9D779pK6xL+gZ0zo3rIA2yzs5MJAvJmaq6SQmQFl1
+Vzhnf3hIGJFtJYQJhlr36pkPgG9jVdJPhZisY9EsIAHvDbbLlBNexSmZc2RZmsVL
+VG6WqOm85DzuZxGULK/CnXCLpBMKWf9y5YPJrLkuwQILrr2btnAivPfUU80S3E0c
+VslBodCkSGVx3iQoAVJv2+6ZNMRNLVzpLnlaVtHl/gvw+InJlXmzBlZQFKOCaOny
+sz67qKmK1KWui2G3AzuvTEL9O++FVO+irpSNSLozxif/erLJl7R60pBkrWwd6jGB
+8qQv7ni+xIeXDBLSu26zPunLR/2PhrrCv49KmqNmF7sSNx6xmcc3CfgEy+5+Tm97
+KPE4JlaH/ZW61TlzXojbZMaiJltkFkpagFgm2bXrN1nMk2d6R+Yfe78lSvPKoB8k
+1m7LY1lNXFZJh2hxQRhdV9oTokFahUSitQCg1S3eASuE2jFRRL4jrh4LcBWUHZnJ
+OOAwBDOF4RfGyfiDs0IlrnLvK3a2KorlHfvUyj+cwkRmgI8sWgkJuNpz1mKDn5UZ
+yGn2JczHY0CiInRGgwMnS1Z/WpJZYGNh7pP7Hm1RnzVslkWSJGaKJv9jDNUCyy8R
+L+nwUSd6m6r8YWcs3zdBYsDHGOO5MgAU5Q8yuLbEgaK5NJSJgGkm+ya5oB88Y6T0
+JcL/u5xKw4kJiKgiLr3zrWe5qV6+lpH7fGKy7fucJWltDkfQSD3Dp0b64TW4FuQq
+VQhDR+KykLK6QxM2x3/maMfG578Ku1F6g4RboDR/6uCFu6hQuCoNYBk/QB0XpY13
+-----END RSA PRIVATE KEY-----
+-----BEGIN CERTIFICATE-----
+MIID6TCCAtGgAwIBAgIDAIFoMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNVBAYTAkNO
+MQswCQYDVQQIDAJHRDELMAkGA1UEBwwCR1oxDDAKBgNVBAoMA1NTVDEPMA0GA1UE
+CwwGSmVzc01BMRcwFQYDVQQDDA53d3cuamVzc21hLm9yZzEeMBwGCSqGSIb3DQEJ
+ARYPbGRjc2FhQDIxY24uY29tMB4XDTE2MDEwMTAwMDAwMFoXDTI2MDEwMTAwMDAw
+MFowcjELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQwwCgYDVQQKDANTU1QxDzAN
+BgNVBAsMBkplc3NNQTEXMBUGA1UEAwwOd3d3Lmplc3NtYS5vcmcxHjAcBgkqhkiG
+9w0BCQEWD2xkY3NhYUAyMWNuLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBALEOPuYKEl/iN3ub/QNaaqo0Hynk62znTp5kXj0zQAqxLxwHU117xHBk
+0LCZux0LnDFl9JAlilvqfeaXRWmQd6hrvV+1mNpnIe2xfyNWwa37QDNjXB7mEg3V
+O/dN9KeVxq9RlH/dQJ7qZlYy4i7wznYMUlz38378wYoOvdAQBX1UrdjWA5T4q0Da
+cRRAV0fIp45hBarp6T1nhDEvttU8yud2lIEV9jWblkyGIhU4FisGOIRRGhnKzCAh
+CYSZ59mq8Wf4FawMyz/H4noHcWWJu4ID1oAE+VFGXKm78qjp/T71/myn5lcGquTx
+oSoJrx7og+529eaJwgeJd2JF7OQ5NysCAwEAAaN7MHkwCQYDVR0TBAIwADAsBglg
+hkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0O
+BBYEFO0CmyFtrGLrkNkkA62QPzSp8vgJMB8GA1UdIwQYMBaAFPx+7pAUh/GVC8xa
+OXmmZ8GMvpyIMA0GCSqGSIb3DQEBCwUAA4IBAQBT1JGXn7HMyNHZntM4kCp7kwN9
+HSpcbQxbWFtk+l8ANP9SqCIEd4xc4rAaUDDDMdD2S0wF9iio1MA1KC5OoJ5Dqw6C
+yTa08LRowlmnw+NNZC2xzaSRmzLGlPDHNauZ/G2ScdWsqR5v2+pKF7bYxAajRkk5
+oqRRDI6X7vHsvX/kqTn9Prk0sFmU0EU64az2iUe/MG9v1WY8eOV+tTEq29GuYYjJ
+E3H8vaeq1fTB0vYgT5xoCc36xVXju/3l17CE12n5of004u4eRi3/T0wbp9WgG2ns
+wjetaYeIAWS/AJQzIK22tztGAbAk6kTgsO5YLx2h6GLGpytDXWvgzr2PdEu1
+-----END CERTIFICATE-----
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull/TestEcho-PullClient.e" "b/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull/TestEcho-PullClient.e"
new file mode 100644
index 000000000..3a2050194
Binary files /dev/null and "b/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull/TestEcho-PullClient.e" differ
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull/TestEcho-PullServer.e" "b/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull/TestEcho-PullServer.e"
new file mode 100644
index 000000000..0deb1f4fc
Binary files /dev/null and "b/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho-Pull/TestEcho-PullServer.e" differ
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho/TestEcho-Client.e" "b/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho/TestEcho-Client.e"
new file mode 100644
index 000000000..1ef02f8d2
Binary files /dev/null and "b/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho/TestEcho-Client.e" differ
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho/TestEcho-Server.e" "b/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho/TestEcho-Server.e"
new file mode 100644
index 000000000..0d3aaca19
Binary files /dev/null and "b/HP-Socket/Demo/Other Languages Demos/E/\346\224\257\346\214\201\345\272\223/TestEcho/TestEcho-Server.e" differ
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/TestEcho-Pack-SSL/HPSocket.ec" "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/TestEcho-Pack-SSL/HPSocket.ec"
new file mode 100644
index 000000000..d839e3d18
Binary files /dev/null and "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/TestEcho-Pack-SSL/HPSocket.ec" differ
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/TestEcho-Pack-SSL/HPSocket4C-SSL.dll" "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/TestEcho-Pack-SSL/HPSocket4C-SSL.dll"
new file mode 100644
index 000000000..75e525a4c
Binary files /dev/null and "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/TestEcho-Pack-SSL/HPSocket4C-SSL.dll" differ
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/TestEcho-Pack-SSL/TestEcho-PackClient.e" "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/TestEcho-Pack-SSL/TestEcho-PackClient.e"
new file mode 100644
index 000000000..0af0a7605
Binary files /dev/null and "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/TestEcho-Pack-SSL/TestEcho-PackClient.e" differ
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/TestEcho-Pack-SSL/TestEcho-PackServer.e" "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/TestEcho-Pack-SSL/TestEcho-PackServer.e"
new file mode 100644
index 000000000..bf3269c12
Binary files /dev/null and "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/TestEcho-Pack-SSL/TestEcho-PackServer.e" differ
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/TestEcho-Pack-SSL/ssl-cert/ca.crt" "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/TestEcho-Pack-SSL/ssl-cert/ca.crt"
new file mode 100644
index 000000000..c31217076
--- /dev/null
+++ "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/TestEcho-Pack-SSL/ssl-cert/ca.crt"
@@ -0,0 +1,23 @@
+-----BEGIN CERTIFICATE-----
+MIID0TCCArmgAwIBAgIJALFGobpzN5MdMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNV
+BAYTAkNOMQswCQYDVQQIDAJHRDELMAkGA1UEBwwCR1oxDDAKBgNVBAoMA1NTVDEP
+MA0GA1UECwwGSmVzc01BMRcwFQYDVQQDDA53d3cuamVzc21hLm9yZzEeMBwGCSqG
+SIb3DQEJARYPbGRjc2FhQDIxY24uY29tMB4XDTE2MDQwMTE1MDIwMFoXDTI0MDYx
+ODE1MDIwMFowfzELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQswCQYDVQQHDAJH
+WjEMMAoGA1UECgwDU1NUMQ8wDQYDVQQLDAZKZXNzTUExFzAVBgNVBAMMDnd3dy5q
+ZXNzbWEub3JnMR4wHAYJKoZIhvcNAQkBFg9sZGNzYWFAMjFjbi5jb20wggEiMA0G
+CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDht6llexLtFkV8ijjdJGaHXXQysWOJ
+UM/YQFYP52nviurJSpMbWSXnuaDlfidk76B66Np5mlnN5BiHqbBj34GCVKz5VQtx
+3kMY1y30YWyiHAEZiV3PLQc8/A9MnJM/q/mHaulmTuJi8A85TWadqUNXgiaIMkqz
+bKaauR1/GCxXuEVroqtyR99RCWhfakTz04KfIbt83QR0imWC6uhmvD/DXJ03XFzd
+XkK5aNp+ef1sBQgFKjeXV6EMuq+UgEDPXlCDUJAqsZt6W/ohrCAHWQYZ/RSvvaMJ
+O7aWROGAC/lh6ATOIbFlGVppw6zUGdIDkB5FVF1MC7CyDndncFrY+OJzAgMBAAGj
+UDBOMB0GA1UdDgQWBBT8fu6QFIfxlQvMWjl5pmfBjL6ciDAfBgNVHSMEGDAWgBT8
+fu6QFIfxlQvMWjl5pmfBjL6ciDAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUA
+A4IBAQDI+f6GMBJxRJNKrgbUYLD1U6LWEQJQ50g2NxGy0j+TL6oypoo/kyME3tOR
+EmXEDzytGcSaQ78xYcg97UQd8OhXYQr0qwZ/JLarmhCVK/bfbGTIn4Mk4ZgDqcOU
+46jsJeEZwUSrrq7svKO5d7+wV0VGPO+Ww4yzRCPwm2puXFY1+KpTxYX31+wwMB8p
+7GuJEDgV08qzLfcBAfSFFYiOHL3tJ+XNKFNRqigjeYrWuAMphOhpYfYnU0d0upe8
+wWx9Unm8qSkc7hiS/vvs1v7Pv1sqMFRBoaKOTqZ7Wz/5AySGPQjeMV/atmArDEkx
+z58OEgTzg1J/Keztxwj7I2KnYHyH
+-----END CERTIFICATE-----
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/TestEcho-Pack-SSL/ssl-cert/ca.key" "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/TestEcho-Pack-SSL/ssl-cert/ca.key"
new file mode 100644
index 000000000..e0a85b46b
--- /dev/null
+++ "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/TestEcho-Pack-SSL/ssl-cert/ca.key"
@@ -0,0 +1,30 @@
+-----BEGIN RSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: AES-256-CBC,ABBC3A36C737CF487C5C36CA5ACA4A5D
+
+zv/FdREV9tlLsPPzIrm5EIbGaTiReEz+9jlgplyVLkAZe7MNF868t5g93Ve46ehy
+XzBf2QtBE12xAgKmjTvK7RnO1Rih5LqY7VTrEhIFSkYdDTqTV8I8cWig7Hmg+qNw
+EymXdrCYjBQB1U3jmOxBqQrDw75KYJFq5vN+vAmnreA9m9NdOAWOQ+n5K0sJLQpk
+6F9a4pzym7v4mMmP67Ddf/qHVcbWPLOo3QkBUItGJYPpBL1ODu+rd/3f9EyJspVw
+3dQNAaT0OzA0RZ9Pew7+ZxzgFFDHA4sh6r4fcfpEfXTr1QQUg0F4B66+OTE1duoE
+T+PIwYWp4yyuYgUA7txpDsGaENbvfnsP81oLMIvU0TicKJoYxr2Zxa+lK2MWCa5D
+L9VbRMQM0bXTF1qCgjnPmFhxhdYgidxPEZPahyMmFU3LB9W5ils/DK+AXW1gC4ZY
+O8hpUGaZ7Lj5H6suMSYIX7CAEi0NXXdRMXw7bOBecRFy+fhgHmMF1fGgBG2Fd1lP
+wgHlydLQDZoUpTnZrifDzlH8oDqEbCCOSUYc82fVKeNNORePHLGuV8utz0UTR9Rq
+Ko9ZYEN7j+JsPBdG3CnrjDILrZA3peKPhEifrRL2mjHdMdwFsE/fetyvUssgh9VY
+o2Bi25khVu+2TwBMEO1nlS6U+TWOU8u4qxGtSj5xN1Fdplb098VXY1T08+NvDJUN
+7S52KPAyeXY6V2/Q7IyDpsnmM9SWiLrvf2C/niEHRLfWoNP5bt6r/e8RIjFPc0KV
+E8KvANWXSArM359F4+ucvMzrYEtkgnldf6UIN007qqr2eEREeVwxVWIpJZJauVDV
+1uOvTQCDU7O4cIV/FiK1+oVt9MQYAHnnG3revFzqcZtH2x3qWNEGwiyfDZh7qx7c
+8LFYiFLIQX2HGYcEpcKAbj65sJLecz7VtNQ2GMoXHh09BQ5VnleVInmAfAv6r01k
+OdTJ3CNf8YcW/PAKTGrgmsncGp8EvHbmDC4r1ecxxp3Mu7M7T9XfQ41nk1nCLmOp
++3B9ecnJx6bSkg6wrrofl2MifCyl6AvxyKUeAt+dNV319QL/imgV3VQiD+Gu5i+c
+1tveD4cKNm01izEZz6xPBZ9sH4G8TFYFOx572q2DdSZe2MXy/h6QfKUADPOkvPyr
+0dqNbPQKJDL7YJOG39k0L/GOe6uH+JxXlvYLtqSLznLTQkm9kkWVOB54gV+v2NBp
+831BnDdlwv9AnScDY7o4fG1qAaWIZyMWntmORfpHkOMRbrBqK5TeczpoV2jr1iGl
+h1oIbbANJzaXEydnWcnUPujopP7oYG2KGhDbzhhR/PGlvLknIoAA55BqL23dzHct
+1/xaaHqxcjGNymgSPPD9Kjx0qQZovOb5WKDyg5+D5GIfRqq+c1SQeZw+5jcoMBIF
+TSdfiwAxhLkT8SQf72C6tAYsxkTubbcU1gc0Vkdd5Q2FWc6YgCb6XVPYC5jHATwV
+V4v5JVqGLRFi056heSpA0EFWp/AuSoaYaQRwGfBnUysaocDlEE4kTNzzJIwgbWrt
+iTL5qB7LIexqUVWVjmUmx6S0+f6qVYovDjFHVg61Xb6zdL04LmU0VrMCwgUBEt2j
+-----END RSA PRIVATE KEY-----
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/TestEcho-Pack-SSL/ssl-cert/ca.pem" "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/TestEcho-Pack-SSL/ssl-cert/ca.pem"
new file mode 100644
index 000000000..57f3b363b
--- /dev/null
+++ "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/TestEcho-Pack-SSL/ssl-cert/ca.pem"
@@ -0,0 +1,53 @@
+-----BEGIN RSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: AES-256-CBC,ABBC3A36C737CF487C5C36CA5ACA4A5D
+
+zv/FdREV9tlLsPPzIrm5EIbGaTiReEz+9jlgplyVLkAZe7MNF868t5g93Ve46ehy
+XzBf2QtBE12xAgKmjTvK7RnO1Rih5LqY7VTrEhIFSkYdDTqTV8I8cWig7Hmg+qNw
+EymXdrCYjBQB1U3jmOxBqQrDw75KYJFq5vN+vAmnreA9m9NdOAWOQ+n5K0sJLQpk
+6F9a4pzym7v4mMmP67Ddf/qHVcbWPLOo3QkBUItGJYPpBL1ODu+rd/3f9EyJspVw
+3dQNAaT0OzA0RZ9Pew7+ZxzgFFDHA4sh6r4fcfpEfXTr1QQUg0F4B66+OTE1duoE
+T+PIwYWp4yyuYgUA7txpDsGaENbvfnsP81oLMIvU0TicKJoYxr2Zxa+lK2MWCa5D
+L9VbRMQM0bXTF1qCgjnPmFhxhdYgidxPEZPahyMmFU3LB9W5ils/DK+AXW1gC4ZY
+O8hpUGaZ7Lj5H6suMSYIX7CAEi0NXXdRMXw7bOBecRFy+fhgHmMF1fGgBG2Fd1lP
+wgHlydLQDZoUpTnZrifDzlH8oDqEbCCOSUYc82fVKeNNORePHLGuV8utz0UTR9Rq
+Ko9ZYEN7j+JsPBdG3CnrjDILrZA3peKPhEifrRL2mjHdMdwFsE/fetyvUssgh9VY
+o2Bi25khVu+2TwBMEO1nlS6U+TWOU8u4qxGtSj5xN1Fdplb098VXY1T08+NvDJUN
+7S52KPAyeXY6V2/Q7IyDpsnmM9SWiLrvf2C/niEHRLfWoNP5bt6r/e8RIjFPc0KV
+E8KvANWXSArM359F4+ucvMzrYEtkgnldf6UIN007qqr2eEREeVwxVWIpJZJauVDV
+1uOvTQCDU7O4cIV/FiK1+oVt9MQYAHnnG3revFzqcZtH2x3qWNEGwiyfDZh7qx7c
+8LFYiFLIQX2HGYcEpcKAbj65sJLecz7VtNQ2GMoXHh09BQ5VnleVInmAfAv6r01k
+OdTJ3CNf8YcW/PAKTGrgmsncGp8EvHbmDC4r1ecxxp3Mu7M7T9XfQ41nk1nCLmOp
++3B9ecnJx6bSkg6wrrofl2MifCyl6AvxyKUeAt+dNV319QL/imgV3VQiD+Gu5i+c
+1tveD4cKNm01izEZz6xPBZ9sH4G8TFYFOx572q2DdSZe2MXy/h6QfKUADPOkvPyr
+0dqNbPQKJDL7YJOG39k0L/GOe6uH+JxXlvYLtqSLznLTQkm9kkWVOB54gV+v2NBp
+831BnDdlwv9AnScDY7o4fG1qAaWIZyMWntmORfpHkOMRbrBqK5TeczpoV2jr1iGl
+h1oIbbANJzaXEydnWcnUPujopP7oYG2KGhDbzhhR/PGlvLknIoAA55BqL23dzHct
+1/xaaHqxcjGNymgSPPD9Kjx0qQZovOb5WKDyg5+D5GIfRqq+c1SQeZw+5jcoMBIF
+TSdfiwAxhLkT8SQf72C6tAYsxkTubbcU1gc0Vkdd5Q2FWc6YgCb6XVPYC5jHATwV
+V4v5JVqGLRFi056heSpA0EFWp/AuSoaYaQRwGfBnUysaocDlEE4kTNzzJIwgbWrt
+iTL5qB7LIexqUVWVjmUmx6S0+f6qVYovDjFHVg61Xb6zdL04LmU0VrMCwgUBEt2j
+-----END RSA PRIVATE KEY-----
+-----BEGIN CERTIFICATE-----
+MIID0TCCArmgAwIBAgIJALFGobpzN5MdMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNV
+BAYTAkNOMQswCQYDVQQIDAJHRDELMAkGA1UEBwwCR1oxDDAKBgNVBAoMA1NTVDEP
+MA0GA1UECwwGSmVzc01BMRcwFQYDVQQDDA53d3cuamVzc21hLm9yZzEeMBwGCSqG
+SIb3DQEJARYPbGRjc2FhQDIxY24uY29tMB4XDTE2MDQwMTE1MDIwMFoXDTI0MDYx
+ODE1MDIwMFowfzELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQswCQYDVQQHDAJH
+WjEMMAoGA1UECgwDU1NUMQ8wDQYDVQQLDAZKZXNzTUExFzAVBgNVBAMMDnd3dy5q
+ZXNzbWEub3JnMR4wHAYJKoZIhvcNAQkBFg9sZGNzYWFAMjFjbi5jb20wggEiMA0G
+CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDht6llexLtFkV8ijjdJGaHXXQysWOJ
+UM/YQFYP52nviurJSpMbWSXnuaDlfidk76B66Np5mlnN5BiHqbBj34GCVKz5VQtx
+3kMY1y30YWyiHAEZiV3PLQc8/A9MnJM/q/mHaulmTuJi8A85TWadqUNXgiaIMkqz
+bKaauR1/GCxXuEVroqtyR99RCWhfakTz04KfIbt83QR0imWC6uhmvD/DXJ03XFzd
+XkK5aNp+ef1sBQgFKjeXV6EMuq+UgEDPXlCDUJAqsZt6W/ohrCAHWQYZ/RSvvaMJ
+O7aWROGAC/lh6ATOIbFlGVppw6zUGdIDkB5FVF1MC7CyDndncFrY+OJzAgMBAAGj
+UDBOMB0GA1UdDgQWBBT8fu6QFIfxlQvMWjl5pmfBjL6ciDAfBgNVHSMEGDAWgBT8
+fu6QFIfxlQvMWjl5pmfBjL6ciDAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUA
+A4IBAQDI+f6GMBJxRJNKrgbUYLD1U6LWEQJQ50g2NxGy0j+TL6oypoo/kyME3tOR
+EmXEDzytGcSaQ78xYcg97UQd8OhXYQr0qwZ/JLarmhCVK/bfbGTIn4Mk4ZgDqcOU
+46jsJeEZwUSrrq7svKO5d7+wV0VGPO+Ww4yzRCPwm2puXFY1+KpTxYX31+wwMB8p
+7GuJEDgV08qzLfcBAfSFFYiOHL3tJ+XNKFNRqigjeYrWuAMphOhpYfYnU0d0upe8
+wWx9Unm8qSkc7hiS/vvs1v7Pv1sqMFRBoaKOTqZ7Wz/5AySGPQjeMV/atmArDEkx
+z58OEgTzg1J/Keztxwj7I2KnYHyH
+-----END CERTIFICATE-----
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/TestEcho-Pack-SSL/ssl-cert/client.cer" "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/TestEcho-Pack-SSL/ssl-cert/client.cer"
new file mode 100644
index 000000000..33a266a82
--- /dev/null
+++ "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/TestEcho-Pack-SSL/ssl-cert/client.cer"
@@ -0,0 +1,23 @@
+-----BEGIN CERTIFICATE-----
+MIID6TCCAtGgAwIBAgIDAIFpMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNVBAYTAkNO
+MQswCQYDVQQIDAJHRDELMAkGA1UEBwwCR1oxDDAKBgNVBAoMA1NTVDEPMA0GA1UE
+CwwGSmVzc01BMRcwFQYDVQQDDA53d3cuamVzc21hLm9yZzEeMBwGCSqGSIb3DQEJ
+ARYPbGRjc2FhQDIxY24uY29tMB4XDTE2MDEwMTAwMDAwMFoXDTI2MDEwMTAwMDAw
+MFowcjELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQwwCgYDVQQKDANTU1QxDzAN
+BgNVBAsMBkplc3NNQTEXMBUGA1UEAwwOd3d3Lmplc3NtYS5vcmcxHjAcBgkqhkiG
+9w0BCQEWD2xkY3NhYUAyMWNuLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBAOFlDuWj95Nov+48W0ZaUp69GVB+U3orPuVm+fU5gXgl0tJbNbXS0GOM
+MspmMB0WxciTfj+t/WufpcHKzryHwrbqmMgrZiSyrp4ulA2mQuTPR32vgQ3/2eBs
+O884GmKOUbiaORgHGBoRAdOnoWarM7B/igS6WGqPetaUz12QAv2vzw9Qn0xxIBpr
+SVJumTo9HtOvuRj0BNXMRRYp+lfX2+96cftidyU1q+2Y2v3Fedzlo8Lr7m1ZkPcp
+ugQDz3R0kXvigDPAKhbTj6eAXJ/hcPOCGQ5RTIZJH4JnJ2jKw5lTjJ6y0rbt9Jq9
+NuIqz3GORHYWY4xBmbdTZy0BrbQOePECAwEAAaN7MHkwCQYDVR0TBAIwADAsBglg
+hkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0O
+BBYEFHYUdE6SbzXIWA8m3TwdgUJfAT6+MB8GA1UdIwQYMBaAFPx+7pAUh/GVC8xa
+OXmmZ8GMvpyIMA0GCSqGSIb3DQEBCwUAA4IBAQCZWaDrHbRHNNEaCVVFl5WCNqyd
+y1MpI2iErmfiCTNiG4v9wImTGWIWRHc3dZowniwSb43OuuhlpdWCxeal9nTL6iCP
+B486EMOsVWcfUZkPeK4cBgRXbHTmjxfmQEHHA6NTQdRc7LGq4tjhYs8zmxBVI2HO
+uIp0Qbj/Mb2j8r13IC91Z5Ontq0mQTIg0vvffZsqvcjs3Mmrxr2iX/EYpKNR2DP+
+9msWTZH734tZ2I7vORZOprpdAwELOyVLXkKIcP9qkRPAcFNk0Fl5peBQtBuP1ky5
+kUzWMQq2eoy73miPRnQ8ZjZ/3xTXhMKJ6bCn3tbWrjvc1TwpobfwyfsFH9sq
+-----END CERTIFICATE-----
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/TestEcho-Pack-SSL/ssl-cert/client.crt" "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/TestEcho-Pack-SSL/ssl-cert/client.crt"
new file mode 100644
index 000000000..a87d4f3f7
--- /dev/null
+++ "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/TestEcho-Pack-SSL/ssl-cert/client.crt"
@@ -0,0 +1,82 @@
+Certificate:
+ Data:
+ Version: 3 (0x2)
+ Serial Number: 33129 (0x8169)
+ Signature Algorithm: sha256WithRSAEncryption
+ Issuer: C=CN, ST=GD, L=GZ, O=SST, OU=JessMA, CN=www.jessma.org/emailAddress=ldcsaa@21cn.com
+ Validity
+ Not Before: Jan 1 00:00:00 2016 GMT
+ Not After : Jan 1 00:00:00 2026 GMT
+ Subject: C=CN, ST=GD, O=SST, OU=JessMA, CN=www.jessma.org/emailAddress=ldcsaa@21cn.com
+ Subject Public Key Info:
+ Public Key Algorithm: rsaEncryption
+ Public-Key: (2048 bit)
+ Modulus:
+ 00:e1:65:0e:e5:a3:f7:93:68:bf:ee:3c:5b:46:5a:
+ 52:9e:bd:19:50:7e:53:7a:2b:3e:e5:66:f9:f5:39:
+ 81:78:25:d2:d2:5b:35:b5:d2:d0:63:8c:32:ca:66:
+ 30:1d:16:c5:c8:93:7e:3f:ad:fd:6b:9f:a5:c1:ca:
+ ce:bc:87:c2:b6:ea:98:c8:2b:66:24:b2:ae:9e:2e:
+ 94:0d:a6:42:e4:cf:47:7d:af:81:0d:ff:d9:e0:6c:
+ 3b:cf:38:1a:62:8e:51:b8:9a:39:18:07:18:1a:11:
+ 01:d3:a7:a1:66:ab:33:b0:7f:8a:04:ba:58:6a:8f:
+ 7a:d6:94:cf:5d:90:02:fd:af:cf:0f:50:9f:4c:71:
+ 20:1a:6b:49:52:6e:99:3a:3d:1e:d3:af:b9:18:f4:
+ 04:d5:cc:45:16:29:fa:57:d7:db:ef:7a:71:fb:62:
+ 77:25:35:ab:ed:98:da:fd:c5:79:dc:e5:a3:c2:eb:
+ ee:6d:59:90:f7:29:ba:04:03:cf:74:74:91:7b:e2:
+ 80:33:c0:2a:16:d3:8f:a7:80:5c:9f:e1:70:f3:82:
+ 19:0e:51:4c:86:49:1f:82:67:27:68:ca:c3:99:53:
+ 8c:9e:b2:d2:b6:ed:f4:9a:bd:36:e2:2a:cf:71:8e:
+ 44:76:16:63:8c:41:99:b7:53:67:2d:01:ad:b4:0e:
+ 78:f1
+ Exponent: 65537 (0x10001)
+ X509v3 extensions:
+ X509v3 Basic Constraints:
+ CA:FALSE
+ Netscape Comment:
+ OpenSSL Generated Certificate
+ X509v3 Subject Key Identifier:
+ 76:14:74:4E:92:6F:35:C8:58:0F:26:DD:3C:1D:81:42:5F:01:3E:BE
+ X509v3 Authority Key Identifier:
+ keyid:FC:7E:EE:90:14:87:F1:95:0B:CC:5A:39:79:A6:67:C1:8C:BE:9C:88
+
+ Signature Algorithm: sha256WithRSAEncryption
+ 99:59:a0:eb:1d:b4:47:34:d1:1a:09:55:45:97:95:82:36:ac:
+ 9d:cb:53:29:23:68:84:ae:67:e2:09:33:62:1b:8b:fd:c0:89:
+ 93:19:62:16:44:77:37:75:9a:30:9e:2c:12:6f:8d:ce:ba:e8:
+ 65:a5:d5:82:c5:e6:a5:f6:74:cb:ea:20:8f:07:8f:3a:10:c3:
+ ac:55:67:1f:51:99:0f:78:ae:1c:06:04:57:6c:74:e6:8f:17:
+ e6:40:41:c7:03:a3:53:41:d4:5c:ec:b1:aa:e2:d8:e1:62:cf:
+ 33:9b:10:55:23:61:ce:b8:8a:74:41:b8:ff:31:bd:a3:f2:bd:
+ 77:20:2f:75:67:93:a7:b6:ad:26:41:32:20:d2:fb:df:7d:9b:
+ 2a:bd:c8:ec:dc:c9:ab:c6:bd:a2:5f:f1:18:a4:a3:51:d8:33:
+ fe:f6:6b:16:4d:91:fb:df:8b:59:d8:8e:ef:39:16:4e:a6:ba:
+ 5d:03:01:0b:3b:25:4b:5e:42:88:70:ff:6a:91:13:c0:70:53:
+ 64:d0:59:79:a5:e0:50:b4:1b:8f:d6:4c:b9:91:4c:d6:31:0a:
+ b6:7a:8c:bb:de:68:8f:46:74:3c:66:36:7f:df:14:d7:84:c2:
+ 89:e9:b0:a7:de:d6:d6:ae:3b:dc:d5:3c:29:a1:b7:f0:c9:fb:
+ 05:1f:db:2a
+-----BEGIN CERTIFICATE-----
+MIID6TCCAtGgAwIBAgIDAIFpMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNVBAYTAkNO
+MQswCQYDVQQIDAJHRDELMAkGA1UEBwwCR1oxDDAKBgNVBAoMA1NTVDEPMA0GA1UE
+CwwGSmVzc01BMRcwFQYDVQQDDA53d3cuamVzc21hLm9yZzEeMBwGCSqGSIb3DQEJ
+ARYPbGRjc2FhQDIxY24uY29tMB4XDTE2MDEwMTAwMDAwMFoXDTI2MDEwMTAwMDAw
+MFowcjELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQwwCgYDVQQKDANTU1QxDzAN
+BgNVBAsMBkplc3NNQTEXMBUGA1UEAwwOd3d3Lmplc3NtYS5vcmcxHjAcBgkqhkiG
+9w0BCQEWD2xkY3NhYUAyMWNuLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBAOFlDuWj95Nov+48W0ZaUp69GVB+U3orPuVm+fU5gXgl0tJbNbXS0GOM
+MspmMB0WxciTfj+t/WufpcHKzryHwrbqmMgrZiSyrp4ulA2mQuTPR32vgQ3/2eBs
+O884GmKOUbiaORgHGBoRAdOnoWarM7B/igS6WGqPetaUz12QAv2vzw9Qn0xxIBpr
+SVJumTo9HtOvuRj0BNXMRRYp+lfX2+96cftidyU1q+2Y2v3Fedzlo8Lr7m1ZkPcp
+ugQDz3R0kXvigDPAKhbTj6eAXJ/hcPOCGQ5RTIZJH4JnJ2jKw5lTjJ6y0rbt9Jq9
+NuIqz3GORHYWY4xBmbdTZy0BrbQOePECAwEAAaN7MHkwCQYDVR0TBAIwADAsBglg
+hkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0O
+BBYEFHYUdE6SbzXIWA8m3TwdgUJfAT6+MB8GA1UdIwQYMBaAFPx+7pAUh/GVC8xa
+OXmmZ8GMvpyIMA0GCSqGSIb3DQEBCwUAA4IBAQCZWaDrHbRHNNEaCVVFl5WCNqyd
+y1MpI2iErmfiCTNiG4v9wImTGWIWRHc3dZowniwSb43OuuhlpdWCxeal9nTL6iCP
+B486EMOsVWcfUZkPeK4cBgRXbHTmjxfmQEHHA6NTQdRc7LGq4tjhYs8zmxBVI2HO
+uIp0Qbj/Mb2j8r13IC91Z5Ontq0mQTIg0vvffZsqvcjs3Mmrxr2iX/EYpKNR2DP+
+9msWTZH734tZ2I7vORZOprpdAwELOyVLXkKIcP9qkRPAcFNk0Fl5peBQtBuP1ky5
+kUzWMQq2eoy73miPRnQ8ZjZ/3xTXhMKJ6bCn3tbWrjvc1TwpobfwyfsFH9sq
+-----END CERTIFICATE-----
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/TestEcho-Pack-SSL/ssl-cert/client.csr" "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/TestEcho-Pack-SSL/ssl-cert/client.csr"
new file mode 100644
index 000000000..d35803d5b
--- /dev/null
+++ "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/TestEcho-Pack-SSL/ssl-cert/client.csr"
@@ -0,0 +1,18 @@
+-----BEGIN CERTIFICATE REQUEST-----
+MIIC8TCCAdkCAQAwfzELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQswCQYDVQQH
+DAJHWjEMMAoGA1UECgwDU1NUMQ8wDQYDVQQLDAZKZXNzTUExFzAVBgNVBAMMDnd3
+dy5qZXNzbWEub3JnMR4wHAYJKoZIhvcNAQkBFg9sZGNzYWFAMjFjbi5jb20wggEi
+MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDhZQ7lo/eTaL/uPFtGWlKevRlQ
+flN6Kz7lZvn1OYF4JdLSWzW10tBjjDLKZjAdFsXIk34/rf1rn6XBys68h8K26pjI
+K2Yksq6eLpQNpkLkz0d9r4EN/9ngbDvPOBpijlG4mjkYBxgaEQHTp6FmqzOwf4oE
+ulhqj3rWlM9dkAL9r88PUJ9McSAaa0lSbpk6PR7Tr7kY9ATVzEUWKfpX19vvenH7
+YnclNavtmNr9xXnc5aPC6+5tWZD3KboEA890dJF74oAzwCoW04+ngFyf4XDzghkO
+UUyGSR+CZydoysOZU4yestK27fSavTbiKs9xjkR2FmOMQZm3U2ctAa20DnjxAgMB
+AAGgLTASBgkqhkiG9w0BCQIxBQwDU1NUMBcGCSqGSIb3DQEJBzEKDAhwcG1tQHNz
+dDANBgkqhkiG9w0BAQsFAAOCAQEAtHiWz0XuqZi/2aoinH472W/sqG7S7YizbcQC
+kCRgYqQw32U0ujI2ndTt2WYDgFUlI1KY5N4b5pl2pdDepFWXLcLyG3nyCjXlJng5
+8YLENg02+xsLOZUjZEsY5pxEkrKYBBjt537P+fA83jtxakC+9xvTEC94CxICWMvx
+OVw1mWjUE3a7Hby7ChkOX/PhJdNzHdsMU9fKCWEFFmyJgrNkFc1nB1omt0j+OkXA
+scwFqhji7yJuwxboaDLdnTNIGGBbDLcw44s7udWB4QayvHwuNgcZ8shxlm686Xi5
+K+SXJTi0DPFKcucU2LA+VCLnMtefghCxbrU7fcFyPsJuT+jdsg==
+-----END CERTIFICATE REQUEST-----
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/TestEcho-Pack-SSL/ssl-cert/client.key" "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/TestEcho-Pack-SSL/ssl-cert/client.key"
new file mode 100644
index 000000000..a9f3dd0ca
--- /dev/null
+++ "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/TestEcho-Pack-SSL/ssl-cert/client.key"
@@ -0,0 +1,30 @@
+-----BEGIN RSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: AES-256-CBC,5F6ACADA6B6B1238FD34A0EC0C5EC2ED
+
+F0JylDtptlBaFpbCP9Qa2pRf5z8sBbUta6G+rBwuWn7GxU//Nub49/Mf0uRm3YTN
+PmCbIQKRyn/u92Yk6cJ9vLCiWe89pa+qlv+kF9PWmYo8Lt6dvtSr1TNAjelGvQjC
+HAi58BHoXXIRrZJQKjzFKGcwhWExCAOct5UDuHu64IvWg+LDccd+tTU/kdKEI9QY
+3POohP6etBBsFIoJFd23yxxNrvxK/v0as7EI/SeFzv7Mfn7haL4LxEsN+9XPN/Ap
+U0IxOT84dMgtIsvW2gvit+qNuaSvrocyEOr5uEfpoS58/yyb0VyNg94itkc6IK3X
+Yeokm2YOJk/4yMoZAeNMMDdR82csCzpTTHurMIZLgtr+SO1ChtreKm0XQB8QNyJ+
+CouAAHOBsxTPgVY/QS1TDrmEZv7cHOAvJp7BYvKroD/pi5Wu2IHAlIEXhdW3Evwn
+jyzUgMUHdXJIcngkkopYEoTPVEXsYX6aHvPJI+jDDKIfDM75SOOw1z7Divsb77I8
+n1jMYDUH4i2g2BixfwFRPxZ6NnRLtqM+TD4yecu3zsqvs0UIlrZFuVIl98Guqa1H
+tJKCxWEaJNb5YZg8GgdZFXYWXUN/HtFqWJelhGcjy48RjOy7LHJ30fkXV07b2s6M
+XcXj9g4jRRyAiZ/kmTqs+Oj6hn+iI4vdGumc2sG0+ZkUwDkj3zfn1N1+J/htVM1z
+Y2kHpKGZzQZ4eriy6CM++FrZ9CSNIPqh5AzayPuMxvEtd27vBnO8nKMwThbhGPtj
+fd7uPPzfG/W7Zo55lYL5opEzvOdULWm8+31ojitN7GSjsFW46HWoyYfTOlTAzP5+
+yPlUGxUyBhlqeXnQNTiLtRb22I2FF41HYH7GsYcxonHw3rKCcJedzL5BMg6Ic2xN
+ZxwXdj20rkugtcSAPxp3OGrmBiCX0wYiZaSgNg5zqI1SIhiWzkq64xoiIFlmxGEo
+Q/Vv7mpRmf1X0eTjiTYz4tYU6TPgtAqLLpmVNbozPnb5eGaMDbRlJnGJjqlXzPAw
+7qUhsb/KZ/k7yZLE+rseicwtAYA0th9A2tpc0CY3/EiL0w5E3zR0SPMinCJeO0rJ
+91njgDPxJ5lPXC04Dlgt/a1WK6D/yQ2kpIiNBUIlGZtr+nD9GqPYiGTqND53TL5f
+PJrr1PibL2l3fyhNDgNhgmY1CGpB6hNkqPOpit+XhGq6X0PlELcj7zYN3acW47jp
+KVm2lT1AXhzqemTWqPQL1+3s8ix0nGVNlmzsOFHqCkmr7FZb76hD5YTtGkOU/Kn3
+I5GqS5GHSCAVJnJWuFk2Y8qqg69mJREcoKThoYsuo8hw9JqZM34JIqqT029Nj35B
+xau4hSXkmHuUCGpwbr0yvsz3ikRfM6y0cT3T6oBiWgfYktpX//89YbyYGcQX7tK0
+aaHW2zvAfMyCWT0CxRen5GAyVeb+WFBdo+xD0HpQcRFtByiNNXmm4kJAoZujeHpe
+ZWcu3xkVcTqWMixAYHcDv3L0EXUnVeWplovRh1+OSm7YvdaLL3cctHoW3a8Kzdc1
+rtoGVI+f4xSEDheB5P4NX6UYbDLIGMPPuR0F5EliL+vmyJcEMuLY8KTPJ0uwf7Ns
+-----END RSA PRIVATE KEY-----
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/TestEcho-Pack-SSL/ssl-cert/client.pem" "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/TestEcho-Pack-SSL/ssl-cert/client.pem"
new file mode 100644
index 000000000..600dc8514
--- /dev/null
+++ "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/TestEcho-Pack-SSL/ssl-cert/client.pem"
@@ -0,0 +1,53 @@
+-----BEGIN RSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: AES-256-CBC,5F6ACADA6B6B1238FD34A0EC0C5EC2ED
+
+F0JylDtptlBaFpbCP9Qa2pRf5z8sBbUta6G+rBwuWn7GxU//Nub49/Mf0uRm3YTN
+PmCbIQKRyn/u92Yk6cJ9vLCiWe89pa+qlv+kF9PWmYo8Lt6dvtSr1TNAjelGvQjC
+HAi58BHoXXIRrZJQKjzFKGcwhWExCAOct5UDuHu64IvWg+LDccd+tTU/kdKEI9QY
+3POohP6etBBsFIoJFd23yxxNrvxK/v0as7EI/SeFzv7Mfn7haL4LxEsN+9XPN/Ap
+U0IxOT84dMgtIsvW2gvit+qNuaSvrocyEOr5uEfpoS58/yyb0VyNg94itkc6IK3X
+Yeokm2YOJk/4yMoZAeNMMDdR82csCzpTTHurMIZLgtr+SO1ChtreKm0XQB8QNyJ+
+CouAAHOBsxTPgVY/QS1TDrmEZv7cHOAvJp7BYvKroD/pi5Wu2IHAlIEXhdW3Evwn
+jyzUgMUHdXJIcngkkopYEoTPVEXsYX6aHvPJI+jDDKIfDM75SOOw1z7Divsb77I8
+n1jMYDUH4i2g2BixfwFRPxZ6NnRLtqM+TD4yecu3zsqvs0UIlrZFuVIl98Guqa1H
+tJKCxWEaJNb5YZg8GgdZFXYWXUN/HtFqWJelhGcjy48RjOy7LHJ30fkXV07b2s6M
+XcXj9g4jRRyAiZ/kmTqs+Oj6hn+iI4vdGumc2sG0+ZkUwDkj3zfn1N1+J/htVM1z
+Y2kHpKGZzQZ4eriy6CM++FrZ9CSNIPqh5AzayPuMxvEtd27vBnO8nKMwThbhGPtj
+fd7uPPzfG/W7Zo55lYL5opEzvOdULWm8+31ojitN7GSjsFW46HWoyYfTOlTAzP5+
+yPlUGxUyBhlqeXnQNTiLtRb22I2FF41HYH7GsYcxonHw3rKCcJedzL5BMg6Ic2xN
+ZxwXdj20rkugtcSAPxp3OGrmBiCX0wYiZaSgNg5zqI1SIhiWzkq64xoiIFlmxGEo
+Q/Vv7mpRmf1X0eTjiTYz4tYU6TPgtAqLLpmVNbozPnb5eGaMDbRlJnGJjqlXzPAw
+7qUhsb/KZ/k7yZLE+rseicwtAYA0th9A2tpc0CY3/EiL0w5E3zR0SPMinCJeO0rJ
+91njgDPxJ5lPXC04Dlgt/a1WK6D/yQ2kpIiNBUIlGZtr+nD9GqPYiGTqND53TL5f
+PJrr1PibL2l3fyhNDgNhgmY1CGpB6hNkqPOpit+XhGq6X0PlELcj7zYN3acW47jp
+KVm2lT1AXhzqemTWqPQL1+3s8ix0nGVNlmzsOFHqCkmr7FZb76hD5YTtGkOU/Kn3
+I5GqS5GHSCAVJnJWuFk2Y8qqg69mJREcoKThoYsuo8hw9JqZM34JIqqT029Nj35B
+xau4hSXkmHuUCGpwbr0yvsz3ikRfM6y0cT3T6oBiWgfYktpX//89YbyYGcQX7tK0
+aaHW2zvAfMyCWT0CxRen5GAyVeb+WFBdo+xD0HpQcRFtByiNNXmm4kJAoZujeHpe
+ZWcu3xkVcTqWMixAYHcDv3L0EXUnVeWplovRh1+OSm7YvdaLL3cctHoW3a8Kzdc1
+rtoGVI+f4xSEDheB5P4NX6UYbDLIGMPPuR0F5EliL+vmyJcEMuLY8KTPJ0uwf7Ns
+-----END RSA PRIVATE KEY-----
+-----BEGIN CERTIFICATE-----
+MIID6TCCAtGgAwIBAgIDAIFpMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNVBAYTAkNO
+MQswCQYDVQQIDAJHRDELMAkGA1UEBwwCR1oxDDAKBgNVBAoMA1NTVDEPMA0GA1UE
+CwwGSmVzc01BMRcwFQYDVQQDDA53d3cuamVzc21hLm9yZzEeMBwGCSqGSIb3DQEJ
+ARYPbGRjc2FhQDIxY24uY29tMB4XDTE2MDEwMTAwMDAwMFoXDTI2MDEwMTAwMDAw
+MFowcjELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQwwCgYDVQQKDANTU1QxDzAN
+BgNVBAsMBkplc3NNQTEXMBUGA1UEAwwOd3d3Lmplc3NtYS5vcmcxHjAcBgkqhkiG
+9w0BCQEWD2xkY3NhYUAyMWNuLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBAOFlDuWj95Nov+48W0ZaUp69GVB+U3orPuVm+fU5gXgl0tJbNbXS0GOM
+MspmMB0WxciTfj+t/WufpcHKzryHwrbqmMgrZiSyrp4ulA2mQuTPR32vgQ3/2eBs
+O884GmKOUbiaORgHGBoRAdOnoWarM7B/igS6WGqPetaUz12QAv2vzw9Qn0xxIBpr
+SVJumTo9HtOvuRj0BNXMRRYp+lfX2+96cftidyU1q+2Y2v3Fedzlo8Lr7m1ZkPcp
+ugQDz3R0kXvigDPAKhbTj6eAXJ/hcPOCGQ5RTIZJH4JnJ2jKw5lTjJ6y0rbt9Jq9
+NuIqz3GORHYWY4xBmbdTZy0BrbQOePECAwEAAaN7MHkwCQYDVR0TBAIwADAsBglg
+hkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0O
+BBYEFHYUdE6SbzXIWA8m3TwdgUJfAT6+MB8GA1UdIwQYMBaAFPx+7pAUh/GVC8xa
+OXmmZ8GMvpyIMA0GCSqGSIb3DQEBCwUAA4IBAQCZWaDrHbRHNNEaCVVFl5WCNqyd
+y1MpI2iErmfiCTNiG4v9wImTGWIWRHc3dZowniwSb43OuuhlpdWCxeal9nTL6iCP
+B486EMOsVWcfUZkPeK4cBgRXbHTmjxfmQEHHA6NTQdRc7LGq4tjhYs8zmxBVI2HO
+uIp0Qbj/Mb2j8r13IC91Z5Ontq0mQTIg0vvffZsqvcjs3Mmrxr2iX/EYpKNR2DP+
+9msWTZH734tZ2I7vORZOprpdAwELOyVLXkKIcP9qkRPAcFNk0Fl5peBQtBuP1ky5
+kUzWMQq2eoy73miPRnQ8ZjZ/3xTXhMKJ6bCn3tbWrjvc1TwpobfwyfsFH9sq
+-----END CERTIFICATE-----
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/TestEcho-Pack-SSL/ssl-cert/server.cer" "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/TestEcho-Pack-SSL/ssl-cert/server.cer"
new file mode 100644
index 000000000..0f8fe3b83
--- /dev/null
+++ "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/TestEcho-Pack-SSL/ssl-cert/server.cer"
@@ -0,0 +1,23 @@
+-----BEGIN CERTIFICATE-----
+MIID6TCCAtGgAwIBAgIDAIFoMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNVBAYTAkNO
+MQswCQYDVQQIDAJHRDELMAkGA1UEBwwCR1oxDDAKBgNVBAoMA1NTVDEPMA0GA1UE
+CwwGSmVzc01BMRcwFQYDVQQDDA53d3cuamVzc21hLm9yZzEeMBwGCSqGSIb3DQEJ
+ARYPbGRjc2FhQDIxY24uY29tMB4XDTE2MDEwMTAwMDAwMFoXDTI2MDEwMTAwMDAw
+MFowcjELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQwwCgYDVQQKDANTU1QxDzAN
+BgNVBAsMBkplc3NNQTEXMBUGA1UEAwwOd3d3Lmplc3NtYS5vcmcxHjAcBgkqhkiG
+9w0BCQEWD2xkY3NhYUAyMWNuLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBALEOPuYKEl/iN3ub/QNaaqo0Hynk62znTp5kXj0zQAqxLxwHU117xHBk
+0LCZux0LnDFl9JAlilvqfeaXRWmQd6hrvV+1mNpnIe2xfyNWwa37QDNjXB7mEg3V
+O/dN9KeVxq9RlH/dQJ7qZlYy4i7wznYMUlz38378wYoOvdAQBX1UrdjWA5T4q0Da
+cRRAV0fIp45hBarp6T1nhDEvttU8yud2lIEV9jWblkyGIhU4FisGOIRRGhnKzCAh
+CYSZ59mq8Wf4FawMyz/H4noHcWWJu4ID1oAE+VFGXKm78qjp/T71/myn5lcGquTx
+oSoJrx7og+529eaJwgeJd2JF7OQ5NysCAwEAAaN7MHkwCQYDVR0TBAIwADAsBglg
+hkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0O
+BBYEFO0CmyFtrGLrkNkkA62QPzSp8vgJMB8GA1UdIwQYMBaAFPx+7pAUh/GVC8xa
+OXmmZ8GMvpyIMA0GCSqGSIb3DQEBCwUAA4IBAQBT1JGXn7HMyNHZntM4kCp7kwN9
+HSpcbQxbWFtk+l8ANP9SqCIEd4xc4rAaUDDDMdD2S0wF9iio1MA1KC5OoJ5Dqw6C
+yTa08LRowlmnw+NNZC2xzaSRmzLGlPDHNauZ/G2ScdWsqR5v2+pKF7bYxAajRkk5
+oqRRDI6X7vHsvX/kqTn9Prk0sFmU0EU64az2iUe/MG9v1WY8eOV+tTEq29GuYYjJ
+E3H8vaeq1fTB0vYgT5xoCc36xVXju/3l17CE12n5of004u4eRi3/T0wbp9WgG2ns
+wjetaYeIAWS/AJQzIK22tztGAbAk6kTgsO5YLx2h6GLGpytDXWvgzr2PdEu1
+-----END CERTIFICATE-----
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/TestEcho-Pack-SSL/ssl-cert/server.crt" "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/TestEcho-Pack-SSL/ssl-cert/server.crt"
new file mode 100644
index 000000000..a6213ed40
--- /dev/null
+++ "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/TestEcho-Pack-SSL/ssl-cert/server.crt"
@@ -0,0 +1,82 @@
+Certificate:
+ Data:
+ Version: 3 (0x2)
+ Serial Number: 33128 (0x8168)
+ Signature Algorithm: sha256WithRSAEncryption
+ Issuer: C=CN, ST=GD, L=GZ, O=SST, OU=JessMA, CN=www.jessma.org/emailAddress=ldcsaa@21cn.com
+ Validity
+ Not Before: Jan 1 00:00:00 2016 GMT
+ Not After : Jan 1 00:00:00 2026 GMT
+ Subject: C=CN, ST=GD, O=SST, OU=JessMA, CN=www.jessma.org/emailAddress=ldcsaa@21cn.com
+ Subject Public Key Info:
+ Public Key Algorithm: rsaEncryption
+ Public-Key: (2048 bit)
+ Modulus:
+ 00:b1:0e:3e:e6:0a:12:5f:e2:37:7b:9b:fd:03:5a:
+ 6a:aa:34:1f:29:e4:eb:6c:e7:4e:9e:64:5e:3d:33:
+ 40:0a:b1:2f:1c:07:53:5d:7b:c4:70:64:d0:b0:99:
+ bb:1d:0b:9c:31:65:f4:90:25:8a:5b:ea:7d:e6:97:
+ 45:69:90:77:a8:6b:bd:5f:b5:98:da:67:21:ed:b1:
+ 7f:23:56:c1:ad:fb:40:33:63:5c:1e:e6:12:0d:d5:
+ 3b:f7:4d:f4:a7:95:c6:af:51:94:7f:dd:40:9e:ea:
+ 66:56:32:e2:2e:f0:ce:76:0c:52:5c:f7:f3:7e:fc:
+ c1:8a:0e:bd:d0:10:05:7d:54:ad:d8:d6:03:94:f8:
+ ab:40:da:71:14:40:57:47:c8:a7:8e:61:05:aa:e9:
+ e9:3d:67:84:31:2f:b6:d5:3c:ca:e7:76:94:81:15:
+ f6:35:9b:96:4c:86:22:15:38:16:2b:06:38:84:51:
+ 1a:19:ca:cc:20:21:09:84:99:e7:d9:aa:f1:67:f8:
+ 15:ac:0c:cb:3f:c7:e2:7a:07:71:65:89:bb:82:03:
+ d6:80:04:f9:51:46:5c:a9:bb:f2:a8:e9:fd:3e:f5:
+ fe:6c:a7:e6:57:06:aa:e4:f1:a1:2a:09:af:1e:e8:
+ 83:ee:76:f5:e6:89:c2:07:89:77:62:45:ec:e4:39:
+ 37:2b
+ Exponent: 65537 (0x10001)
+ X509v3 extensions:
+ X509v3 Basic Constraints:
+ CA:FALSE
+ Netscape Comment:
+ OpenSSL Generated Certificate
+ X509v3 Subject Key Identifier:
+ ED:02:9B:21:6D:AC:62:EB:90:D9:24:03:AD:90:3F:34:A9:F2:F8:09
+ X509v3 Authority Key Identifier:
+ keyid:FC:7E:EE:90:14:87:F1:95:0B:CC:5A:39:79:A6:67:C1:8C:BE:9C:88
+
+ Signature Algorithm: sha256WithRSAEncryption
+ 53:d4:91:97:9f:b1:cc:c8:d1:d9:9e:d3:38:90:2a:7b:93:03:
+ 7d:1d:2a:5c:6d:0c:5b:58:5b:64:fa:5f:00:34:ff:52:a8:22:
+ 04:77:8c:5c:e2:b0:1a:50:30:c3:31:d0:f6:4b:4c:05:f6:28:
+ a8:d4:c0:35:28:2e:4e:a0:9e:43:ab:0e:82:c9:36:b4:f0:b4:
+ 68:c2:59:a7:c3:e3:4d:64:2d:b1:cd:a4:91:9b:32:c6:94:f0:
+ c7:35:ab:99:fc:6d:92:71:d5:ac:a9:1e:6f:db:ea:4a:17:b6:
+ d8:c4:06:a3:46:49:39:a2:a4:51:0c:8e:97:ee:f1:ec:bd:7f:
+ e4:a9:39:fd:3e:b9:34:b0:59:94:d0:45:3a:e1:ac:f6:89:47:
+ bf:30:6f:6f:d5:66:3c:78:e5:7e:b5:31:2a:db:d1:ae:61:88:
+ c9:13:71:fc:bd:a7:aa:d5:f4:c1:d2:f6:20:4f:9c:68:09:cd:
+ fa:c5:55:e3:bb:fd:e5:d7:b0:84:d7:69:f9:a1:fd:34:e2:ee:
+ 1e:46:2d:ff:4f:4c:1b:a7:d5:a0:1b:69:ec:c2:37:ad:69:87:
+ 88:01:64:bf:00:94:33:20:ad:b6:b7:3b:46:01:b0:24:ea:44:
+ e0:b0:ee:58:2f:1d:a1:e8:62:c6:a7:2b:43:5d:6b:e0:ce:bd:
+ 8f:74:4b:b5
+-----BEGIN CERTIFICATE-----
+MIID6TCCAtGgAwIBAgIDAIFoMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNVBAYTAkNO
+MQswCQYDVQQIDAJHRDELMAkGA1UEBwwCR1oxDDAKBgNVBAoMA1NTVDEPMA0GA1UE
+CwwGSmVzc01BMRcwFQYDVQQDDA53d3cuamVzc21hLm9yZzEeMBwGCSqGSIb3DQEJ
+ARYPbGRjc2FhQDIxY24uY29tMB4XDTE2MDEwMTAwMDAwMFoXDTI2MDEwMTAwMDAw
+MFowcjELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQwwCgYDVQQKDANTU1QxDzAN
+BgNVBAsMBkplc3NNQTEXMBUGA1UEAwwOd3d3Lmplc3NtYS5vcmcxHjAcBgkqhkiG
+9w0BCQEWD2xkY3NhYUAyMWNuLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBALEOPuYKEl/iN3ub/QNaaqo0Hynk62znTp5kXj0zQAqxLxwHU117xHBk
+0LCZux0LnDFl9JAlilvqfeaXRWmQd6hrvV+1mNpnIe2xfyNWwa37QDNjXB7mEg3V
+O/dN9KeVxq9RlH/dQJ7qZlYy4i7wznYMUlz38378wYoOvdAQBX1UrdjWA5T4q0Da
+cRRAV0fIp45hBarp6T1nhDEvttU8yud2lIEV9jWblkyGIhU4FisGOIRRGhnKzCAh
+CYSZ59mq8Wf4FawMyz/H4noHcWWJu4ID1oAE+VFGXKm78qjp/T71/myn5lcGquTx
+oSoJrx7og+529eaJwgeJd2JF7OQ5NysCAwEAAaN7MHkwCQYDVR0TBAIwADAsBglg
+hkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0O
+BBYEFO0CmyFtrGLrkNkkA62QPzSp8vgJMB8GA1UdIwQYMBaAFPx+7pAUh/GVC8xa
+OXmmZ8GMvpyIMA0GCSqGSIb3DQEBCwUAA4IBAQBT1JGXn7HMyNHZntM4kCp7kwN9
+HSpcbQxbWFtk+l8ANP9SqCIEd4xc4rAaUDDDMdD2S0wF9iio1MA1KC5OoJ5Dqw6C
+yTa08LRowlmnw+NNZC2xzaSRmzLGlPDHNauZ/G2ScdWsqR5v2+pKF7bYxAajRkk5
+oqRRDI6X7vHsvX/kqTn9Prk0sFmU0EU64az2iUe/MG9v1WY8eOV+tTEq29GuYYjJ
+E3H8vaeq1fTB0vYgT5xoCc36xVXju/3l17CE12n5of004u4eRi3/T0wbp9WgG2ns
+wjetaYeIAWS/AJQzIK22tztGAbAk6kTgsO5YLx2h6GLGpytDXWvgzr2PdEu1
+-----END CERTIFICATE-----
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/TestEcho-Pack-SSL/ssl-cert/server.csr" "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/TestEcho-Pack-SSL/ssl-cert/server.csr"
new file mode 100644
index 000000000..0306648a3
--- /dev/null
+++ "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/TestEcho-Pack-SSL/ssl-cert/server.csr"
@@ -0,0 +1,18 @@
+-----BEGIN CERTIFICATE REQUEST-----
+MIIC8TCCAdkCAQAwfzELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQswCQYDVQQH
+DAJHWjEMMAoGA1UECgwDU1NUMQ8wDQYDVQQLDAZKZXNzTUExFzAVBgNVBAMMDnd3
+dy5qZXNzbWEub3JnMR4wHAYJKoZIhvcNAQkBFg9sZGNzYWFAMjFjbi5jb20wggEi
+MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCxDj7mChJf4jd7m/0DWmqqNB8p
+5Ots506eZF49M0AKsS8cB1Nde8RwZNCwmbsdC5wxZfSQJYpb6n3ml0VpkHeoa71f
+tZjaZyHtsX8jVsGt+0AzY1we5hIN1Tv3TfSnlcavUZR/3UCe6mZWMuIu8M52DFJc
+9/N+/MGKDr3QEAV9VK3Y1gOU+KtA2nEUQFdHyKeOYQWq6ek9Z4QxL7bVPMrndpSB
+FfY1m5ZMhiIVOBYrBjiEURoZyswgIQmEmefZqvFn+BWsDMs/x+J6B3FlibuCA9aA
+BPlRRlypu/Ko6f0+9f5sp+ZXBqrk8aEqCa8e6IPudvXmicIHiXdiRezkOTcrAgMB
+AAGgLTASBgkqhkiG9w0BCQIxBQwDU1NUMBcGCSqGSIb3DQEJBzEKDAhwcG1tQHNz
+dDANBgkqhkiG9w0BAQsFAAOCAQEAk9/S/9YUKjayh62Tagnk3hcJ5+YKJLHRtvv0
+Qu2HyPzpvyxORjQpnHaf+vpUj1W1amVQl7NSlNV181VzITtrySJyOdjvxTOvmITY
+stgCOXQiZeR6I9s2cZsh0yDcpiytlwnjWrFTgtIQ1dZgBRAvvJQIqoyrpgb22fva
+S3jilbFASColhEBeO0S8matO50qYwil7BabgQoUiu4QT6MhCXsJpNwi1qDD2rC/o
+Kffj63s4dRyJgqdbiYXMTDSfZvbx7UfnNCATBlniaoOTqbut1vmRGDYE+mkxly5X
+3KgcLvgpBoq0uUXNwsTNWo6CNthD8kY0fAkz34LG2aTKGy8Now==
+-----END CERTIFICATE REQUEST-----
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/TestEcho-Pack-SSL/ssl-cert/server.key" "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/TestEcho-Pack-SSL/ssl-cert/server.key"
new file mode 100644
index 000000000..2f36a1915
--- /dev/null
+++ "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/TestEcho-Pack-SSL/ssl-cert/server.key"
@@ -0,0 +1,30 @@
+-----BEGIN RSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: AES-256-CBC,107800C9B21513D8F642A394FAD9047E
+
+bmaTCBYAzKzpUrdaT6sb/dbH5o3JbFu2d8s1NfKhghYUG/RWgzx5H8QWSsh1Ll+8
+701HwSwauwbKaBWzWP5bj4mjw9hXcva8l1QWeuW+Q0GsE7uWNZGFQZbCxER/9jOu
+36KMlx0twcIEGs9PNwnY7d9oS/BMVpiUqhL8sPihMLCFK0fm6VGjMrfdIZJuZXEv
+BKt+c0UPkkPmivZjSm6iTPKI6VpGeyg0sM/uZr+mRj7IOAD6vsSQnCfUOq00Rm14
+ABrer8dCWJDKrx1iLq7tFojII+JcB7oBy+8KC/t0MlqmIP2jx93/MVW5lbZ3mj2v
+BanVQvklHTLe/WHjoaltqBEKN0sIzfyed6qWudKHUa8yjAr0PS4rsTbO0S4fFz+A
+KFWEs8fuXsanFHt5akWDTMiw1n4HaiioT4jjhWRRIKGEndztyGMklShYAdSTqsZO
+vzPO+xqLlg6wOgCGZ3Kl/c243XyLMCI+lJlzu3ccqzQJbNfPADXUcxSTqaEByWG3
+YIXttKY5WFBcNjf9B3c1qfJMt3nGY2QewnL+rNm/qpose/AsFS+2aqMeRw7fYh3R
+O+H+G+0gxrSK0E3WiewMIvUqFI6W300MWx6O7d87OkbfwMLpLPumsfLKswOKaAIF
+p0RxSABSe5ixqnErsoiYGNf3bln4tsQ+v5jYUY+Gn/9mVTPEYs6uwC78UW5Gj+Za
+lB3V8aRxQjWBerhLhf3iCmkkOVaG5JvVJDmvwo6iBRZ4NNzkAqOJm/UvfWoKN91b
+riHAWNayqvOfzaK6KYiJlOR9D779pK6xL+gZ0zo3rIA2yzs5MJAvJmaq6SQmQFl1
+Vzhnf3hIGJFtJYQJhlr36pkPgG9jVdJPhZisY9EsIAHvDbbLlBNexSmZc2RZmsVL
+VG6WqOm85DzuZxGULK/CnXCLpBMKWf9y5YPJrLkuwQILrr2btnAivPfUU80S3E0c
+VslBodCkSGVx3iQoAVJv2+6ZNMRNLVzpLnlaVtHl/gvw+InJlXmzBlZQFKOCaOny
+sz67qKmK1KWui2G3AzuvTEL9O++FVO+irpSNSLozxif/erLJl7R60pBkrWwd6jGB
+8qQv7ni+xIeXDBLSu26zPunLR/2PhrrCv49KmqNmF7sSNx6xmcc3CfgEy+5+Tm97
+KPE4JlaH/ZW61TlzXojbZMaiJltkFkpagFgm2bXrN1nMk2d6R+Yfe78lSvPKoB8k
+1m7LY1lNXFZJh2hxQRhdV9oTokFahUSitQCg1S3eASuE2jFRRL4jrh4LcBWUHZnJ
+OOAwBDOF4RfGyfiDs0IlrnLvK3a2KorlHfvUyj+cwkRmgI8sWgkJuNpz1mKDn5UZ
+yGn2JczHY0CiInRGgwMnS1Z/WpJZYGNh7pP7Hm1RnzVslkWSJGaKJv9jDNUCyy8R
+L+nwUSd6m6r8YWcs3zdBYsDHGOO5MgAU5Q8yuLbEgaK5NJSJgGkm+ya5oB88Y6T0
+JcL/u5xKw4kJiKgiLr3zrWe5qV6+lpH7fGKy7fucJWltDkfQSD3Dp0b64TW4FuQq
+VQhDR+KykLK6QxM2x3/maMfG578Ku1F6g4RboDR/6uCFu6hQuCoNYBk/QB0XpY13
+-----END RSA PRIVATE KEY-----
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/TestEcho-Pack-SSL/ssl-cert/server.pem" "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/TestEcho-Pack-SSL/ssl-cert/server.pem"
new file mode 100644
index 000000000..1d6040ca9
--- /dev/null
+++ "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/TestEcho-Pack-SSL/ssl-cert/server.pem"
@@ -0,0 +1,53 @@
+-----BEGIN RSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: AES-256-CBC,107800C9B21513D8F642A394FAD9047E
+
+bmaTCBYAzKzpUrdaT6sb/dbH5o3JbFu2d8s1NfKhghYUG/RWgzx5H8QWSsh1Ll+8
+701HwSwauwbKaBWzWP5bj4mjw9hXcva8l1QWeuW+Q0GsE7uWNZGFQZbCxER/9jOu
+36KMlx0twcIEGs9PNwnY7d9oS/BMVpiUqhL8sPihMLCFK0fm6VGjMrfdIZJuZXEv
+BKt+c0UPkkPmivZjSm6iTPKI6VpGeyg0sM/uZr+mRj7IOAD6vsSQnCfUOq00Rm14
+ABrer8dCWJDKrx1iLq7tFojII+JcB7oBy+8KC/t0MlqmIP2jx93/MVW5lbZ3mj2v
+BanVQvklHTLe/WHjoaltqBEKN0sIzfyed6qWudKHUa8yjAr0PS4rsTbO0S4fFz+A
+KFWEs8fuXsanFHt5akWDTMiw1n4HaiioT4jjhWRRIKGEndztyGMklShYAdSTqsZO
+vzPO+xqLlg6wOgCGZ3Kl/c243XyLMCI+lJlzu3ccqzQJbNfPADXUcxSTqaEByWG3
+YIXttKY5WFBcNjf9B3c1qfJMt3nGY2QewnL+rNm/qpose/AsFS+2aqMeRw7fYh3R
+O+H+G+0gxrSK0E3WiewMIvUqFI6W300MWx6O7d87OkbfwMLpLPumsfLKswOKaAIF
+p0RxSABSe5ixqnErsoiYGNf3bln4tsQ+v5jYUY+Gn/9mVTPEYs6uwC78UW5Gj+Za
+lB3V8aRxQjWBerhLhf3iCmkkOVaG5JvVJDmvwo6iBRZ4NNzkAqOJm/UvfWoKN91b
+riHAWNayqvOfzaK6KYiJlOR9D779pK6xL+gZ0zo3rIA2yzs5MJAvJmaq6SQmQFl1
+Vzhnf3hIGJFtJYQJhlr36pkPgG9jVdJPhZisY9EsIAHvDbbLlBNexSmZc2RZmsVL
+VG6WqOm85DzuZxGULK/CnXCLpBMKWf9y5YPJrLkuwQILrr2btnAivPfUU80S3E0c
+VslBodCkSGVx3iQoAVJv2+6ZNMRNLVzpLnlaVtHl/gvw+InJlXmzBlZQFKOCaOny
+sz67qKmK1KWui2G3AzuvTEL9O++FVO+irpSNSLozxif/erLJl7R60pBkrWwd6jGB
+8qQv7ni+xIeXDBLSu26zPunLR/2PhrrCv49KmqNmF7sSNx6xmcc3CfgEy+5+Tm97
+KPE4JlaH/ZW61TlzXojbZMaiJltkFkpagFgm2bXrN1nMk2d6R+Yfe78lSvPKoB8k
+1m7LY1lNXFZJh2hxQRhdV9oTokFahUSitQCg1S3eASuE2jFRRL4jrh4LcBWUHZnJ
+OOAwBDOF4RfGyfiDs0IlrnLvK3a2KorlHfvUyj+cwkRmgI8sWgkJuNpz1mKDn5UZ
+yGn2JczHY0CiInRGgwMnS1Z/WpJZYGNh7pP7Hm1RnzVslkWSJGaKJv9jDNUCyy8R
+L+nwUSd6m6r8YWcs3zdBYsDHGOO5MgAU5Q8yuLbEgaK5NJSJgGkm+ya5oB88Y6T0
+JcL/u5xKw4kJiKgiLr3zrWe5qV6+lpH7fGKy7fucJWltDkfQSD3Dp0b64TW4FuQq
+VQhDR+KykLK6QxM2x3/maMfG578Ku1F6g4RboDR/6uCFu6hQuCoNYBk/QB0XpY13
+-----END RSA PRIVATE KEY-----
+-----BEGIN CERTIFICATE-----
+MIID6TCCAtGgAwIBAgIDAIFoMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNVBAYTAkNO
+MQswCQYDVQQIDAJHRDELMAkGA1UEBwwCR1oxDDAKBgNVBAoMA1NTVDEPMA0GA1UE
+CwwGSmVzc01BMRcwFQYDVQQDDA53d3cuamVzc21hLm9yZzEeMBwGCSqGSIb3DQEJ
+ARYPbGRjc2FhQDIxY24uY29tMB4XDTE2MDEwMTAwMDAwMFoXDTI2MDEwMTAwMDAw
+MFowcjELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQwwCgYDVQQKDANTU1QxDzAN
+BgNVBAsMBkplc3NNQTEXMBUGA1UEAwwOd3d3Lmplc3NtYS5vcmcxHjAcBgkqhkiG
+9w0BCQEWD2xkY3NhYUAyMWNuLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBALEOPuYKEl/iN3ub/QNaaqo0Hynk62znTp5kXj0zQAqxLxwHU117xHBk
+0LCZux0LnDFl9JAlilvqfeaXRWmQd6hrvV+1mNpnIe2xfyNWwa37QDNjXB7mEg3V
+O/dN9KeVxq9RlH/dQJ7qZlYy4i7wznYMUlz38378wYoOvdAQBX1UrdjWA5T4q0Da
+cRRAV0fIp45hBarp6T1nhDEvttU8yud2lIEV9jWblkyGIhU4FisGOIRRGhnKzCAh
+CYSZ59mq8Wf4FawMyz/H4noHcWWJu4ID1oAE+VFGXKm78qjp/T71/myn5lcGquTx
+oSoJrx7og+529eaJwgeJd2JF7OQ5NysCAwEAAaN7MHkwCQYDVR0TBAIwADAsBglg
+hkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0O
+BBYEFO0CmyFtrGLrkNkkA62QPzSp8vgJMB8GA1UdIwQYMBaAFPx+7pAUh/GVC8xa
+OXmmZ8GMvpyIMA0GCSqGSIb3DQEBCwUAA4IBAQBT1JGXn7HMyNHZntM4kCp7kwN9
+HSpcbQxbWFtk+l8ANP9SqCIEd4xc4rAaUDDDMdD2S0wF9iio1MA1KC5OoJ5Dqw6C
+yTa08LRowlmnw+NNZC2xzaSRmzLGlPDHNauZ/G2ScdWsqR5v2+pKF7bYxAajRkk5
+oqRRDI6X7vHsvX/kqTn9Prk0sFmU0EU64az2iUe/MG9v1WY8eOV+tTEq29GuYYjJ
+E3H8vaeq1fTB0vYgT5xoCc36xVXju/3l17CE12n5of004u4eRi3/T0wbp9WgG2ns
+wjetaYeIAWS/AJQzIK22tztGAbAk6kTgsO5YLx2h6GLGpytDXWvgzr2PdEu1
+-----END CERTIFICATE-----
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/TestEcho-Pack/HPSocket.ec" "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/TestEcho-Pack/HPSocket.ec"
new file mode 100644
index 000000000..d839e3d18
Binary files /dev/null and "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/TestEcho-Pack/HPSocket.ec" differ
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/TestEcho-Pack/HPSocket4C-SSL.dll" "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/TestEcho-Pack/HPSocket4C-SSL.dll"
new file mode 100644
index 000000000..75e525a4c
Binary files /dev/null and "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/TestEcho-Pack/HPSocket4C-SSL.dll" differ
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/TestEcho-Pack/TestEcho-PackClient.e" "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/TestEcho-Pack/TestEcho-PackClient.e"
new file mode 100644
index 000000000..84c9a1a35
Binary files /dev/null and "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/TestEcho-Pack/TestEcho-PackClient.e" differ
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/TestEcho-Pack/TestEcho-PackServer.e" "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/TestEcho-Pack/TestEcho-PackServer.e"
new file mode 100644
index 000000000..406d221d1
Binary files /dev/null and "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/TestEcho-Pack/TestEcho-PackServer.e" differ
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pack-SSL/FileTransfer-PackClient.e" "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pack-SSL/FileTransfer-PackClient.e"
new file mode 100644
index 000000000..de1742133
Binary files /dev/null and "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pack-SSL/FileTransfer-PackClient.e" differ
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pack-SSL/FileTransfer-PackServer.e" "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pack-SSL/FileTransfer-PackServer.e"
new file mode 100644
index 000000000..1bab66308
Binary files /dev/null and "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pack-SSL/FileTransfer-PackServer.e" differ
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pack-SSL/HPSocket.ec" "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pack-SSL/HPSocket.ec"
new file mode 100644
index 000000000..d839e3d18
Binary files /dev/null and "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pack-SSL/HPSocket.ec" differ
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pack-SSL/HPSocket4C-SSL.dll" "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pack-SSL/HPSocket4C-SSL.dll"
new file mode 100644
index 000000000..75e525a4c
Binary files /dev/null and "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pack-SSL/HPSocket4C-SSL.dll" differ
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pack-SSL/ssl-cert/ca.crt" "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pack-SSL/ssl-cert/ca.crt"
new file mode 100644
index 000000000..c31217076
--- /dev/null
+++ "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pack-SSL/ssl-cert/ca.crt"
@@ -0,0 +1,23 @@
+-----BEGIN CERTIFICATE-----
+MIID0TCCArmgAwIBAgIJALFGobpzN5MdMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNV
+BAYTAkNOMQswCQYDVQQIDAJHRDELMAkGA1UEBwwCR1oxDDAKBgNVBAoMA1NTVDEP
+MA0GA1UECwwGSmVzc01BMRcwFQYDVQQDDA53d3cuamVzc21hLm9yZzEeMBwGCSqG
+SIb3DQEJARYPbGRjc2FhQDIxY24uY29tMB4XDTE2MDQwMTE1MDIwMFoXDTI0MDYx
+ODE1MDIwMFowfzELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQswCQYDVQQHDAJH
+WjEMMAoGA1UECgwDU1NUMQ8wDQYDVQQLDAZKZXNzTUExFzAVBgNVBAMMDnd3dy5q
+ZXNzbWEub3JnMR4wHAYJKoZIhvcNAQkBFg9sZGNzYWFAMjFjbi5jb20wggEiMA0G
+CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDht6llexLtFkV8ijjdJGaHXXQysWOJ
+UM/YQFYP52nviurJSpMbWSXnuaDlfidk76B66Np5mlnN5BiHqbBj34GCVKz5VQtx
+3kMY1y30YWyiHAEZiV3PLQc8/A9MnJM/q/mHaulmTuJi8A85TWadqUNXgiaIMkqz
+bKaauR1/GCxXuEVroqtyR99RCWhfakTz04KfIbt83QR0imWC6uhmvD/DXJ03XFzd
+XkK5aNp+ef1sBQgFKjeXV6EMuq+UgEDPXlCDUJAqsZt6W/ohrCAHWQYZ/RSvvaMJ
+O7aWROGAC/lh6ATOIbFlGVppw6zUGdIDkB5FVF1MC7CyDndncFrY+OJzAgMBAAGj
+UDBOMB0GA1UdDgQWBBT8fu6QFIfxlQvMWjl5pmfBjL6ciDAfBgNVHSMEGDAWgBT8
+fu6QFIfxlQvMWjl5pmfBjL6ciDAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUA
+A4IBAQDI+f6GMBJxRJNKrgbUYLD1U6LWEQJQ50g2NxGy0j+TL6oypoo/kyME3tOR
+EmXEDzytGcSaQ78xYcg97UQd8OhXYQr0qwZ/JLarmhCVK/bfbGTIn4Mk4ZgDqcOU
+46jsJeEZwUSrrq7svKO5d7+wV0VGPO+Ww4yzRCPwm2puXFY1+KpTxYX31+wwMB8p
+7GuJEDgV08qzLfcBAfSFFYiOHL3tJ+XNKFNRqigjeYrWuAMphOhpYfYnU0d0upe8
+wWx9Unm8qSkc7hiS/vvs1v7Pv1sqMFRBoaKOTqZ7Wz/5AySGPQjeMV/atmArDEkx
+z58OEgTzg1J/Keztxwj7I2KnYHyH
+-----END CERTIFICATE-----
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pack-SSL/ssl-cert/ca.key" "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pack-SSL/ssl-cert/ca.key"
new file mode 100644
index 000000000..e0a85b46b
--- /dev/null
+++ "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pack-SSL/ssl-cert/ca.key"
@@ -0,0 +1,30 @@
+-----BEGIN RSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: AES-256-CBC,ABBC3A36C737CF487C5C36CA5ACA4A5D
+
+zv/FdREV9tlLsPPzIrm5EIbGaTiReEz+9jlgplyVLkAZe7MNF868t5g93Ve46ehy
+XzBf2QtBE12xAgKmjTvK7RnO1Rih5LqY7VTrEhIFSkYdDTqTV8I8cWig7Hmg+qNw
+EymXdrCYjBQB1U3jmOxBqQrDw75KYJFq5vN+vAmnreA9m9NdOAWOQ+n5K0sJLQpk
+6F9a4pzym7v4mMmP67Ddf/qHVcbWPLOo3QkBUItGJYPpBL1ODu+rd/3f9EyJspVw
+3dQNAaT0OzA0RZ9Pew7+ZxzgFFDHA4sh6r4fcfpEfXTr1QQUg0F4B66+OTE1duoE
+T+PIwYWp4yyuYgUA7txpDsGaENbvfnsP81oLMIvU0TicKJoYxr2Zxa+lK2MWCa5D
+L9VbRMQM0bXTF1qCgjnPmFhxhdYgidxPEZPahyMmFU3LB9W5ils/DK+AXW1gC4ZY
+O8hpUGaZ7Lj5H6suMSYIX7CAEi0NXXdRMXw7bOBecRFy+fhgHmMF1fGgBG2Fd1lP
+wgHlydLQDZoUpTnZrifDzlH8oDqEbCCOSUYc82fVKeNNORePHLGuV8utz0UTR9Rq
+Ko9ZYEN7j+JsPBdG3CnrjDILrZA3peKPhEifrRL2mjHdMdwFsE/fetyvUssgh9VY
+o2Bi25khVu+2TwBMEO1nlS6U+TWOU8u4qxGtSj5xN1Fdplb098VXY1T08+NvDJUN
+7S52KPAyeXY6V2/Q7IyDpsnmM9SWiLrvf2C/niEHRLfWoNP5bt6r/e8RIjFPc0KV
+E8KvANWXSArM359F4+ucvMzrYEtkgnldf6UIN007qqr2eEREeVwxVWIpJZJauVDV
+1uOvTQCDU7O4cIV/FiK1+oVt9MQYAHnnG3revFzqcZtH2x3qWNEGwiyfDZh7qx7c
+8LFYiFLIQX2HGYcEpcKAbj65sJLecz7VtNQ2GMoXHh09BQ5VnleVInmAfAv6r01k
+OdTJ3CNf8YcW/PAKTGrgmsncGp8EvHbmDC4r1ecxxp3Mu7M7T9XfQ41nk1nCLmOp
++3B9ecnJx6bSkg6wrrofl2MifCyl6AvxyKUeAt+dNV319QL/imgV3VQiD+Gu5i+c
+1tveD4cKNm01izEZz6xPBZ9sH4G8TFYFOx572q2DdSZe2MXy/h6QfKUADPOkvPyr
+0dqNbPQKJDL7YJOG39k0L/GOe6uH+JxXlvYLtqSLznLTQkm9kkWVOB54gV+v2NBp
+831BnDdlwv9AnScDY7o4fG1qAaWIZyMWntmORfpHkOMRbrBqK5TeczpoV2jr1iGl
+h1oIbbANJzaXEydnWcnUPujopP7oYG2KGhDbzhhR/PGlvLknIoAA55BqL23dzHct
+1/xaaHqxcjGNymgSPPD9Kjx0qQZovOb5WKDyg5+D5GIfRqq+c1SQeZw+5jcoMBIF
+TSdfiwAxhLkT8SQf72C6tAYsxkTubbcU1gc0Vkdd5Q2FWc6YgCb6XVPYC5jHATwV
+V4v5JVqGLRFi056heSpA0EFWp/AuSoaYaQRwGfBnUysaocDlEE4kTNzzJIwgbWrt
+iTL5qB7LIexqUVWVjmUmx6S0+f6qVYovDjFHVg61Xb6zdL04LmU0VrMCwgUBEt2j
+-----END RSA PRIVATE KEY-----
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pack-SSL/ssl-cert/ca.pem" "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pack-SSL/ssl-cert/ca.pem"
new file mode 100644
index 000000000..57f3b363b
--- /dev/null
+++ "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pack-SSL/ssl-cert/ca.pem"
@@ -0,0 +1,53 @@
+-----BEGIN RSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: AES-256-CBC,ABBC3A36C737CF487C5C36CA5ACA4A5D
+
+zv/FdREV9tlLsPPzIrm5EIbGaTiReEz+9jlgplyVLkAZe7MNF868t5g93Ve46ehy
+XzBf2QtBE12xAgKmjTvK7RnO1Rih5LqY7VTrEhIFSkYdDTqTV8I8cWig7Hmg+qNw
+EymXdrCYjBQB1U3jmOxBqQrDw75KYJFq5vN+vAmnreA9m9NdOAWOQ+n5K0sJLQpk
+6F9a4pzym7v4mMmP67Ddf/qHVcbWPLOo3QkBUItGJYPpBL1ODu+rd/3f9EyJspVw
+3dQNAaT0OzA0RZ9Pew7+ZxzgFFDHA4sh6r4fcfpEfXTr1QQUg0F4B66+OTE1duoE
+T+PIwYWp4yyuYgUA7txpDsGaENbvfnsP81oLMIvU0TicKJoYxr2Zxa+lK2MWCa5D
+L9VbRMQM0bXTF1qCgjnPmFhxhdYgidxPEZPahyMmFU3LB9W5ils/DK+AXW1gC4ZY
+O8hpUGaZ7Lj5H6suMSYIX7CAEi0NXXdRMXw7bOBecRFy+fhgHmMF1fGgBG2Fd1lP
+wgHlydLQDZoUpTnZrifDzlH8oDqEbCCOSUYc82fVKeNNORePHLGuV8utz0UTR9Rq
+Ko9ZYEN7j+JsPBdG3CnrjDILrZA3peKPhEifrRL2mjHdMdwFsE/fetyvUssgh9VY
+o2Bi25khVu+2TwBMEO1nlS6U+TWOU8u4qxGtSj5xN1Fdplb098VXY1T08+NvDJUN
+7S52KPAyeXY6V2/Q7IyDpsnmM9SWiLrvf2C/niEHRLfWoNP5bt6r/e8RIjFPc0KV
+E8KvANWXSArM359F4+ucvMzrYEtkgnldf6UIN007qqr2eEREeVwxVWIpJZJauVDV
+1uOvTQCDU7O4cIV/FiK1+oVt9MQYAHnnG3revFzqcZtH2x3qWNEGwiyfDZh7qx7c
+8LFYiFLIQX2HGYcEpcKAbj65sJLecz7VtNQ2GMoXHh09BQ5VnleVInmAfAv6r01k
+OdTJ3CNf8YcW/PAKTGrgmsncGp8EvHbmDC4r1ecxxp3Mu7M7T9XfQ41nk1nCLmOp
++3B9ecnJx6bSkg6wrrofl2MifCyl6AvxyKUeAt+dNV319QL/imgV3VQiD+Gu5i+c
+1tveD4cKNm01izEZz6xPBZ9sH4G8TFYFOx572q2DdSZe2MXy/h6QfKUADPOkvPyr
+0dqNbPQKJDL7YJOG39k0L/GOe6uH+JxXlvYLtqSLznLTQkm9kkWVOB54gV+v2NBp
+831BnDdlwv9AnScDY7o4fG1qAaWIZyMWntmORfpHkOMRbrBqK5TeczpoV2jr1iGl
+h1oIbbANJzaXEydnWcnUPujopP7oYG2KGhDbzhhR/PGlvLknIoAA55BqL23dzHct
+1/xaaHqxcjGNymgSPPD9Kjx0qQZovOb5WKDyg5+D5GIfRqq+c1SQeZw+5jcoMBIF
+TSdfiwAxhLkT8SQf72C6tAYsxkTubbcU1gc0Vkdd5Q2FWc6YgCb6XVPYC5jHATwV
+V4v5JVqGLRFi056heSpA0EFWp/AuSoaYaQRwGfBnUysaocDlEE4kTNzzJIwgbWrt
+iTL5qB7LIexqUVWVjmUmx6S0+f6qVYovDjFHVg61Xb6zdL04LmU0VrMCwgUBEt2j
+-----END RSA PRIVATE KEY-----
+-----BEGIN CERTIFICATE-----
+MIID0TCCArmgAwIBAgIJALFGobpzN5MdMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNV
+BAYTAkNOMQswCQYDVQQIDAJHRDELMAkGA1UEBwwCR1oxDDAKBgNVBAoMA1NTVDEP
+MA0GA1UECwwGSmVzc01BMRcwFQYDVQQDDA53d3cuamVzc21hLm9yZzEeMBwGCSqG
+SIb3DQEJARYPbGRjc2FhQDIxY24uY29tMB4XDTE2MDQwMTE1MDIwMFoXDTI0MDYx
+ODE1MDIwMFowfzELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQswCQYDVQQHDAJH
+WjEMMAoGA1UECgwDU1NUMQ8wDQYDVQQLDAZKZXNzTUExFzAVBgNVBAMMDnd3dy5q
+ZXNzbWEub3JnMR4wHAYJKoZIhvcNAQkBFg9sZGNzYWFAMjFjbi5jb20wggEiMA0G
+CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDht6llexLtFkV8ijjdJGaHXXQysWOJ
+UM/YQFYP52nviurJSpMbWSXnuaDlfidk76B66Np5mlnN5BiHqbBj34GCVKz5VQtx
+3kMY1y30YWyiHAEZiV3PLQc8/A9MnJM/q/mHaulmTuJi8A85TWadqUNXgiaIMkqz
+bKaauR1/GCxXuEVroqtyR99RCWhfakTz04KfIbt83QR0imWC6uhmvD/DXJ03XFzd
+XkK5aNp+ef1sBQgFKjeXV6EMuq+UgEDPXlCDUJAqsZt6W/ohrCAHWQYZ/RSvvaMJ
+O7aWROGAC/lh6ATOIbFlGVppw6zUGdIDkB5FVF1MC7CyDndncFrY+OJzAgMBAAGj
+UDBOMB0GA1UdDgQWBBT8fu6QFIfxlQvMWjl5pmfBjL6ciDAfBgNVHSMEGDAWgBT8
+fu6QFIfxlQvMWjl5pmfBjL6ciDAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUA
+A4IBAQDI+f6GMBJxRJNKrgbUYLD1U6LWEQJQ50g2NxGy0j+TL6oypoo/kyME3tOR
+EmXEDzytGcSaQ78xYcg97UQd8OhXYQr0qwZ/JLarmhCVK/bfbGTIn4Mk4ZgDqcOU
+46jsJeEZwUSrrq7svKO5d7+wV0VGPO+Ww4yzRCPwm2puXFY1+KpTxYX31+wwMB8p
+7GuJEDgV08qzLfcBAfSFFYiOHL3tJ+XNKFNRqigjeYrWuAMphOhpYfYnU0d0upe8
+wWx9Unm8qSkc7hiS/vvs1v7Pv1sqMFRBoaKOTqZ7Wz/5AySGPQjeMV/atmArDEkx
+z58OEgTzg1J/Keztxwj7I2KnYHyH
+-----END CERTIFICATE-----
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pack-SSL/ssl-cert/client.cer" "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pack-SSL/ssl-cert/client.cer"
new file mode 100644
index 000000000..33a266a82
--- /dev/null
+++ "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pack-SSL/ssl-cert/client.cer"
@@ -0,0 +1,23 @@
+-----BEGIN CERTIFICATE-----
+MIID6TCCAtGgAwIBAgIDAIFpMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNVBAYTAkNO
+MQswCQYDVQQIDAJHRDELMAkGA1UEBwwCR1oxDDAKBgNVBAoMA1NTVDEPMA0GA1UE
+CwwGSmVzc01BMRcwFQYDVQQDDA53d3cuamVzc21hLm9yZzEeMBwGCSqGSIb3DQEJ
+ARYPbGRjc2FhQDIxY24uY29tMB4XDTE2MDEwMTAwMDAwMFoXDTI2MDEwMTAwMDAw
+MFowcjELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQwwCgYDVQQKDANTU1QxDzAN
+BgNVBAsMBkplc3NNQTEXMBUGA1UEAwwOd3d3Lmplc3NtYS5vcmcxHjAcBgkqhkiG
+9w0BCQEWD2xkY3NhYUAyMWNuLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBAOFlDuWj95Nov+48W0ZaUp69GVB+U3orPuVm+fU5gXgl0tJbNbXS0GOM
+MspmMB0WxciTfj+t/WufpcHKzryHwrbqmMgrZiSyrp4ulA2mQuTPR32vgQ3/2eBs
+O884GmKOUbiaORgHGBoRAdOnoWarM7B/igS6WGqPetaUz12QAv2vzw9Qn0xxIBpr
+SVJumTo9HtOvuRj0BNXMRRYp+lfX2+96cftidyU1q+2Y2v3Fedzlo8Lr7m1ZkPcp
+ugQDz3R0kXvigDPAKhbTj6eAXJ/hcPOCGQ5RTIZJH4JnJ2jKw5lTjJ6y0rbt9Jq9
+NuIqz3GORHYWY4xBmbdTZy0BrbQOePECAwEAAaN7MHkwCQYDVR0TBAIwADAsBglg
+hkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0O
+BBYEFHYUdE6SbzXIWA8m3TwdgUJfAT6+MB8GA1UdIwQYMBaAFPx+7pAUh/GVC8xa
+OXmmZ8GMvpyIMA0GCSqGSIb3DQEBCwUAA4IBAQCZWaDrHbRHNNEaCVVFl5WCNqyd
+y1MpI2iErmfiCTNiG4v9wImTGWIWRHc3dZowniwSb43OuuhlpdWCxeal9nTL6iCP
+B486EMOsVWcfUZkPeK4cBgRXbHTmjxfmQEHHA6NTQdRc7LGq4tjhYs8zmxBVI2HO
+uIp0Qbj/Mb2j8r13IC91Z5Ontq0mQTIg0vvffZsqvcjs3Mmrxr2iX/EYpKNR2DP+
+9msWTZH734tZ2I7vORZOprpdAwELOyVLXkKIcP9qkRPAcFNk0Fl5peBQtBuP1ky5
+kUzWMQq2eoy73miPRnQ8ZjZ/3xTXhMKJ6bCn3tbWrjvc1TwpobfwyfsFH9sq
+-----END CERTIFICATE-----
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pack-SSL/ssl-cert/client.crt" "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pack-SSL/ssl-cert/client.crt"
new file mode 100644
index 000000000..a87d4f3f7
--- /dev/null
+++ "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pack-SSL/ssl-cert/client.crt"
@@ -0,0 +1,82 @@
+Certificate:
+ Data:
+ Version: 3 (0x2)
+ Serial Number: 33129 (0x8169)
+ Signature Algorithm: sha256WithRSAEncryption
+ Issuer: C=CN, ST=GD, L=GZ, O=SST, OU=JessMA, CN=www.jessma.org/emailAddress=ldcsaa@21cn.com
+ Validity
+ Not Before: Jan 1 00:00:00 2016 GMT
+ Not After : Jan 1 00:00:00 2026 GMT
+ Subject: C=CN, ST=GD, O=SST, OU=JessMA, CN=www.jessma.org/emailAddress=ldcsaa@21cn.com
+ Subject Public Key Info:
+ Public Key Algorithm: rsaEncryption
+ Public-Key: (2048 bit)
+ Modulus:
+ 00:e1:65:0e:e5:a3:f7:93:68:bf:ee:3c:5b:46:5a:
+ 52:9e:bd:19:50:7e:53:7a:2b:3e:e5:66:f9:f5:39:
+ 81:78:25:d2:d2:5b:35:b5:d2:d0:63:8c:32:ca:66:
+ 30:1d:16:c5:c8:93:7e:3f:ad:fd:6b:9f:a5:c1:ca:
+ ce:bc:87:c2:b6:ea:98:c8:2b:66:24:b2:ae:9e:2e:
+ 94:0d:a6:42:e4:cf:47:7d:af:81:0d:ff:d9:e0:6c:
+ 3b:cf:38:1a:62:8e:51:b8:9a:39:18:07:18:1a:11:
+ 01:d3:a7:a1:66:ab:33:b0:7f:8a:04:ba:58:6a:8f:
+ 7a:d6:94:cf:5d:90:02:fd:af:cf:0f:50:9f:4c:71:
+ 20:1a:6b:49:52:6e:99:3a:3d:1e:d3:af:b9:18:f4:
+ 04:d5:cc:45:16:29:fa:57:d7:db:ef:7a:71:fb:62:
+ 77:25:35:ab:ed:98:da:fd:c5:79:dc:e5:a3:c2:eb:
+ ee:6d:59:90:f7:29:ba:04:03:cf:74:74:91:7b:e2:
+ 80:33:c0:2a:16:d3:8f:a7:80:5c:9f:e1:70:f3:82:
+ 19:0e:51:4c:86:49:1f:82:67:27:68:ca:c3:99:53:
+ 8c:9e:b2:d2:b6:ed:f4:9a:bd:36:e2:2a:cf:71:8e:
+ 44:76:16:63:8c:41:99:b7:53:67:2d:01:ad:b4:0e:
+ 78:f1
+ Exponent: 65537 (0x10001)
+ X509v3 extensions:
+ X509v3 Basic Constraints:
+ CA:FALSE
+ Netscape Comment:
+ OpenSSL Generated Certificate
+ X509v3 Subject Key Identifier:
+ 76:14:74:4E:92:6F:35:C8:58:0F:26:DD:3C:1D:81:42:5F:01:3E:BE
+ X509v3 Authority Key Identifier:
+ keyid:FC:7E:EE:90:14:87:F1:95:0B:CC:5A:39:79:A6:67:C1:8C:BE:9C:88
+
+ Signature Algorithm: sha256WithRSAEncryption
+ 99:59:a0:eb:1d:b4:47:34:d1:1a:09:55:45:97:95:82:36:ac:
+ 9d:cb:53:29:23:68:84:ae:67:e2:09:33:62:1b:8b:fd:c0:89:
+ 93:19:62:16:44:77:37:75:9a:30:9e:2c:12:6f:8d:ce:ba:e8:
+ 65:a5:d5:82:c5:e6:a5:f6:74:cb:ea:20:8f:07:8f:3a:10:c3:
+ ac:55:67:1f:51:99:0f:78:ae:1c:06:04:57:6c:74:e6:8f:17:
+ e6:40:41:c7:03:a3:53:41:d4:5c:ec:b1:aa:e2:d8:e1:62:cf:
+ 33:9b:10:55:23:61:ce:b8:8a:74:41:b8:ff:31:bd:a3:f2:bd:
+ 77:20:2f:75:67:93:a7:b6:ad:26:41:32:20:d2:fb:df:7d:9b:
+ 2a:bd:c8:ec:dc:c9:ab:c6:bd:a2:5f:f1:18:a4:a3:51:d8:33:
+ fe:f6:6b:16:4d:91:fb:df:8b:59:d8:8e:ef:39:16:4e:a6:ba:
+ 5d:03:01:0b:3b:25:4b:5e:42:88:70:ff:6a:91:13:c0:70:53:
+ 64:d0:59:79:a5:e0:50:b4:1b:8f:d6:4c:b9:91:4c:d6:31:0a:
+ b6:7a:8c:bb:de:68:8f:46:74:3c:66:36:7f:df:14:d7:84:c2:
+ 89:e9:b0:a7:de:d6:d6:ae:3b:dc:d5:3c:29:a1:b7:f0:c9:fb:
+ 05:1f:db:2a
+-----BEGIN CERTIFICATE-----
+MIID6TCCAtGgAwIBAgIDAIFpMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNVBAYTAkNO
+MQswCQYDVQQIDAJHRDELMAkGA1UEBwwCR1oxDDAKBgNVBAoMA1NTVDEPMA0GA1UE
+CwwGSmVzc01BMRcwFQYDVQQDDA53d3cuamVzc21hLm9yZzEeMBwGCSqGSIb3DQEJ
+ARYPbGRjc2FhQDIxY24uY29tMB4XDTE2MDEwMTAwMDAwMFoXDTI2MDEwMTAwMDAw
+MFowcjELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQwwCgYDVQQKDANTU1QxDzAN
+BgNVBAsMBkplc3NNQTEXMBUGA1UEAwwOd3d3Lmplc3NtYS5vcmcxHjAcBgkqhkiG
+9w0BCQEWD2xkY3NhYUAyMWNuLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBAOFlDuWj95Nov+48W0ZaUp69GVB+U3orPuVm+fU5gXgl0tJbNbXS0GOM
+MspmMB0WxciTfj+t/WufpcHKzryHwrbqmMgrZiSyrp4ulA2mQuTPR32vgQ3/2eBs
+O884GmKOUbiaORgHGBoRAdOnoWarM7B/igS6WGqPetaUz12QAv2vzw9Qn0xxIBpr
+SVJumTo9HtOvuRj0BNXMRRYp+lfX2+96cftidyU1q+2Y2v3Fedzlo8Lr7m1ZkPcp
+ugQDz3R0kXvigDPAKhbTj6eAXJ/hcPOCGQ5RTIZJH4JnJ2jKw5lTjJ6y0rbt9Jq9
+NuIqz3GORHYWY4xBmbdTZy0BrbQOePECAwEAAaN7MHkwCQYDVR0TBAIwADAsBglg
+hkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0O
+BBYEFHYUdE6SbzXIWA8m3TwdgUJfAT6+MB8GA1UdIwQYMBaAFPx+7pAUh/GVC8xa
+OXmmZ8GMvpyIMA0GCSqGSIb3DQEBCwUAA4IBAQCZWaDrHbRHNNEaCVVFl5WCNqyd
+y1MpI2iErmfiCTNiG4v9wImTGWIWRHc3dZowniwSb43OuuhlpdWCxeal9nTL6iCP
+B486EMOsVWcfUZkPeK4cBgRXbHTmjxfmQEHHA6NTQdRc7LGq4tjhYs8zmxBVI2HO
+uIp0Qbj/Mb2j8r13IC91Z5Ontq0mQTIg0vvffZsqvcjs3Mmrxr2iX/EYpKNR2DP+
+9msWTZH734tZ2I7vORZOprpdAwELOyVLXkKIcP9qkRPAcFNk0Fl5peBQtBuP1ky5
+kUzWMQq2eoy73miPRnQ8ZjZ/3xTXhMKJ6bCn3tbWrjvc1TwpobfwyfsFH9sq
+-----END CERTIFICATE-----
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pack-SSL/ssl-cert/client.csr" "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pack-SSL/ssl-cert/client.csr"
new file mode 100644
index 000000000..d35803d5b
--- /dev/null
+++ "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pack-SSL/ssl-cert/client.csr"
@@ -0,0 +1,18 @@
+-----BEGIN CERTIFICATE REQUEST-----
+MIIC8TCCAdkCAQAwfzELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQswCQYDVQQH
+DAJHWjEMMAoGA1UECgwDU1NUMQ8wDQYDVQQLDAZKZXNzTUExFzAVBgNVBAMMDnd3
+dy5qZXNzbWEub3JnMR4wHAYJKoZIhvcNAQkBFg9sZGNzYWFAMjFjbi5jb20wggEi
+MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDhZQ7lo/eTaL/uPFtGWlKevRlQ
+flN6Kz7lZvn1OYF4JdLSWzW10tBjjDLKZjAdFsXIk34/rf1rn6XBys68h8K26pjI
+K2Yksq6eLpQNpkLkz0d9r4EN/9ngbDvPOBpijlG4mjkYBxgaEQHTp6FmqzOwf4oE
+ulhqj3rWlM9dkAL9r88PUJ9McSAaa0lSbpk6PR7Tr7kY9ATVzEUWKfpX19vvenH7
+YnclNavtmNr9xXnc5aPC6+5tWZD3KboEA890dJF74oAzwCoW04+ngFyf4XDzghkO
+UUyGSR+CZydoysOZU4yestK27fSavTbiKs9xjkR2FmOMQZm3U2ctAa20DnjxAgMB
+AAGgLTASBgkqhkiG9w0BCQIxBQwDU1NUMBcGCSqGSIb3DQEJBzEKDAhwcG1tQHNz
+dDANBgkqhkiG9w0BAQsFAAOCAQEAtHiWz0XuqZi/2aoinH472W/sqG7S7YizbcQC
+kCRgYqQw32U0ujI2ndTt2WYDgFUlI1KY5N4b5pl2pdDepFWXLcLyG3nyCjXlJng5
+8YLENg02+xsLOZUjZEsY5pxEkrKYBBjt537P+fA83jtxakC+9xvTEC94CxICWMvx
+OVw1mWjUE3a7Hby7ChkOX/PhJdNzHdsMU9fKCWEFFmyJgrNkFc1nB1omt0j+OkXA
+scwFqhji7yJuwxboaDLdnTNIGGBbDLcw44s7udWB4QayvHwuNgcZ8shxlm686Xi5
+K+SXJTi0DPFKcucU2LA+VCLnMtefghCxbrU7fcFyPsJuT+jdsg==
+-----END CERTIFICATE REQUEST-----
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pack-SSL/ssl-cert/client.key" "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pack-SSL/ssl-cert/client.key"
new file mode 100644
index 000000000..a9f3dd0ca
--- /dev/null
+++ "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pack-SSL/ssl-cert/client.key"
@@ -0,0 +1,30 @@
+-----BEGIN RSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: AES-256-CBC,5F6ACADA6B6B1238FD34A0EC0C5EC2ED
+
+F0JylDtptlBaFpbCP9Qa2pRf5z8sBbUta6G+rBwuWn7GxU//Nub49/Mf0uRm3YTN
+PmCbIQKRyn/u92Yk6cJ9vLCiWe89pa+qlv+kF9PWmYo8Lt6dvtSr1TNAjelGvQjC
+HAi58BHoXXIRrZJQKjzFKGcwhWExCAOct5UDuHu64IvWg+LDccd+tTU/kdKEI9QY
+3POohP6etBBsFIoJFd23yxxNrvxK/v0as7EI/SeFzv7Mfn7haL4LxEsN+9XPN/Ap
+U0IxOT84dMgtIsvW2gvit+qNuaSvrocyEOr5uEfpoS58/yyb0VyNg94itkc6IK3X
+Yeokm2YOJk/4yMoZAeNMMDdR82csCzpTTHurMIZLgtr+SO1ChtreKm0XQB8QNyJ+
+CouAAHOBsxTPgVY/QS1TDrmEZv7cHOAvJp7BYvKroD/pi5Wu2IHAlIEXhdW3Evwn
+jyzUgMUHdXJIcngkkopYEoTPVEXsYX6aHvPJI+jDDKIfDM75SOOw1z7Divsb77I8
+n1jMYDUH4i2g2BixfwFRPxZ6NnRLtqM+TD4yecu3zsqvs0UIlrZFuVIl98Guqa1H
+tJKCxWEaJNb5YZg8GgdZFXYWXUN/HtFqWJelhGcjy48RjOy7LHJ30fkXV07b2s6M
+XcXj9g4jRRyAiZ/kmTqs+Oj6hn+iI4vdGumc2sG0+ZkUwDkj3zfn1N1+J/htVM1z
+Y2kHpKGZzQZ4eriy6CM++FrZ9CSNIPqh5AzayPuMxvEtd27vBnO8nKMwThbhGPtj
+fd7uPPzfG/W7Zo55lYL5opEzvOdULWm8+31ojitN7GSjsFW46HWoyYfTOlTAzP5+
+yPlUGxUyBhlqeXnQNTiLtRb22I2FF41HYH7GsYcxonHw3rKCcJedzL5BMg6Ic2xN
+ZxwXdj20rkugtcSAPxp3OGrmBiCX0wYiZaSgNg5zqI1SIhiWzkq64xoiIFlmxGEo
+Q/Vv7mpRmf1X0eTjiTYz4tYU6TPgtAqLLpmVNbozPnb5eGaMDbRlJnGJjqlXzPAw
+7qUhsb/KZ/k7yZLE+rseicwtAYA0th9A2tpc0CY3/EiL0w5E3zR0SPMinCJeO0rJ
+91njgDPxJ5lPXC04Dlgt/a1WK6D/yQ2kpIiNBUIlGZtr+nD9GqPYiGTqND53TL5f
+PJrr1PibL2l3fyhNDgNhgmY1CGpB6hNkqPOpit+XhGq6X0PlELcj7zYN3acW47jp
+KVm2lT1AXhzqemTWqPQL1+3s8ix0nGVNlmzsOFHqCkmr7FZb76hD5YTtGkOU/Kn3
+I5GqS5GHSCAVJnJWuFk2Y8qqg69mJREcoKThoYsuo8hw9JqZM34JIqqT029Nj35B
+xau4hSXkmHuUCGpwbr0yvsz3ikRfM6y0cT3T6oBiWgfYktpX//89YbyYGcQX7tK0
+aaHW2zvAfMyCWT0CxRen5GAyVeb+WFBdo+xD0HpQcRFtByiNNXmm4kJAoZujeHpe
+ZWcu3xkVcTqWMixAYHcDv3L0EXUnVeWplovRh1+OSm7YvdaLL3cctHoW3a8Kzdc1
+rtoGVI+f4xSEDheB5P4NX6UYbDLIGMPPuR0F5EliL+vmyJcEMuLY8KTPJ0uwf7Ns
+-----END RSA PRIVATE KEY-----
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pack-SSL/ssl-cert/client.pem" "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pack-SSL/ssl-cert/client.pem"
new file mode 100644
index 000000000..600dc8514
--- /dev/null
+++ "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pack-SSL/ssl-cert/client.pem"
@@ -0,0 +1,53 @@
+-----BEGIN RSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: AES-256-CBC,5F6ACADA6B6B1238FD34A0EC0C5EC2ED
+
+F0JylDtptlBaFpbCP9Qa2pRf5z8sBbUta6G+rBwuWn7GxU//Nub49/Mf0uRm3YTN
+PmCbIQKRyn/u92Yk6cJ9vLCiWe89pa+qlv+kF9PWmYo8Lt6dvtSr1TNAjelGvQjC
+HAi58BHoXXIRrZJQKjzFKGcwhWExCAOct5UDuHu64IvWg+LDccd+tTU/kdKEI9QY
+3POohP6etBBsFIoJFd23yxxNrvxK/v0as7EI/SeFzv7Mfn7haL4LxEsN+9XPN/Ap
+U0IxOT84dMgtIsvW2gvit+qNuaSvrocyEOr5uEfpoS58/yyb0VyNg94itkc6IK3X
+Yeokm2YOJk/4yMoZAeNMMDdR82csCzpTTHurMIZLgtr+SO1ChtreKm0XQB8QNyJ+
+CouAAHOBsxTPgVY/QS1TDrmEZv7cHOAvJp7BYvKroD/pi5Wu2IHAlIEXhdW3Evwn
+jyzUgMUHdXJIcngkkopYEoTPVEXsYX6aHvPJI+jDDKIfDM75SOOw1z7Divsb77I8
+n1jMYDUH4i2g2BixfwFRPxZ6NnRLtqM+TD4yecu3zsqvs0UIlrZFuVIl98Guqa1H
+tJKCxWEaJNb5YZg8GgdZFXYWXUN/HtFqWJelhGcjy48RjOy7LHJ30fkXV07b2s6M
+XcXj9g4jRRyAiZ/kmTqs+Oj6hn+iI4vdGumc2sG0+ZkUwDkj3zfn1N1+J/htVM1z
+Y2kHpKGZzQZ4eriy6CM++FrZ9CSNIPqh5AzayPuMxvEtd27vBnO8nKMwThbhGPtj
+fd7uPPzfG/W7Zo55lYL5opEzvOdULWm8+31ojitN7GSjsFW46HWoyYfTOlTAzP5+
+yPlUGxUyBhlqeXnQNTiLtRb22I2FF41HYH7GsYcxonHw3rKCcJedzL5BMg6Ic2xN
+ZxwXdj20rkugtcSAPxp3OGrmBiCX0wYiZaSgNg5zqI1SIhiWzkq64xoiIFlmxGEo
+Q/Vv7mpRmf1X0eTjiTYz4tYU6TPgtAqLLpmVNbozPnb5eGaMDbRlJnGJjqlXzPAw
+7qUhsb/KZ/k7yZLE+rseicwtAYA0th9A2tpc0CY3/EiL0w5E3zR0SPMinCJeO0rJ
+91njgDPxJ5lPXC04Dlgt/a1WK6D/yQ2kpIiNBUIlGZtr+nD9GqPYiGTqND53TL5f
+PJrr1PibL2l3fyhNDgNhgmY1CGpB6hNkqPOpit+XhGq6X0PlELcj7zYN3acW47jp
+KVm2lT1AXhzqemTWqPQL1+3s8ix0nGVNlmzsOFHqCkmr7FZb76hD5YTtGkOU/Kn3
+I5GqS5GHSCAVJnJWuFk2Y8qqg69mJREcoKThoYsuo8hw9JqZM34JIqqT029Nj35B
+xau4hSXkmHuUCGpwbr0yvsz3ikRfM6y0cT3T6oBiWgfYktpX//89YbyYGcQX7tK0
+aaHW2zvAfMyCWT0CxRen5GAyVeb+WFBdo+xD0HpQcRFtByiNNXmm4kJAoZujeHpe
+ZWcu3xkVcTqWMixAYHcDv3L0EXUnVeWplovRh1+OSm7YvdaLL3cctHoW3a8Kzdc1
+rtoGVI+f4xSEDheB5P4NX6UYbDLIGMPPuR0F5EliL+vmyJcEMuLY8KTPJ0uwf7Ns
+-----END RSA PRIVATE KEY-----
+-----BEGIN CERTIFICATE-----
+MIID6TCCAtGgAwIBAgIDAIFpMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNVBAYTAkNO
+MQswCQYDVQQIDAJHRDELMAkGA1UEBwwCR1oxDDAKBgNVBAoMA1NTVDEPMA0GA1UE
+CwwGSmVzc01BMRcwFQYDVQQDDA53d3cuamVzc21hLm9yZzEeMBwGCSqGSIb3DQEJ
+ARYPbGRjc2FhQDIxY24uY29tMB4XDTE2MDEwMTAwMDAwMFoXDTI2MDEwMTAwMDAw
+MFowcjELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQwwCgYDVQQKDANTU1QxDzAN
+BgNVBAsMBkplc3NNQTEXMBUGA1UEAwwOd3d3Lmplc3NtYS5vcmcxHjAcBgkqhkiG
+9w0BCQEWD2xkY3NhYUAyMWNuLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBAOFlDuWj95Nov+48W0ZaUp69GVB+U3orPuVm+fU5gXgl0tJbNbXS0GOM
+MspmMB0WxciTfj+t/WufpcHKzryHwrbqmMgrZiSyrp4ulA2mQuTPR32vgQ3/2eBs
+O884GmKOUbiaORgHGBoRAdOnoWarM7B/igS6WGqPetaUz12QAv2vzw9Qn0xxIBpr
+SVJumTo9HtOvuRj0BNXMRRYp+lfX2+96cftidyU1q+2Y2v3Fedzlo8Lr7m1ZkPcp
+ugQDz3R0kXvigDPAKhbTj6eAXJ/hcPOCGQ5RTIZJH4JnJ2jKw5lTjJ6y0rbt9Jq9
+NuIqz3GORHYWY4xBmbdTZy0BrbQOePECAwEAAaN7MHkwCQYDVR0TBAIwADAsBglg
+hkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0O
+BBYEFHYUdE6SbzXIWA8m3TwdgUJfAT6+MB8GA1UdIwQYMBaAFPx+7pAUh/GVC8xa
+OXmmZ8GMvpyIMA0GCSqGSIb3DQEBCwUAA4IBAQCZWaDrHbRHNNEaCVVFl5WCNqyd
+y1MpI2iErmfiCTNiG4v9wImTGWIWRHc3dZowniwSb43OuuhlpdWCxeal9nTL6iCP
+B486EMOsVWcfUZkPeK4cBgRXbHTmjxfmQEHHA6NTQdRc7LGq4tjhYs8zmxBVI2HO
+uIp0Qbj/Mb2j8r13IC91Z5Ontq0mQTIg0vvffZsqvcjs3Mmrxr2iX/EYpKNR2DP+
+9msWTZH734tZ2I7vORZOprpdAwELOyVLXkKIcP9qkRPAcFNk0Fl5peBQtBuP1ky5
+kUzWMQq2eoy73miPRnQ8ZjZ/3xTXhMKJ6bCn3tbWrjvc1TwpobfwyfsFH9sq
+-----END CERTIFICATE-----
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pack-SSL/ssl-cert/server.cer" "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pack-SSL/ssl-cert/server.cer"
new file mode 100644
index 000000000..0f8fe3b83
--- /dev/null
+++ "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pack-SSL/ssl-cert/server.cer"
@@ -0,0 +1,23 @@
+-----BEGIN CERTIFICATE-----
+MIID6TCCAtGgAwIBAgIDAIFoMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNVBAYTAkNO
+MQswCQYDVQQIDAJHRDELMAkGA1UEBwwCR1oxDDAKBgNVBAoMA1NTVDEPMA0GA1UE
+CwwGSmVzc01BMRcwFQYDVQQDDA53d3cuamVzc21hLm9yZzEeMBwGCSqGSIb3DQEJ
+ARYPbGRjc2FhQDIxY24uY29tMB4XDTE2MDEwMTAwMDAwMFoXDTI2MDEwMTAwMDAw
+MFowcjELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQwwCgYDVQQKDANTU1QxDzAN
+BgNVBAsMBkplc3NNQTEXMBUGA1UEAwwOd3d3Lmplc3NtYS5vcmcxHjAcBgkqhkiG
+9w0BCQEWD2xkY3NhYUAyMWNuLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBALEOPuYKEl/iN3ub/QNaaqo0Hynk62znTp5kXj0zQAqxLxwHU117xHBk
+0LCZux0LnDFl9JAlilvqfeaXRWmQd6hrvV+1mNpnIe2xfyNWwa37QDNjXB7mEg3V
+O/dN9KeVxq9RlH/dQJ7qZlYy4i7wznYMUlz38378wYoOvdAQBX1UrdjWA5T4q0Da
+cRRAV0fIp45hBarp6T1nhDEvttU8yud2lIEV9jWblkyGIhU4FisGOIRRGhnKzCAh
+CYSZ59mq8Wf4FawMyz/H4noHcWWJu4ID1oAE+VFGXKm78qjp/T71/myn5lcGquTx
+oSoJrx7og+529eaJwgeJd2JF7OQ5NysCAwEAAaN7MHkwCQYDVR0TBAIwADAsBglg
+hkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0O
+BBYEFO0CmyFtrGLrkNkkA62QPzSp8vgJMB8GA1UdIwQYMBaAFPx+7pAUh/GVC8xa
+OXmmZ8GMvpyIMA0GCSqGSIb3DQEBCwUAA4IBAQBT1JGXn7HMyNHZntM4kCp7kwN9
+HSpcbQxbWFtk+l8ANP9SqCIEd4xc4rAaUDDDMdD2S0wF9iio1MA1KC5OoJ5Dqw6C
+yTa08LRowlmnw+NNZC2xzaSRmzLGlPDHNauZ/G2ScdWsqR5v2+pKF7bYxAajRkk5
+oqRRDI6X7vHsvX/kqTn9Prk0sFmU0EU64az2iUe/MG9v1WY8eOV+tTEq29GuYYjJ
+E3H8vaeq1fTB0vYgT5xoCc36xVXju/3l17CE12n5of004u4eRi3/T0wbp9WgG2ns
+wjetaYeIAWS/AJQzIK22tztGAbAk6kTgsO5YLx2h6GLGpytDXWvgzr2PdEu1
+-----END CERTIFICATE-----
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pack-SSL/ssl-cert/server.crt" "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pack-SSL/ssl-cert/server.crt"
new file mode 100644
index 000000000..a6213ed40
--- /dev/null
+++ "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pack-SSL/ssl-cert/server.crt"
@@ -0,0 +1,82 @@
+Certificate:
+ Data:
+ Version: 3 (0x2)
+ Serial Number: 33128 (0x8168)
+ Signature Algorithm: sha256WithRSAEncryption
+ Issuer: C=CN, ST=GD, L=GZ, O=SST, OU=JessMA, CN=www.jessma.org/emailAddress=ldcsaa@21cn.com
+ Validity
+ Not Before: Jan 1 00:00:00 2016 GMT
+ Not After : Jan 1 00:00:00 2026 GMT
+ Subject: C=CN, ST=GD, O=SST, OU=JessMA, CN=www.jessma.org/emailAddress=ldcsaa@21cn.com
+ Subject Public Key Info:
+ Public Key Algorithm: rsaEncryption
+ Public-Key: (2048 bit)
+ Modulus:
+ 00:b1:0e:3e:e6:0a:12:5f:e2:37:7b:9b:fd:03:5a:
+ 6a:aa:34:1f:29:e4:eb:6c:e7:4e:9e:64:5e:3d:33:
+ 40:0a:b1:2f:1c:07:53:5d:7b:c4:70:64:d0:b0:99:
+ bb:1d:0b:9c:31:65:f4:90:25:8a:5b:ea:7d:e6:97:
+ 45:69:90:77:a8:6b:bd:5f:b5:98:da:67:21:ed:b1:
+ 7f:23:56:c1:ad:fb:40:33:63:5c:1e:e6:12:0d:d5:
+ 3b:f7:4d:f4:a7:95:c6:af:51:94:7f:dd:40:9e:ea:
+ 66:56:32:e2:2e:f0:ce:76:0c:52:5c:f7:f3:7e:fc:
+ c1:8a:0e:bd:d0:10:05:7d:54:ad:d8:d6:03:94:f8:
+ ab:40:da:71:14:40:57:47:c8:a7:8e:61:05:aa:e9:
+ e9:3d:67:84:31:2f:b6:d5:3c:ca:e7:76:94:81:15:
+ f6:35:9b:96:4c:86:22:15:38:16:2b:06:38:84:51:
+ 1a:19:ca:cc:20:21:09:84:99:e7:d9:aa:f1:67:f8:
+ 15:ac:0c:cb:3f:c7:e2:7a:07:71:65:89:bb:82:03:
+ d6:80:04:f9:51:46:5c:a9:bb:f2:a8:e9:fd:3e:f5:
+ fe:6c:a7:e6:57:06:aa:e4:f1:a1:2a:09:af:1e:e8:
+ 83:ee:76:f5:e6:89:c2:07:89:77:62:45:ec:e4:39:
+ 37:2b
+ Exponent: 65537 (0x10001)
+ X509v3 extensions:
+ X509v3 Basic Constraints:
+ CA:FALSE
+ Netscape Comment:
+ OpenSSL Generated Certificate
+ X509v3 Subject Key Identifier:
+ ED:02:9B:21:6D:AC:62:EB:90:D9:24:03:AD:90:3F:34:A9:F2:F8:09
+ X509v3 Authority Key Identifier:
+ keyid:FC:7E:EE:90:14:87:F1:95:0B:CC:5A:39:79:A6:67:C1:8C:BE:9C:88
+
+ Signature Algorithm: sha256WithRSAEncryption
+ 53:d4:91:97:9f:b1:cc:c8:d1:d9:9e:d3:38:90:2a:7b:93:03:
+ 7d:1d:2a:5c:6d:0c:5b:58:5b:64:fa:5f:00:34:ff:52:a8:22:
+ 04:77:8c:5c:e2:b0:1a:50:30:c3:31:d0:f6:4b:4c:05:f6:28:
+ a8:d4:c0:35:28:2e:4e:a0:9e:43:ab:0e:82:c9:36:b4:f0:b4:
+ 68:c2:59:a7:c3:e3:4d:64:2d:b1:cd:a4:91:9b:32:c6:94:f0:
+ c7:35:ab:99:fc:6d:92:71:d5:ac:a9:1e:6f:db:ea:4a:17:b6:
+ d8:c4:06:a3:46:49:39:a2:a4:51:0c:8e:97:ee:f1:ec:bd:7f:
+ e4:a9:39:fd:3e:b9:34:b0:59:94:d0:45:3a:e1:ac:f6:89:47:
+ bf:30:6f:6f:d5:66:3c:78:e5:7e:b5:31:2a:db:d1:ae:61:88:
+ c9:13:71:fc:bd:a7:aa:d5:f4:c1:d2:f6:20:4f:9c:68:09:cd:
+ fa:c5:55:e3:bb:fd:e5:d7:b0:84:d7:69:f9:a1:fd:34:e2:ee:
+ 1e:46:2d:ff:4f:4c:1b:a7:d5:a0:1b:69:ec:c2:37:ad:69:87:
+ 88:01:64:bf:00:94:33:20:ad:b6:b7:3b:46:01:b0:24:ea:44:
+ e0:b0:ee:58:2f:1d:a1:e8:62:c6:a7:2b:43:5d:6b:e0:ce:bd:
+ 8f:74:4b:b5
+-----BEGIN CERTIFICATE-----
+MIID6TCCAtGgAwIBAgIDAIFoMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNVBAYTAkNO
+MQswCQYDVQQIDAJHRDELMAkGA1UEBwwCR1oxDDAKBgNVBAoMA1NTVDEPMA0GA1UE
+CwwGSmVzc01BMRcwFQYDVQQDDA53d3cuamVzc21hLm9yZzEeMBwGCSqGSIb3DQEJ
+ARYPbGRjc2FhQDIxY24uY29tMB4XDTE2MDEwMTAwMDAwMFoXDTI2MDEwMTAwMDAw
+MFowcjELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQwwCgYDVQQKDANTU1QxDzAN
+BgNVBAsMBkplc3NNQTEXMBUGA1UEAwwOd3d3Lmplc3NtYS5vcmcxHjAcBgkqhkiG
+9w0BCQEWD2xkY3NhYUAyMWNuLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBALEOPuYKEl/iN3ub/QNaaqo0Hynk62znTp5kXj0zQAqxLxwHU117xHBk
+0LCZux0LnDFl9JAlilvqfeaXRWmQd6hrvV+1mNpnIe2xfyNWwa37QDNjXB7mEg3V
+O/dN9KeVxq9RlH/dQJ7qZlYy4i7wznYMUlz38378wYoOvdAQBX1UrdjWA5T4q0Da
+cRRAV0fIp45hBarp6T1nhDEvttU8yud2lIEV9jWblkyGIhU4FisGOIRRGhnKzCAh
+CYSZ59mq8Wf4FawMyz/H4noHcWWJu4ID1oAE+VFGXKm78qjp/T71/myn5lcGquTx
+oSoJrx7og+529eaJwgeJd2JF7OQ5NysCAwEAAaN7MHkwCQYDVR0TBAIwADAsBglg
+hkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0O
+BBYEFO0CmyFtrGLrkNkkA62QPzSp8vgJMB8GA1UdIwQYMBaAFPx+7pAUh/GVC8xa
+OXmmZ8GMvpyIMA0GCSqGSIb3DQEBCwUAA4IBAQBT1JGXn7HMyNHZntM4kCp7kwN9
+HSpcbQxbWFtk+l8ANP9SqCIEd4xc4rAaUDDDMdD2S0wF9iio1MA1KC5OoJ5Dqw6C
+yTa08LRowlmnw+NNZC2xzaSRmzLGlPDHNauZ/G2ScdWsqR5v2+pKF7bYxAajRkk5
+oqRRDI6X7vHsvX/kqTn9Prk0sFmU0EU64az2iUe/MG9v1WY8eOV+tTEq29GuYYjJ
+E3H8vaeq1fTB0vYgT5xoCc36xVXju/3l17CE12n5of004u4eRi3/T0wbp9WgG2ns
+wjetaYeIAWS/AJQzIK22tztGAbAk6kTgsO5YLx2h6GLGpytDXWvgzr2PdEu1
+-----END CERTIFICATE-----
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pack-SSL/ssl-cert/server.csr" "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pack-SSL/ssl-cert/server.csr"
new file mode 100644
index 000000000..0306648a3
--- /dev/null
+++ "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pack-SSL/ssl-cert/server.csr"
@@ -0,0 +1,18 @@
+-----BEGIN CERTIFICATE REQUEST-----
+MIIC8TCCAdkCAQAwfzELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQswCQYDVQQH
+DAJHWjEMMAoGA1UECgwDU1NUMQ8wDQYDVQQLDAZKZXNzTUExFzAVBgNVBAMMDnd3
+dy5qZXNzbWEub3JnMR4wHAYJKoZIhvcNAQkBFg9sZGNzYWFAMjFjbi5jb20wggEi
+MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCxDj7mChJf4jd7m/0DWmqqNB8p
+5Ots506eZF49M0AKsS8cB1Nde8RwZNCwmbsdC5wxZfSQJYpb6n3ml0VpkHeoa71f
+tZjaZyHtsX8jVsGt+0AzY1we5hIN1Tv3TfSnlcavUZR/3UCe6mZWMuIu8M52DFJc
+9/N+/MGKDr3QEAV9VK3Y1gOU+KtA2nEUQFdHyKeOYQWq6ek9Z4QxL7bVPMrndpSB
+FfY1m5ZMhiIVOBYrBjiEURoZyswgIQmEmefZqvFn+BWsDMs/x+J6B3FlibuCA9aA
+BPlRRlypu/Ko6f0+9f5sp+ZXBqrk8aEqCa8e6IPudvXmicIHiXdiRezkOTcrAgMB
+AAGgLTASBgkqhkiG9w0BCQIxBQwDU1NUMBcGCSqGSIb3DQEJBzEKDAhwcG1tQHNz
+dDANBgkqhkiG9w0BAQsFAAOCAQEAk9/S/9YUKjayh62Tagnk3hcJ5+YKJLHRtvv0
+Qu2HyPzpvyxORjQpnHaf+vpUj1W1amVQl7NSlNV181VzITtrySJyOdjvxTOvmITY
+stgCOXQiZeR6I9s2cZsh0yDcpiytlwnjWrFTgtIQ1dZgBRAvvJQIqoyrpgb22fva
+S3jilbFASColhEBeO0S8matO50qYwil7BabgQoUiu4QT6MhCXsJpNwi1qDD2rC/o
+Kffj63s4dRyJgqdbiYXMTDSfZvbx7UfnNCATBlniaoOTqbut1vmRGDYE+mkxly5X
+3KgcLvgpBoq0uUXNwsTNWo6CNthD8kY0fAkz34LG2aTKGy8Now==
+-----END CERTIFICATE REQUEST-----
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pack-SSL/ssl-cert/server.key" "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pack-SSL/ssl-cert/server.key"
new file mode 100644
index 000000000..2f36a1915
--- /dev/null
+++ "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pack-SSL/ssl-cert/server.key"
@@ -0,0 +1,30 @@
+-----BEGIN RSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: AES-256-CBC,107800C9B21513D8F642A394FAD9047E
+
+bmaTCBYAzKzpUrdaT6sb/dbH5o3JbFu2d8s1NfKhghYUG/RWgzx5H8QWSsh1Ll+8
+701HwSwauwbKaBWzWP5bj4mjw9hXcva8l1QWeuW+Q0GsE7uWNZGFQZbCxER/9jOu
+36KMlx0twcIEGs9PNwnY7d9oS/BMVpiUqhL8sPihMLCFK0fm6VGjMrfdIZJuZXEv
+BKt+c0UPkkPmivZjSm6iTPKI6VpGeyg0sM/uZr+mRj7IOAD6vsSQnCfUOq00Rm14
+ABrer8dCWJDKrx1iLq7tFojII+JcB7oBy+8KC/t0MlqmIP2jx93/MVW5lbZ3mj2v
+BanVQvklHTLe/WHjoaltqBEKN0sIzfyed6qWudKHUa8yjAr0PS4rsTbO0S4fFz+A
+KFWEs8fuXsanFHt5akWDTMiw1n4HaiioT4jjhWRRIKGEndztyGMklShYAdSTqsZO
+vzPO+xqLlg6wOgCGZ3Kl/c243XyLMCI+lJlzu3ccqzQJbNfPADXUcxSTqaEByWG3
+YIXttKY5WFBcNjf9B3c1qfJMt3nGY2QewnL+rNm/qpose/AsFS+2aqMeRw7fYh3R
+O+H+G+0gxrSK0E3WiewMIvUqFI6W300MWx6O7d87OkbfwMLpLPumsfLKswOKaAIF
+p0RxSABSe5ixqnErsoiYGNf3bln4tsQ+v5jYUY+Gn/9mVTPEYs6uwC78UW5Gj+Za
+lB3V8aRxQjWBerhLhf3iCmkkOVaG5JvVJDmvwo6iBRZ4NNzkAqOJm/UvfWoKN91b
+riHAWNayqvOfzaK6KYiJlOR9D779pK6xL+gZ0zo3rIA2yzs5MJAvJmaq6SQmQFl1
+Vzhnf3hIGJFtJYQJhlr36pkPgG9jVdJPhZisY9EsIAHvDbbLlBNexSmZc2RZmsVL
+VG6WqOm85DzuZxGULK/CnXCLpBMKWf9y5YPJrLkuwQILrr2btnAivPfUU80S3E0c
+VslBodCkSGVx3iQoAVJv2+6ZNMRNLVzpLnlaVtHl/gvw+InJlXmzBlZQFKOCaOny
+sz67qKmK1KWui2G3AzuvTEL9O++FVO+irpSNSLozxif/erLJl7R60pBkrWwd6jGB
+8qQv7ni+xIeXDBLSu26zPunLR/2PhrrCv49KmqNmF7sSNx6xmcc3CfgEy+5+Tm97
+KPE4JlaH/ZW61TlzXojbZMaiJltkFkpagFgm2bXrN1nMk2d6R+Yfe78lSvPKoB8k
+1m7LY1lNXFZJh2hxQRhdV9oTokFahUSitQCg1S3eASuE2jFRRL4jrh4LcBWUHZnJ
+OOAwBDOF4RfGyfiDs0IlrnLvK3a2KorlHfvUyj+cwkRmgI8sWgkJuNpz1mKDn5UZ
+yGn2JczHY0CiInRGgwMnS1Z/WpJZYGNh7pP7Hm1RnzVslkWSJGaKJv9jDNUCyy8R
+L+nwUSd6m6r8YWcs3zdBYsDHGOO5MgAU5Q8yuLbEgaK5NJSJgGkm+ya5oB88Y6T0
+JcL/u5xKw4kJiKgiLr3zrWe5qV6+lpH7fGKy7fucJWltDkfQSD3Dp0b64TW4FuQq
+VQhDR+KykLK6QxM2x3/maMfG578Ku1F6g4RboDR/6uCFu6hQuCoNYBk/QB0XpY13
+-----END RSA PRIVATE KEY-----
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pack-SSL/ssl-cert/server.pem" "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pack-SSL/ssl-cert/server.pem"
new file mode 100644
index 000000000..1d6040ca9
--- /dev/null
+++ "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pack-SSL/ssl-cert/server.pem"
@@ -0,0 +1,53 @@
+-----BEGIN RSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: AES-256-CBC,107800C9B21513D8F642A394FAD9047E
+
+bmaTCBYAzKzpUrdaT6sb/dbH5o3JbFu2d8s1NfKhghYUG/RWgzx5H8QWSsh1Ll+8
+701HwSwauwbKaBWzWP5bj4mjw9hXcva8l1QWeuW+Q0GsE7uWNZGFQZbCxER/9jOu
+36KMlx0twcIEGs9PNwnY7d9oS/BMVpiUqhL8sPihMLCFK0fm6VGjMrfdIZJuZXEv
+BKt+c0UPkkPmivZjSm6iTPKI6VpGeyg0sM/uZr+mRj7IOAD6vsSQnCfUOq00Rm14
+ABrer8dCWJDKrx1iLq7tFojII+JcB7oBy+8KC/t0MlqmIP2jx93/MVW5lbZ3mj2v
+BanVQvklHTLe/WHjoaltqBEKN0sIzfyed6qWudKHUa8yjAr0PS4rsTbO0S4fFz+A
+KFWEs8fuXsanFHt5akWDTMiw1n4HaiioT4jjhWRRIKGEndztyGMklShYAdSTqsZO
+vzPO+xqLlg6wOgCGZ3Kl/c243XyLMCI+lJlzu3ccqzQJbNfPADXUcxSTqaEByWG3
+YIXttKY5WFBcNjf9B3c1qfJMt3nGY2QewnL+rNm/qpose/AsFS+2aqMeRw7fYh3R
+O+H+G+0gxrSK0E3WiewMIvUqFI6W300MWx6O7d87OkbfwMLpLPumsfLKswOKaAIF
+p0RxSABSe5ixqnErsoiYGNf3bln4tsQ+v5jYUY+Gn/9mVTPEYs6uwC78UW5Gj+Za
+lB3V8aRxQjWBerhLhf3iCmkkOVaG5JvVJDmvwo6iBRZ4NNzkAqOJm/UvfWoKN91b
+riHAWNayqvOfzaK6KYiJlOR9D779pK6xL+gZ0zo3rIA2yzs5MJAvJmaq6SQmQFl1
+Vzhnf3hIGJFtJYQJhlr36pkPgG9jVdJPhZisY9EsIAHvDbbLlBNexSmZc2RZmsVL
+VG6WqOm85DzuZxGULK/CnXCLpBMKWf9y5YPJrLkuwQILrr2btnAivPfUU80S3E0c
+VslBodCkSGVx3iQoAVJv2+6ZNMRNLVzpLnlaVtHl/gvw+InJlXmzBlZQFKOCaOny
+sz67qKmK1KWui2G3AzuvTEL9O++FVO+irpSNSLozxif/erLJl7R60pBkrWwd6jGB
+8qQv7ni+xIeXDBLSu26zPunLR/2PhrrCv49KmqNmF7sSNx6xmcc3CfgEy+5+Tm97
+KPE4JlaH/ZW61TlzXojbZMaiJltkFkpagFgm2bXrN1nMk2d6R+Yfe78lSvPKoB8k
+1m7LY1lNXFZJh2hxQRhdV9oTokFahUSitQCg1S3eASuE2jFRRL4jrh4LcBWUHZnJ
+OOAwBDOF4RfGyfiDs0IlrnLvK3a2KorlHfvUyj+cwkRmgI8sWgkJuNpz1mKDn5UZ
+yGn2JczHY0CiInRGgwMnS1Z/WpJZYGNh7pP7Hm1RnzVslkWSJGaKJv9jDNUCyy8R
+L+nwUSd6m6r8YWcs3zdBYsDHGOO5MgAU5Q8yuLbEgaK5NJSJgGkm+ya5oB88Y6T0
+JcL/u5xKw4kJiKgiLr3zrWe5qV6+lpH7fGKy7fucJWltDkfQSD3Dp0b64TW4FuQq
+VQhDR+KykLK6QxM2x3/maMfG578Ku1F6g4RboDR/6uCFu6hQuCoNYBk/QB0XpY13
+-----END RSA PRIVATE KEY-----
+-----BEGIN CERTIFICATE-----
+MIID6TCCAtGgAwIBAgIDAIFoMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNVBAYTAkNO
+MQswCQYDVQQIDAJHRDELMAkGA1UEBwwCR1oxDDAKBgNVBAoMA1NTVDEPMA0GA1UE
+CwwGSmVzc01BMRcwFQYDVQQDDA53d3cuamVzc21hLm9yZzEeMBwGCSqGSIb3DQEJ
+ARYPbGRjc2FhQDIxY24uY29tMB4XDTE2MDEwMTAwMDAwMFoXDTI2MDEwMTAwMDAw
+MFowcjELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQwwCgYDVQQKDANTU1QxDzAN
+BgNVBAsMBkplc3NNQTEXMBUGA1UEAwwOd3d3Lmplc3NtYS5vcmcxHjAcBgkqhkiG
+9w0BCQEWD2xkY3NhYUAyMWNuLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBALEOPuYKEl/iN3ub/QNaaqo0Hynk62znTp5kXj0zQAqxLxwHU117xHBk
+0LCZux0LnDFl9JAlilvqfeaXRWmQd6hrvV+1mNpnIe2xfyNWwa37QDNjXB7mEg3V
+O/dN9KeVxq9RlH/dQJ7qZlYy4i7wznYMUlz38378wYoOvdAQBX1UrdjWA5T4q0Da
+cRRAV0fIp45hBarp6T1nhDEvttU8yud2lIEV9jWblkyGIhU4FisGOIRRGhnKzCAh
+CYSZ59mq8Wf4FawMyz/H4noHcWWJu4ID1oAE+VFGXKm78qjp/T71/myn5lcGquTx
+oSoJrx7og+529eaJwgeJd2JF7OQ5NysCAwEAAaN7MHkwCQYDVR0TBAIwADAsBglg
+hkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0O
+BBYEFO0CmyFtrGLrkNkkA62QPzSp8vgJMB8GA1UdIwQYMBaAFPx+7pAUh/GVC8xa
+OXmmZ8GMvpyIMA0GCSqGSIb3DQEBCwUAA4IBAQBT1JGXn7HMyNHZntM4kCp7kwN9
+HSpcbQxbWFtk+l8ANP9SqCIEd4xc4rAaUDDDMdD2S0wF9iio1MA1KC5OoJ5Dqw6C
+yTa08LRowlmnw+NNZC2xzaSRmzLGlPDHNauZ/G2ScdWsqR5v2+pKF7bYxAajRkk5
+oqRRDI6X7vHsvX/kqTn9Prk0sFmU0EU64az2iUe/MG9v1WY8eOV+tTEq29GuYYjJ
+E3H8vaeq1fTB0vYgT5xoCc36xVXju/3l17CE12n5of004u4eRi3/T0wbp9WgG2ns
+wjetaYeIAWS/AJQzIK22tztGAbAk6kTgsO5YLx2h6GLGpytDXWvgzr2PdEu1
+-----END CERTIFICATE-----
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pack/FileTransfer-PackClient.e" "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pack/FileTransfer-PackClient.e"
new file mode 100644
index 000000000..a036b543c
Binary files /dev/null and "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pack/FileTransfer-PackClient.e" differ
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pack/FileTransfer-PackServer.e" "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pack/FileTransfer-PackServer.e"
new file mode 100644
index 000000000..c2a0c6063
Binary files /dev/null and "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pack/FileTransfer-PackServer.e" differ
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pack/HPSocket.ec" "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pack/HPSocket.ec"
new file mode 100644
index 000000000..d839e3d18
Binary files /dev/null and "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pack/HPSocket.ec" differ
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pack/HPSocket4C-SSL.dll" "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pack/HPSocket4C-SSL.dll"
new file mode 100644
index 000000000..75e525a4c
Binary files /dev/null and "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pack/HPSocket4C-SSL.dll" differ
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pull-SSL/FileTransfer-PullClient.e" "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pull-SSL/FileTransfer-PullClient.e"
new file mode 100644
index 000000000..19e67f3fb
Binary files /dev/null and "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pull-SSL/FileTransfer-PullClient.e" differ
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pull-SSL/FileTransfer-PullServer.e" "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pull-SSL/FileTransfer-PullServer.e"
new file mode 100644
index 000000000..f818da5ab
Binary files /dev/null and "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pull-SSL/FileTransfer-PullServer.e" differ
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pull-SSL/HPSocket.ec" "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pull-SSL/HPSocket.ec"
new file mode 100644
index 000000000..d839e3d18
Binary files /dev/null and "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pull-SSL/HPSocket.ec" differ
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pull-SSL/HPSocket4C-SSL.dll" "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pull-SSL/HPSocket4C-SSL.dll"
new file mode 100644
index 000000000..75e525a4c
Binary files /dev/null and "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pull-SSL/HPSocket4C-SSL.dll" differ
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pull-SSL/ssl-cert/ca.crt" "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pull-SSL/ssl-cert/ca.crt"
new file mode 100644
index 000000000..c31217076
--- /dev/null
+++ "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pull-SSL/ssl-cert/ca.crt"
@@ -0,0 +1,23 @@
+-----BEGIN CERTIFICATE-----
+MIID0TCCArmgAwIBAgIJALFGobpzN5MdMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNV
+BAYTAkNOMQswCQYDVQQIDAJHRDELMAkGA1UEBwwCR1oxDDAKBgNVBAoMA1NTVDEP
+MA0GA1UECwwGSmVzc01BMRcwFQYDVQQDDA53d3cuamVzc21hLm9yZzEeMBwGCSqG
+SIb3DQEJARYPbGRjc2FhQDIxY24uY29tMB4XDTE2MDQwMTE1MDIwMFoXDTI0MDYx
+ODE1MDIwMFowfzELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQswCQYDVQQHDAJH
+WjEMMAoGA1UECgwDU1NUMQ8wDQYDVQQLDAZKZXNzTUExFzAVBgNVBAMMDnd3dy5q
+ZXNzbWEub3JnMR4wHAYJKoZIhvcNAQkBFg9sZGNzYWFAMjFjbi5jb20wggEiMA0G
+CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDht6llexLtFkV8ijjdJGaHXXQysWOJ
+UM/YQFYP52nviurJSpMbWSXnuaDlfidk76B66Np5mlnN5BiHqbBj34GCVKz5VQtx
+3kMY1y30YWyiHAEZiV3PLQc8/A9MnJM/q/mHaulmTuJi8A85TWadqUNXgiaIMkqz
+bKaauR1/GCxXuEVroqtyR99RCWhfakTz04KfIbt83QR0imWC6uhmvD/DXJ03XFzd
+XkK5aNp+ef1sBQgFKjeXV6EMuq+UgEDPXlCDUJAqsZt6W/ohrCAHWQYZ/RSvvaMJ
+O7aWROGAC/lh6ATOIbFlGVppw6zUGdIDkB5FVF1MC7CyDndncFrY+OJzAgMBAAGj
+UDBOMB0GA1UdDgQWBBT8fu6QFIfxlQvMWjl5pmfBjL6ciDAfBgNVHSMEGDAWgBT8
+fu6QFIfxlQvMWjl5pmfBjL6ciDAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUA
+A4IBAQDI+f6GMBJxRJNKrgbUYLD1U6LWEQJQ50g2NxGy0j+TL6oypoo/kyME3tOR
+EmXEDzytGcSaQ78xYcg97UQd8OhXYQr0qwZ/JLarmhCVK/bfbGTIn4Mk4ZgDqcOU
+46jsJeEZwUSrrq7svKO5d7+wV0VGPO+Ww4yzRCPwm2puXFY1+KpTxYX31+wwMB8p
+7GuJEDgV08qzLfcBAfSFFYiOHL3tJ+XNKFNRqigjeYrWuAMphOhpYfYnU0d0upe8
+wWx9Unm8qSkc7hiS/vvs1v7Pv1sqMFRBoaKOTqZ7Wz/5AySGPQjeMV/atmArDEkx
+z58OEgTzg1J/Keztxwj7I2KnYHyH
+-----END CERTIFICATE-----
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pull-SSL/ssl-cert/ca.key" "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pull-SSL/ssl-cert/ca.key"
new file mode 100644
index 000000000..e0a85b46b
--- /dev/null
+++ "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pull-SSL/ssl-cert/ca.key"
@@ -0,0 +1,30 @@
+-----BEGIN RSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: AES-256-CBC,ABBC3A36C737CF487C5C36CA5ACA4A5D
+
+zv/FdREV9tlLsPPzIrm5EIbGaTiReEz+9jlgplyVLkAZe7MNF868t5g93Ve46ehy
+XzBf2QtBE12xAgKmjTvK7RnO1Rih5LqY7VTrEhIFSkYdDTqTV8I8cWig7Hmg+qNw
+EymXdrCYjBQB1U3jmOxBqQrDw75KYJFq5vN+vAmnreA9m9NdOAWOQ+n5K0sJLQpk
+6F9a4pzym7v4mMmP67Ddf/qHVcbWPLOo3QkBUItGJYPpBL1ODu+rd/3f9EyJspVw
+3dQNAaT0OzA0RZ9Pew7+ZxzgFFDHA4sh6r4fcfpEfXTr1QQUg0F4B66+OTE1duoE
+T+PIwYWp4yyuYgUA7txpDsGaENbvfnsP81oLMIvU0TicKJoYxr2Zxa+lK2MWCa5D
+L9VbRMQM0bXTF1qCgjnPmFhxhdYgidxPEZPahyMmFU3LB9W5ils/DK+AXW1gC4ZY
+O8hpUGaZ7Lj5H6suMSYIX7CAEi0NXXdRMXw7bOBecRFy+fhgHmMF1fGgBG2Fd1lP
+wgHlydLQDZoUpTnZrifDzlH8oDqEbCCOSUYc82fVKeNNORePHLGuV8utz0UTR9Rq
+Ko9ZYEN7j+JsPBdG3CnrjDILrZA3peKPhEifrRL2mjHdMdwFsE/fetyvUssgh9VY
+o2Bi25khVu+2TwBMEO1nlS6U+TWOU8u4qxGtSj5xN1Fdplb098VXY1T08+NvDJUN
+7S52KPAyeXY6V2/Q7IyDpsnmM9SWiLrvf2C/niEHRLfWoNP5bt6r/e8RIjFPc0KV
+E8KvANWXSArM359F4+ucvMzrYEtkgnldf6UIN007qqr2eEREeVwxVWIpJZJauVDV
+1uOvTQCDU7O4cIV/FiK1+oVt9MQYAHnnG3revFzqcZtH2x3qWNEGwiyfDZh7qx7c
+8LFYiFLIQX2HGYcEpcKAbj65sJLecz7VtNQ2GMoXHh09BQ5VnleVInmAfAv6r01k
+OdTJ3CNf8YcW/PAKTGrgmsncGp8EvHbmDC4r1ecxxp3Mu7M7T9XfQ41nk1nCLmOp
++3B9ecnJx6bSkg6wrrofl2MifCyl6AvxyKUeAt+dNV319QL/imgV3VQiD+Gu5i+c
+1tveD4cKNm01izEZz6xPBZ9sH4G8TFYFOx572q2DdSZe2MXy/h6QfKUADPOkvPyr
+0dqNbPQKJDL7YJOG39k0L/GOe6uH+JxXlvYLtqSLznLTQkm9kkWVOB54gV+v2NBp
+831BnDdlwv9AnScDY7o4fG1qAaWIZyMWntmORfpHkOMRbrBqK5TeczpoV2jr1iGl
+h1oIbbANJzaXEydnWcnUPujopP7oYG2KGhDbzhhR/PGlvLknIoAA55BqL23dzHct
+1/xaaHqxcjGNymgSPPD9Kjx0qQZovOb5WKDyg5+D5GIfRqq+c1SQeZw+5jcoMBIF
+TSdfiwAxhLkT8SQf72C6tAYsxkTubbcU1gc0Vkdd5Q2FWc6YgCb6XVPYC5jHATwV
+V4v5JVqGLRFi056heSpA0EFWp/AuSoaYaQRwGfBnUysaocDlEE4kTNzzJIwgbWrt
+iTL5qB7LIexqUVWVjmUmx6S0+f6qVYovDjFHVg61Xb6zdL04LmU0VrMCwgUBEt2j
+-----END RSA PRIVATE KEY-----
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pull-SSL/ssl-cert/ca.pem" "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pull-SSL/ssl-cert/ca.pem"
new file mode 100644
index 000000000..57f3b363b
--- /dev/null
+++ "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pull-SSL/ssl-cert/ca.pem"
@@ -0,0 +1,53 @@
+-----BEGIN RSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: AES-256-CBC,ABBC3A36C737CF487C5C36CA5ACA4A5D
+
+zv/FdREV9tlLsPPzIrm5EIbGaTiReEz+9jlgplyVLkAZe7MNF868t5g93Ve46ehy
+XzBf2QtBE12xAgKmjTvK7RnO1Rih5LqY7VTrEhIFSkYdDTqTV8I8cWig7Hmg+qNw
+EymXdrCYjBQB1U3jmOxBqQrDw75KYJFq5vN+vAmnreA9m9NdOAWOQ+n5K0sJLQpk
+6F9a4pzym7v4mMmP67Ddf/qHVcbWPLOo3QkBUItGJYPpBL1ODu+rd/3f9EyJspVw
+3dQNAaT0OzA0RZ9Pew7+ZxzgFFDHA4sh6r4fcfpEfXTr1QQUg0F4B66+OTE1duoE
+T+PIwYWp4yyuYgUA7txpDsGaENbvfnsP81oLMIvU0TicKJoYxr2Zxa+lK2MWCa5D
+L9VbRMQM0bXTF1qCgjnPmFhxhdYgidxPEZPahyMmFU3LB9W5ils/DK+AXW1gC4ZY
+O8hpUGaZ7Lj5H6suMSYIX7CAEi0NXXdRMXw7bOBecRFy+fhgHmMF1fGgBG2Fd1lP
+wgHlydLQDZoUpTnZrifDzlH8oDqEbCCOSUYc82fVKeNNORePHLGuV8utz0UTR9Rq
+Ko9ZYEN7j+JsPBdG3CnrjDILrZA3peKPhEifrRL2mjHdMdwFsE/fetyvUssgh9VY
+o2Bi25khVu+2TwBMEO1nlS6U+TWOU8u4qxGtSj5xN1Fdplb098VXY1T08+NvDJUN
+7S52KPAyeXY6V2/Q7IyDpsnmM9SWiLrvf2C/niEHRLfWoNP5bt6r/e8RIjFPc0KV
+E8KvANWXSArM359F4+ucvMzrYEtkgnldf6UIN007qqr2eEREeVwxVWIpJZJauVDV
+1uOvTQCDU7O4cIV/FiK1+oVt9MQYAHnnG3revFzqcZtH2x3qWNEGwiyfDZh7qx7c
+8LFYiFLIQX2HGYcEpcKAbj65sJLecz7VtNQ2GMoXHh09BQ5VnleVInmAfAv6r01k
+OdTJ3CNf8YcW/PAKTGrgmsncGp8EvHbmDC4r1ecxxp3Mu7M7T9XfQ41nk1nCLmOp
++3B9ecnJx6bSkg6wrrofl2MifCyl6AvxyKUeAt+dNV319QL/imgV3VQiD+Gu5i+c
+1tveD4cKNm01izEZz6xPBZ9sH4G8TFYFOx572q2DdSZe2MXy/h6QfKUADPOkvPyr
+0dqNbPQKJDL7YJOG39k0L/GOe6uH+JxXlvYLtqSLznLTQkm9kkWVOB54gV+v2NBp
+831BnDdlwv9AnScDY7o4fG1qAaWIZyMWntmORfpHkOMRbrBqK5TeczpoV2jr1iGl
+h1oIbbANJzaXEydnWcnUPujopP7oYG2KGhDbzhhR/PGlvLknIoAA55BqL23dzHct
+1/xaaHqxcjGNymgSPPD9Kjx0qQZovOb5WKDyg5+D5GIfRqq+c1SQeZw+5jcoMBIF
+TSdfiwAxhLkT8SQf72C6tAYsxkTubbcU1gc0Vkdd5Q2FWc6YgCb6XVPYC5jHATwV
+V4v5JVqGLRFi056heSpA0EFWp/AuSoaYaQRwGfBnUysaocDlEE4kTNzzJIwgbWrt
+iTL5qB7LIexqUVWVjmUmx6S0+f6qVYovDjFHVg61Xb6zdL04LmU0VrMCwgUBEt2j
+-----END RSA PRIVATE KEY-----
+-----BEGIN CERTIFICATE-----
+MIID0TCCArmgAwIBAgIJALFGobpzN5MdMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNV
+BAYTAkNOMQswCQYDVQQIDAJHRDELMAkGA1UEBwwCR1oxDDAKBgNVBAoMA1NTVDEP
+MA0GA1UECwwGSmVzc01BMRcwFQYDVQQDDA53d3cuamVzc21hLm9yZzEeMBwGCSqG
+SIb3DQEJARYPbGRjc2FhQDIxY24uY29tMB4XDTE2MDQwMTE1MDIwMFoXDTI0MDYx
+ODE1MDIwMFowfzELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQswCQYDVQQHDAJH
+WjEMMAoGA1UECgwDU1NUMQ8wDQYDVQQLDAZKZXNzTUExFzAVBgNVBAMMDnd3dy5q
+ZXNzbWEub3JnMR4wHAYJKoZIhvcNAQkBFg9sZGNzYWFAMjFjbi5jb20wggEiMA0G
+CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDht6llexLtFkV8ijjdJGaHXXQysWOJ
+UM/YQFYP52nviurJSpMbWSXnuaDlfidk76B66Np5mlnN5BiHqbBj34GCVKz5VQtx
+3kMY1y30YWyiHAEZiV3PLQc8/A9MnJM/q/mHaulmTuJi8A85TWadqUNXgiaIMkqz
+bKaauR1/GCxXuEVroqtyR99RCWhfakTz04KfIbt83QR0imWC6uhmvD/DXJ03XFzd
+XkK5aNp+ef1sBQgFKjeXV6EMuq+UgEDPXlCDUJAqsZt6W/ohrCAHWQYZ/RSvvaMJ
+O7aWROGAC/lh6ATOIbFlGVppw6zUGdIDkB5FVF1MC7CyDndncFrY+OJzAgMBAAGj
+UDBOMB0GA1UdDgQWBBT8fu6QFIfxlQvMWjl5pmfBjL6ciDAfBgNVHSMEGDAWgBT8
+fu6QFIfxlQvMWjl5pmfBjL6ciDAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUA
+A4IBAQDI+f6GMBJxRJNKrgbUYLD1U6LWEQJQ50g2NxGy0j+TL6oypoo/kyME3tOR
+EmXEDzytGcSaQ78xYcg97UQd8OhXYQr0qwZ/JLarmhCVK/bfbGTIn4Mk4ZgDqcOU
+46jsJeEZwUSrrq7svKO5d7+wV0VGPO+Ww4yzRCPwm2puXFY1+KpTxYX31+wwMB8p
+7GuJEDgV08qzLfcBAfSFFYiOHL3tJ+XNKFNRqigjeYrWuAMphOhpYfYnU0d0upe8
+wWx9Unm8qSkc7hiS/vvs1v7Pv1sqMFRBoaKOTqZ7Wz/5AySGPQjeMV/atmArDEkx
+z58OEgTzg1J/Keztxwj7I2KnYHyH
+-----END CERTIFICATE-----
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pull-SSL/ssl-cert/client.cer" "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pull-SSL/ssl-cert/client.cer"
new file mode 100644
index 000000000..33a266a82
--- /dev/null
+++ "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pull-SSL/ssl-cert/client.cer"
@@ -0,0 +1,23 @@
+-----BEGIN CERTIFICATE-----
+MIID6TCCAtGgAwIBAgIDAIFpMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNVBAYTAkNO
+MQswCQYDVQQIDAJHRDELMAkGA1UEBwwCR1oxDDAKBgNVBAoMA1NTVDEPMA0GA1UE
+CwwGSmVzc01BMRcwFQYDVQQDDA53d3cuamVzc21hLm9yZzEeMBwGCSqGSIb3DQEJ
+ARYPbGRjc2FhQDIxY24uY29tMB4XDTE2MDEwMTAwMDAwMFoXDTI2MDEwMTAwMDAw
+MFowcjELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQwwCgYDVQQKDANTU1QxDzAN
+BgNVBAsMBkplc3NNQTEXMBUGA1UEAwwOd3d3Lmplc3NtYS5vcmcxHjAcBgkqhkiG
+9w0BCQEWD2xkY3NhYUAyMWNuLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBAOFlDuWj95Nov+48W0ZaUp69GVB+U3orPuVm+fU5gXgl0tJbNbXS0GOM
+MspmMB0WxciTfj+t/WufpcHKzryHwrbqmMgrZiSyrp4ulA2mQuTPR32vgQ3/2eBs
+O884GmKOUbiaORgHGBoRAdOnoWarM7B/igS6WGqPetaUz12QAv2vzw9Qn0xxIBpr
+SVJumTo9HtOvuRj0BNXMRRYp+lfX2+96cftidyU1q+2Y2v3Fedzlo8Lr7m1ZkPcp
+ugQDz3R0kXvigDPAKhbTj6eAXJ/hcPOCGQ5RTIZJH4JnJ2jKw5lTjJ6y0rbt9Jq9
+NuIqz3GORHYWY4xBmbdTZy0BrbQOePECAwEAAaN7MHkwCQYDVR0TBAIwADAsBglg
+hkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0O
+BBYEFHYUdE6SbzXIWA8m3TwdgUJfAT6+MB8GA1UdIwQYMBaAFPx+7pAUh/GVC8xa
+OXmmZ8GMvpyIMA0GCSqGSIb3DQEBCwUAA4IBAQCZWaDrHbRHNNEaCVVFl5WCNqyd
+y1MpI2iErmfiCTNiG4v9wImTGWIWRHc3dZowniwSb43OuuhlpdWCxeal9nTL6iCP
+B486EMOsVWcfUZkPeK4cBgRXbHTmjxfmQEHHA6NTQdRc7LGq4tjhYs8zmxBVI2HO
+uIp0Qbj/Mb2j8r13IC91Z5Ontq0mQTIg0vvffZsqvcjs3Mmrxr2iX/EYpKNR2DP+
+9msWTZH734tZ2I7vORZOprpdAwELOyVLXkKIcP9qkRPAcFNk0Fl5peBQtBuP1ky5
+kUzWMQq2eoy73miPRnQ8ZjZ/3xTXhMKJ6bCn3tbWrjvc1TwpobfwyfsFH9sq
+-----END CERTIFICATE-----
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pull-SSL/ssl-cert/client.crt" "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pull-SSL/ssl-cert/client.crt"
new file mode 100644
index 000000000..a87d4f3f7
--- /dev/null
+++ "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pull-SSL/ssl-cert/client.crt"
@@ -0,0 +1,82 @@
+Certificate:
+ Data:
+ Version: 3 (0x2)
+ Serial Number: 33129 (0x8169)
+ Signature Algorithm: sha256WithRSAEncryption
+ Issuer: C=CN, ST=GD, L=GZ, O=SST, OU=JessMA, CN=www.jessma.org/emailAddress=ldcsaa@21cn.com
+ Validity
+ Not Before: Jan 1 00:00:00 2016 GMT
+ Not After : Jan 1 00:00:00 2026 GMT
+ Subject: C=CN, ST=GD, O=SST, OU=JessMA, CN=www.jessma.org/emailAddress=ldcsaa@21cn.com
+ Subject Public Key Info:
+ Public Key Algorithm: rsaEncryption
+ Public-Key: (2048 bit)
+ Modulus:
+ 00:e1:65:0e:e5:a3:f7:93:68:bf:ee:3c:5b:46:5a:
+ 52:9e:bd:19:50:7e:53:7a:2b:3e:e5:66:f9:f5:39:
+ 81:78:25:d2:d2:5b:35:b5:d2:d0:63:8c:32:ca:66:
+ 30:1d:16:c5:c8:93:7e:3f:ad:fd:6b:9f:a5:c1:ca:
+ ce:bc:87:c2:b6:ea:98:c8:2b:66:24:b2:ae:9e:2e:
+ 94:0d:a6:42:e4:cf:47:7d:af:81:0d:ff:d9:e0:6c:
+ 3b:cf:38:1a:62:8e:51:b8:9a:39:18:07:18:1a:11:
+ 01:d3:a7:a1:66:ab:33:b0:7f:8a:04:ba:58:6a:8f:
+ 7a:d6:94:cf:5d:90:02:fd:af:cf:0f:50:9f:4c:71:
+ 20:1a:6b:49:52:6e:99:3a:3d:1e:d3:af:b9:18:f4:
+ 04:d5:cc:45:16:29:fa:57:d7:db:ef:7a:71:fb:62:
+ 77:25:35:ab:ed:98:da:fd:c5:79:dc:e5:a3:c2:eb:
+ ee:6d:59:90:f7:29:ba:04:03:cf:74:74:91:7b:e2:
+ 80:33:c0:2a:16:d3:8f:a7:80:5c:9f:e1:70:f3:82:
+ 19:0e:51:4c:86:49:1f:82:67:27:68:ca:c3:99:53:
+ 8c:9e:b2:d2:b6:ed:f4:9a:bd:36:e2:2a:cf:71:8e:
+ 44:76:16:63:8c:41:99:b7:53:67:2d:01:ad:b4:0e:
+ 78:f1
+ Exponent: 65537 (0x10001)
+ X509v3 extensions:
+ X509v3 Basic Constraints:
+ CA:FALSE
+ Netscape Comment:
+ OpenSSL Generated Certificate
+ X509v3 Subject Key Identifier:
+ 76:14:74:4E:92:6F:35:C8:58:0F:26:DD:3C:1D:81:42:5F:01:3E:BE
+ X509v3 Authority Key Identifier:
+ keyid:FC:7E:EE:90:14:87:F1:95:0B:CC:5A:39:79:A6:67:C1:8C:BE:9C:88
+
+ Signature Algorithm: sha256WithRSAEncryption
+ 99:59:a0:eb:1d:b4:47:34:d1:1a:09:55:45:97:95:82:36:ac:
+ 9d:cb:53:29:23:68:84:ae:67:e2:09:33:62:1b:8b:fd:c0:89:
+ 93:19:62:16:44:77:37:75:9a:30:9e:2c:12:6f:8d:ce:ba:e8:
+ 65:a5:d5:82:c5:e6:a5:f6:74:cb:ea:20:8f:07:8f:3a:10:c3:
+ ac:55:67:1f:51:99:0f:78:ae:1c:06:04:57:6c:74:e6:8f:17:
+ e6:40:41:c7:03:a3:53:41:d4:5c:ec:b1:aa:e2:d8:e1:62:cf:
+ 33:9b:10:55:23:61:ce:b8:8a:74:41:b8:ff:31:bd:a3:f2:bd:
+ 77:20:2f:75:67:93:a7:b6:ad:26:41:32:20:d2:fb:df:7d:9b:
+ 2a:bd:c8:ec:dc:c9:ab:c6:bd:a2:5f:f1:18:a4:a3:51:d8:33:
+ fe:f6:6b:16:4d:91:fb:df:8b:59:d8:8e:ef:39:16:4e:a6:ba:
+ 5d:03:01:0b:3b:25:4b:5e:42:88:70:ff:6a:91:13:c0:70:53:
+ 64:d0:59:79:a5:e0:50:b4:1b:8f:d6:4c:b9:91:4c:d6:31:0a:
+ b6:7a:8c:bb:de:68:8f:46:74:3c:66:36:7f:df:14:d7:84:c2:
+ 89:e9:b0:a7:de:d6:d6:ae:3b:dc:d5:3c:29:a1:b7:f0:c9:fb:
+ 05:1f:db:2a
+-----BEGIN CERTIFICATE-----
+MIID6TCCAtGgAwIBAgIDAIFpMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNVBAYTAkNO
+MQswCQYDVQQIDAJHRDELMAkGA1UEBwwCR1oxDDAKBgNVBAoMA1NTVDEPMA0GA1UE
+CwwGSmVzc01BMRcwFQYDVQQDDA53d3cuamVzc21hLm9yZzEeMBwGCSqGSIb3DQEJ
+ARYPbGRjc2FhQDIxY24uY29tMB4XDTE2MDEwMTAwMDAwMFoXDTI2MDEwMTAwMDAw
+MFowcjELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQwwCgYDVQQKDANTU1QxDzAN
+BgNVBAsMBkplc3NNQTEXMBUGA1UEAwwOd3d3Lmplc3NtYS5vcmcxHjAcBgkqhkiG
+9w0BCQEWD2xkY3NhYUAyMWNuLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBAOFlDuWj95Nov+48W0ZaUp69GVB+U3orPuVm+fU5gXgl0tJbNbXS0GOM
+MspmMB0WxciTfj+t/WufpcHKzryHwrbqmMgrZiSyrp4ulA2mQuTPR32vgQ3/2eBs
+O884GmKOUbiaORgHGBoRAdOnoWarM7B/igS6WGqPetaUz12QAv2vzw9Qn0xxIBpr
+SVJumTo9HtOvuRj0BNXMRRYp+lfX2+96cftidyU1q+2Y2v3Fedzlo8Lr7m1ZkPcp
+ugQDz3R0kXvigDPAKhbTj6eAXJ/hcPOCGQ5RTIZJH4JnJ2jKw5lTjJ6y0rbt9Jq9
+NuIqz3GORHYWY4xBmbdTZy0BrbQOePECAwEAAaN7MHkwCQYDVR0TBAIwADAsBglg
+hkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0O
+BBYEFHYUdE6SbzXIWA8m3TwdgUJfAT6+MB8GA1UdIwQYMBaAFPx+7pAUh/GVC8xa
+OXmmZ8GMvpyIMA0GCSqGSIb3DQEBCwUAA4IBAQCZWaDrHbRHNNEaCVVFl5WCNqyd
+y1MpI2iErmfiCTNiG4v9wImTGWIWRHc3dZowniwSb43OuuhlpdWCxeal9nTL6iCP
+B486EMOsVWcfUZkPeK4cBgRXbHTmjxfmQEHHA6NTQdRc7LGq4tjhYs8zmxBVI2HO
+uIp0Qbj/Mb2j8r13IC91Z5Ontq0mQTIg0vvffZsqvcjs3Mmrxr2iX/EYpKNR2DP+
+9msWTZH734tZ2I7vORZOprpdAwELOyVLXkKIcP9qkRPAcFNk0Fl5peBQtBuP1ky5
+kUzWMQq2eoy73miPRnQ8ZjZ/3xTXhMKJ6bCn3tbWrjvc1TwpobfwyfsFH9sq
+-----END CERTIFICATE-----
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pull-SSL/ssl-cert/client.csr" "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pull-SSL/ssl-cert/client.csr"
new file mode 100644
index 000000000..d35803d5b
--- /dev/null
+++ "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pull-SSL/ssl-cert/client.csr"
@@ -0,0 +1,18 @@
+-----BEGIN CERTIFICATE REQUEST-----
+MIIC8TCCAdkCAQAwfzELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQswCQYDVQQH
+DAJHWjEMMAoGA1UECgwDU1NUMQ8wDQYDVQQLDAZKZXNzTUExFzAVBgNVBAMMDnd3
+dy5qZXNzbWEub3JnMR4wHAYJKoZIhvcNAQkBFg9sZGNzYWFAMjFjbi5jb20wggEi
+MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDhZQ7lo/eTaL/uPFtGWlKevRlQ
+flN6Kz7lZvn1OYF4JdLSWzW10tBjjDLKZjAdFsXIk34/rf1rn6XBys68h8K26pjI
+K2Yksq6eLpQNpkLkz0d9r4EN/9ngbDvPOBpijlG4mjkYBxgaEQHTp6FmqzOwf4oE
+ulhqj3rWlM9dkAL9r88PUJ9McSAaa0lSbpk6PR7Tr7kY9ATVzEUWKfpX19vvenH7
+YnclNavtmNr9xXnc5aPC6+5tWZD3KboEA890dJF74oAzwCoW04+ngFyf4XDzghkO
+UUyGSR+CZydoysOZU4yestK27fSavTbiKs9xjkR2FmOMQZm3U2ctAa20DnjxAgMB
+AAGgLTASBgkqhkiG9w0BCQIxBQwDU1NUMBcGCSqGSIb3DQEJBzEKDAhwcG1tQHNz
+dDANBgkqhkiG9w0BAQsFAAOCAQEAtHiWz0XuqZi/2aoinH472W/sqG7S7YizbcQC
+kCRgYqQw32U0ujI2ndTt2WYDgFUlI1KY5N4b5pl2pdDepFWXLcLyG3nyCjXlJng5
+8YLENg02+xsLOZUjZEsY5pxEkrKYBBjt537P+fA83jtxakC+9xvTEC94CxICWMvx
+OVw1mWjUE3a7Hby7ChkOX/PhJdNzHdsMU9fKCWEFFmyJgrNkFc1nB1omt0j+OkXA
+scwFqhji7yJuwxboaDLdnTNIGGBbDLcw44s7udWB4QayvHwuNgcZ8shxlm686Xi5
+K+SXJTi0DPFKcucU2LA+VCLnMtefghCxbrU7fcFyPsJuT+jdsg==
+-----END CERTIFICATE REQUEST-----
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pull-SSL/ssl-cert/client.key" "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pull-SSL/ssl-cert/client.key"
new file mode 100644
index 000000000..a9f3dd0ca
--- /dev/null
+++ "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pull-SSL/ssl-cert/client.key"
@@ -0,0 +1,30 @@
+-----BEGIN RSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: AES-256-CBC,5F6ACADA6B6B1238FD34A0EC0C5EC2ED
+
+F0JylDtptlBaFpbCP9Qa2pRf5z8sBbUta6G+rBwuWn7GxU//Nub49/Mf0uRm3YTN
+PmCbIQKRyn/u92Yk6cJ9vLCiWe89pa+qlv+kF9PWmYo8Lt6dvtSr1TNAjelGvQjC
+HAi58BHoXXIRrZJQKjzFKGcwhWExCAOct5UDuHu64IvWg+LDccd+tTU/kdKEI9QY
+3POohP6etBBsFIoJFd23yxxNrvxK/v0as7EI/SeFzv7Mfn7haL4LxEsN+9XPN/Ap
+U0IxOT84dMgtIsvW2gvit+qNuaSvrocyEOr5uEfpoS58/yyb0VyNg94itkc6IK3X
+Yeokm2YOJk/4yMoZAeNMMDdR82csCzpTTHurMIZLgtr+SO1ChtreKm0XQB8QNyJ+
+CouAAHOBsxTPgVY/QS1TDrmEZv7cHOAvJp7BYvKroD/pi5Wu2IHAlIEXhdW3Evwn
+jyzUgMUHdXJIcngkkopYEoTPVEXsYX6aHvPJI+jDDKIfDM75SOOw1z7Divsb77I8
+n1jMYDUH4i2g2BixfwFRPxZ6NnRLtqM+TD4yecu3zsqvs0UIlrZFuVIl98Guqa1H
+tJKCxWEaJNb5YZg8GgdZFXYWXUN/HtFqWJelhGcjy48RjOy7LHJ30fkXV07b2s6M
+XcXj9g4jRRyAiZ/kmTqs+Oj6hn+iI4vdGumc2sG0+ZkUwDkj3zfn1N1+J/htVM1z
+Y2kHpKGZzQZ4eriy6CM++FrZ9CSNIPqh5AzayPuMxvEtd27vBnO8nKMwThbhGPtj
+fd7uPPzfG/W7Zo55lYL5opEzvOdULWm8+31ojitN7GSjsFW46HWoyYfTOlTAzP5+
+yPlUGxUyBhlqeXnQNTiLtRb22I2FF41HYH7GsYcxonHw3rKCcJedzL5BMg6Ic2xN
+ZxwXdj20rkugtcSAPxp3OGrmBiCX0wYiZaSgNg5zqI1SIhiWzkq64xoiIFlmxGEo
+Q/Vv7mpRmf1X0eTjiTYz4tYU6TPgtAqLLpmVNbozPnb5eGaMDbRlJnGJjqlXzPAw
+7qUhsb/KZ/k7yZLE+rseicwtAYA0th9A2tpc0CY3/EiL0w5E3zR0SPMinCJeO0rJ
+91njgDPxJ5lPXC04Dlgt/a1WK6D/yQ2kpIiNBUIlGZtr+nD9GqPYiGTqND53TL5f
+PJrr1PibL2l3fyhNDgNhgmY1CGpB6hNkqPOpit+XhGq6X0PlELcj7zYN3acW47jp
+KVm2lT1AXhzqemTWqPQL1+3s8ix0nGVNlmzsOFHqCkmr7FZb76hD5YTtGkOU/Kn3
+I5GqS5GHSCAVJnJWuFk2Y8qqg69mJREcoKThoYsuo8hw9JqZM34JIqqT029Nj35B
+xau4hSXkmHuUCGpwbr0yvsz3ikRfM6y0cT3T6oBiWgfYktpX//89YbyYGcQX7tK0
+aaHW2zvAfMyCWT0CxRen5GAyVeb+WFBdo+xD0HpQcRFtByiNNXmm4kJAoZujeHpe
+ZWcu3xkVcTqWMixAYHcDv3L0EXUnVeWplovRh1+OSm7YvdaLL3cctHoW3a8Kzdc1
+rtoGVI+f4xSEDheB5P4NX6UYbDLIGMPPuR0F5EliL+vmyJcEMuLY8KTPJ0uwf7Ns
+-----END RSA PRIVATE KEY-----
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pull-SSL/ssl-cert/client.pem" "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pull-SSL/ssl-cert/client.pem"
new file mode 100644
index 000000000..600dc8514
--- /dev/null
+++ "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pull-SSL/ssl-cert/client.pem"
@@ -0,0 +1,53 @@
+-----BEGIN RSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: AES-256-CBC,5F6ACADA6B6B1238FD34A0EC0C5EC2ED
+
+F0JylDtptlBaFpbCP9Qa2pRf5z8sBbUta6G+rBwuWn7GxU//Nub49/Mf0uRm3YTN
+PmCbIQKRyn/u92Yk6cJ9vLCiWe89pa+qlv+kF9PWmYo8Lt6dvtSr1TNAjelGvQjC
+HAi58BHoXXIRrZJQKjzFKGcwhWExCAOct5UDuHu64IvWg+LDccd+tTU/kdKEI9QY
+3POohP6etBBsFIoJFd23yxxNrvxK/v0as7EI/SeFzv7Mfn7haL4LxEsN+9XPN/Ap
+U0IxOT84dMgtIsvW2gvit+qNuaSvrocyEOr5uEfpoS58/yyb0VyNg94itkc6IK3X
+Yeokm2YOJk/4yMoZAeNMMDdR82csCzpTTHurMIZLgtr+SO1ChtreKm0XQB8QNyJ+
+CouAAHOBsxTPgVY/QS1TDrmEZv7cHOAvJp7BYvKroD/pi5Wu2IHAlIEXhdW3Evwn
+jyzUgMUHdXJIcngkkopYEoTPVEXsYX6aHvPJI+jDDKIfDM75SOOw1z7Divsb77I8
+n1jMYDUH4i2g2BixfwFRPxZ6NnRLtqM+TD4yecu3zsqvs0UIlrZFuVIl98Guqa1H
+tJKCxWEaJNb5YZg8GgdZFXYWXUN/HtFqWJelhGcjy48RjOy7LHJ30fkXV07b2s6M
+XcXj9g4jRRyAiZ/kmTqs+Oj6hn+iI4vdGumc2sG0+ZkUwDkj3zfn1N1+J/htVM1z
+Y2kHpKGZzQZ4eriy6CM++FrZ9CSNIPqh5AzayPuMxvEtd27vBnO8nKMwThbhGPtj
+fd7uPPzfG/W7Zo55lYL5opEzvOdULWm8+31ojitN7GSjsFW46HWoyYfTOlTAzP5+
+yPlUGxUyBhlqeXnQNTiLtRb22I2FF41HYH7GsYcxonHw3rKCcJedzL5BMg6Ic2xN
+ZxwXdj20rkugtcSAPxp3OGrmBiCX0wYiZaSgNg5zqI1SIhiWzkq64xoiIFlmxGEo
+Q/Vv7mpRmf1X0eTjiTYz4tYU6TPgtAqLLpmVNbozPnb5eGaMDbRlJnGJjqlXzPAw
+7qUhsb/KZ/k7yZLE+rseicwtAYA0th9A2tpc0CY3/EiL0w5E3zR0SPMinCJeO0rJ
+91njgDPxJ5lPXC04Dlgt/a1WK6D/yQ2kpIiNBUIlGZtr+nD9GqPYiGTqND53TL5f
+PJrr1PibL2l3fyhNDgNhgmY1CGpB6hNkqPOpit+XhGq6X0PlELcj7zYN3acW47jp
+KVm2lT1AXhzqemTWqPQL1+3s8ix0nGVNlmzsOFHqCkmr7FZb76hD5YTtGkOU/Kn3
+I5GqS5GHSCAVJnJWuFk2Y8qqg69mJREcoKThoYsuo8hw9JqZM34JIqqT029Nj35B
+xau4hSXkmHuUCGpwbr0yvsz3ikRfM6y0cT3T6oBiWgfYktpX//89YbyYGcQX7tK0
+aaHW2zvAfMyCWT0CxRen5GAyVeb+WFBdo+xD0HpQcRFtByiNNXmm4kJAoZujeHpe
+ZWcu3xkVcTqWMixAYHcDv3L0EXUnVeWplovRh1+OSm7YvdaLL3cctHoW3a8Kzdc1
+rtoGVI+f4xSEDheB5P4NX6UYbDLIGMPPuR0F5EliL+vmyJcEMuLY8KTPJ0uwf7Ns
+-----END RSA PRIVATE KEY-----
+-----BEGIN CERTIFICATE-----
+MIID6TCCAtGgAwIBAgIDAIFpMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNVBAYTAkNO
+MQswCQYDVQQIDAJHRDELMAkGA1UEBwwCR1oxDDAKBgNVBAoMA1NTVDEPMA0GA1UE
+CwwGSmVzc01BMRcwFQYDVQQDDA53d3cuamVzc21hLm9yZzEeMBwGCSqGSIb3DQEJ
+ARYPbGRjc2FhQDIxY24uY29tMB4XDTE2MDEwMTAwMDAwMFoXDTI2MDEwMTAwMDAw
+MFowcjELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQwwCgYDVQQKDANTU1QxDzAN
+BgNVBAsMBkplc3NNQTEXMBUGA1UEAwwOd3d3Lmplc3NtYS5vcmcxHjAcBgkqhkiG
+9w0BCQEWD2xkY3NhYUAyMWNuLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBAOFlDuWj95Nov+48W0ZaUp69GVB+U3orPuVm+fU5gXgl0tJbNbXS0GOM
+MspmMB0WxciTfj+t/WufpcHKzryHwrbqmMgrZiSyrp4ulA2mQuTPR32vgQ3/2eBs
+O884GmKOUbiaORgHGBoRAdOnoWarM7B/igS6WGqPetaUz12QAv2vzw9Qn0xxIBpr
+SVJumTo9HtOvuRj0BNXMRRYp+lfX2+96cftidyU1q+2Y2v3Fedzlo8Lr7m1ZkPcp
+ugQDz3R0kXvigDPAKhbTj6eAXJ/hcPOCGQ5RTIZJH4JnJ2jKw5lTjJ6y0rbt9Jq9
+NuIqz3GORHYWY4xBmbdTZy0BrbQOePECAwEAAaN7MHkwCQYDVR0TBAIwADAsBglg
+hkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0O
+BBYEFHYUdE6SbzXIWA8m3TwdgUJfAT6+MB8GA1UdIwQYMBaAFPx+7pAUh/GVC8xa
+OXmmZ8GMvpyIMA0GCSqGSIb3DQEBCwUAA4IBAQCZWaDrHbRHNNEaCVVFl5WCNqyd
+y1MpI2iErmfiCTNiG4v9wImTGWIWRHc3dZowniwSb43OuuhlpdWCxeal9nTL6iCP
+B486EMOsVWcfUZkPeK4cBgRXbHTmjxfmQEHHA6NTQdRc7LGq4tjhYs8zmxBVI2HO
+uIp0Qbj/Mb2j8r13IC91Z5Ontq0mQTIg0vvffZsqvcjs3Mmrxr2iX/EYpKNR2DP+
+9msWTZH734tZ2I7vORZOprpdAwELOyVLXkKIcP9qkRPAcFNk0Fl5peBQtBuP1ky5
+kUzWMQq2eoy73miPRnQ8ZjZ/3xTXhMKJ6bCn3tbWrjvc1TwpobfwyfsFH9sq
+-----END CERTIFICATE-----
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pull-SSL/ssl-cert/server.cer" "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pull-SSL/ssl-cert/server.cer"
new file mode 100644
index 000000000..0f8fe3b83
--- /dev/null
+++ "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pull-SSL/ssl-cert/server.cer"
@@ -0,0 +1,23 @@
+-----BEGIN CERTIFICATE-----
+MIID6TCCAtGgAwIBAgIDAIFoMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNVBAYTAkNO
+MQswCQYDVQQIDAJHRDELMAkGA1UEBwwCR1oxDDAKBgNVBAoMA1NTVDEPMA0GA1UE
+CwwGSmVzc01BMRcwFQYDVQQDDA53d3cuamVzc21hLm9yZzEeMBwGCSqGSIb3DQEJ
+ARYPbGRjc2FhQDIxY24uY29tMB4XDTE2MDEwMTAwMDAwMFoXDTI2MDEwMTAwMDAw
+MFowcjELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQwwCgYDVQQKDANTU1QxDzAN
+BgNVBAsMBkplc3NNQTEXMBUGA1UEAwwOd3d3Lmplc3NtYS5vcmcxHjAcBgkqhkiG
+9w0BCQEWD2xkY3NhYUAyMWNuLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBALEOPuYKEl/iN3ub/QNaaqo0Hynk62znTp5kXj0zQAqxLxwHU117xHBk
+0LCZux0LnDFl9JAlilvqfeaXRWmQd6hrvV+1mNpnIe2xfyNWwa37QDNjXB7mEg3V
+O/dN9KeVxq9RlH/dQJ7qZlYy4i7wznYMUlz38378wYoOvdAQBX1UrdjWA5T4q0Da
+cRRAV0fIp45hBarp6T1nhDEvttU8yud2lIEV9jWblkyGIhU4FisGOIRRGhnKzCAh
+CYSZ59mq8Wf4FawMyz/H4noHcWWJu4ID1oAE+VFGXKm78qjp/T71/myn5lcGquTx
+oSoJrx7og+529eaJwgeJd2JF7OQ5NysCAwEAAaN7MHkwCQYDVR0TBAIwADAsBglg
+hkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0O
+BBYEFO0CmyFtrGLrkNkkA62QPzSp8vgJMB8GA1UdIwQYMBaAFPx+7pAUh/GVC8xa
+OXmmZ8GMvpyIMA0GCSqGSIb3DQEBCwUAA4IBAQBT1JGXn7HMyNHZntM4kCp7kwN9
+HSpcbQxbWFtk+l8ANP9SqCIEd4xc4rAaUDDDMdD2S0wF9iio1MA1KC5OoJ5Dqw6C
+yTa08LRowlmnw+NNZC2xzaSRmzLGlPDHNauZ/G2ScdWsqR5v2+pKF7bYxAajRkk5
+oqRRDI6X7vHsvX/kqTn9Prk0sFmU0EU64az2iUe/MG9v1WY8eOV+tTEq29GuYYjJ
+E3H8vaeq1fTB0vYgT5xoCc36xVXju/3l17CE12n5of004u4eRi3/T0wbp9WgG2ns
+wjetaYeIAWS/AJQzIK22tztGAbAk6kTgsO5YLx2h6GLGpytDXWvgzr2PdEu1
+-----END CERTIFICATE-----
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pull-SSL/ssl-cert/server.crt" "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pull-SSL/ssl-cert/server.crt"
new file mode 100644
index 000000000..a6213ed40
--- /dev/null
+++ "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pull-SSL/ssl-cert/server.crt"
@@ -0,0 +1,82 @@
+Certificate:
+ Data:
+ Version: 3 (0x2)
+ Serial Number: 33128 (0x8168)
+ Signature Algorithm: sha256WithRSAEncryption
+ Issuer: C=CN, ST=GD, L=GZ, O=SST, OU=JessMA, CN=www.jessma.org/emailAddress=ldcsaa@21cn.com
+ Validity
+ Not Before: Jan 1 00:00:00 2016 GMT
+ Not After : Jan 1 00:00:00 2026 GMT
+ Subject: C=CN, ST=GD, O=SST, OU=JessMA, CN=www.jessma.org/emailAddress=ldcsaa@21cn.com
+ Subject Public Key Info:
+ Public Key Algorithm: rsaEncryption
+ Public-Key: (2048 bit)
+ Modulus:
+ 00:b1:0e:3e:e6:0a:12:5f:e2:37:7b:9b:fd:03:5a:
+ 6a:aa:34:1f:29:e4:eb:6c:e7:4e:9e:64:5e:3d:33:
+ 40:0a:b1:2f:1c:07:53:5d:7b:c4:70:64:d0:b0:99:
+ bb:1d:0b:9c:31:65:f4:90:25:8a:5b:ea:7d:e6:97:
+ 45:69:90:77:a8:6b:bd:5f:b5:98:da:67:21:ed:b1:
+ 7f:23:56:c1:ad:fb:40:33:63:5c:1e:e6:12:0d:d5:
+ 3b:f7:4d:f4:a7:95:c6:af:51:94:7f:dd:40:9e:ea:
+ 66:56:32:e2:2e:f0:ce:76:0c:52:5c:f7:f3:7e:fc:
+ c1:8a:0e:bd:d0:10:05:7d:54:ad:d8:d6:03:94:f8:
+ ab:40:da:71:14:40:57:47:c8:a7:8e:61:05:aa:e9:
+ e9:3d:67:84:31:2f:b6:d5:3c:ca:e7:76:94:81:15:
+ f6:35:9b:96:4c:86:22:15:38:16:2b:06:38:84:51:
+ 1a:19:ca:cc:20:21:09:84:99:e7:d9:aa:f1:67:f8:
+ 15:ac:0c:cb:3f:c7:e2:7a:07:71:65:89:bb:82:03:
+ d6:80:04:f9:51:46:5c:a9:bb:f2:a8:e9:fd:3e:f5:
+ fe:6c:a7:e6:57:06:aa:e4:f1:a1:2a:09:af:1e:e8:
+ 83:ee:76:f5:e6:89:c2:07:89:77:62:45:ec:e4:39:
+ 37:2b
+ Exponent: 65537 (0x10001)
+ X509v3 extensions:
+ X509v3 Basic Constraints:
+ CA:FALSE
+ Netscape Comment:
+ OpenSSL Generated Certificate
+ X509v3 Subject Key Identifier:
+ ED:02:9B:21:6D:AC:62:EB:90:D9:24:03:AD:90:3F:34:A9:F2:F8:09
+ X509v3 Authority Key Identifier:
+ keyid:FC:7E:EE:90:14:87:F1:95:0B:CC:5A:39:79:A6:67:C1:8C:BE:9C:88
+
+ Signature Algorithm: sha256WithRSAEncryption
+ 53:d4:91:97:9f:b1:cc:c8:d1:d9:9e:d3:38:90:2a:7b:93:03:
+ 7d:1d:2a:5c:6d:0c:5b:58:5b:64:fa:5f:00:34:ff:52:a8:22:
+ 04:77:8c:5c:e2:b0:1a:50:30:c3:31:d0:f6:4b:4c:05:f6:28:
+ a8:d4:c0:35:28:2e:4e:a0:9e:43:ab:0e:82:c9:36:b4:f0:b4:
+ 68:c2:59:a7:c3:e3:4d:64:2d:b1:cd:a4:91:9b:32:c6:94:f0:
+ c7:35:ab:99:fc:6d:92:71:d5:ac:a9:1e:6f:db:ea:4a:17:b6:
+ d8:c4:06:a3:46:49:39:a2:a4:51:0c:8e:97:ee:f1:ec:bd:7f:
+ e4:a9:39:fd:3e:b9:34:b0:59:94:d0:45:3a:e1:ac:f6:89:47:
+ bf:30:6f:6f:d5:66:3c:78:e5:7e:b5:31:2a:db:d1:ae:61:88:
+ c9:13:71:fc:bd:a7:aa:d5:f4:c1:d2:f6:20:4f:9c:68:09:cd:
+ fa:c5:55:e3:bb:fd:e5:d7:b0:84:d7:69:f9:a1:fd:34:e2:ee:
+ 1e:46:2d:ff:4f:4c:1b:a7:d5:a0:1b:69:ec:c2:37:ad:69:87:
+ 88:01:64:bf:00:94:33:20:ad:b6:b7:3b:46:01:b0:24:ea:44:
+ e0:b0:ee:58:2f:1d:a1:e8:62:c6:a7:2b:43:5d:6b:e0:ce:bd:
+ 8f:74:4b:b5
+-----BEGIN CERTIFICATE-----
+MIID6TCCAtGgAwIBAgIDAIFoMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNVBAYTAkNO
+MQswCQYDVQQIDAJHRDELMAkGA1UEBwwCR1oxDDAKBgNVBAoMA1NTVDEPMA0GA1UE
+CwwGSmVzc01BMRcwFQYDVQQDDA53d3cuamVzc21hLm9yZzEeMBwGCSqGSIb3DQEJ
+ARYPbGRjc2FhQDIxY24uY29tMB4XDTE2MDEwMTAwMDAwMFoXDTI2MDEwMTAwMDAw
+MFowcjELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQwwCgYDVQQKDANTU1QxDzAN
+BgNVBAsMBkplc3NNQTEXMBUGA1UEAwwOd3d3Lmplc3NtYS5vcmcxHjAcBgkqhkiG
+9w0BCQEWD2xkY3NhYUAyMWNuLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBALEOPuYKEl/iN3ub/QNaaqo0Hynk62znTp5kXj0zQAqxLxwHU117xHBk
+0LCZux0LnDFl9JAlilvqfeaXRWmQd6hrvV+1mNpnIe2xfyNWwa37QDNjXB7mEg3V
+O/dN9KeVxq9RlH/dQJ7qZlYy4i7wznYMUlz38378wYoOvdAQBX1UrdjWA5T4q0Da
+cRRAV0fIp45hBarp6T1nhDEvttU8yud2lIEV9jWblkyGIhU4FisGOIRRGhnKzCAh
+CYSZ59mq8Wf4FawMyz/H4noHcWWJu4ID1oAE+VFGXKm78qjp/T71/myn5lcGquTx
+oSoJrx7og+529eaJwgeJd2JF7OQ5NysCAwEAAaN7MHkwCQYDVR0TBAIwADAsBglg
+hkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0O
+BBYEFO0CmyFtrGLrkNkkA62QPzSp8vgJMB8GA1UdIwQYMBaAFPx+7pAUh/GVC8xa
+OXmmZ8GMvpyIMA0GCSqGSIb3DQEBCwUAA4IBAQBT1JGXn7HMyNHZntM4kCp7kwN9
+HSpcbQxbWFtk+l8ANP9SqCIEd4xc4rAaUDDDMdD2S0wF9iio1MA1KC5OoJ5Dqw6C
+yTa08LRowlmnw+NNZC2xzaSRmzLGlPDHNauZ/G2ScdWsqR5v2+pKF7bYxAajRkk5
+oqRRDI6X7vHsvX/kqTn9Prk0sFmU0EU64az2iUe/MG9v1WY8eOV+tTEq29GuYYjJ
+E3H8vaeq1fTB0vYgT5xoCc36xVXju/3l17CE12n5of004u4eRi3/T0wbp9WgG2ns
+wjetaYeIAWS/AJQzIK22tztGAbAk6kTgsO5YLx2h6GLGpytDXWvgzr2PdEu1
+-----END CERTIFICATE-----
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pull-SSL/ssl-cert/server.csr" "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pull-SSL/ssl-cert/server.csr"
new file mode 100644
index 000000000..0306648a3
--- /dev/null
+++ "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pull-SSL/ssl-cert/server.csr"
@@ -0,0 +1,18 @@
+-----BEGIN CERTIFICATE REQUEST-----
+MIIC8TCCAdkCAQAwfzELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQswCQYDVQQH
+DAJHWjEMMAoGA1UECgwDU1NUMQ8wDQYDVQQLDAZKZXNzTUExFzAVBgNVBAMMDnd3
+dy5qZXNzbWEub3JnMR4wHAYJKoZIhvcNAQkBFg9sZGNzYWFAMjFjbi5jb20wggEi
+MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCxDj7mChJf4jd7m/0DWmqqNB8p
+5Ots506eZF49M0AKsS8cB1Nde8RwZNCwmbsdC5wxZfSQJYpb6n3ml0VpkHeoa71f
+tZjaZyHtsX8jVsGt+0AzY1we5hIN1Tv3TfSnlcavUZR/3UCe6mZWMuIu8M52DFJc
+9/N+/MGKDr3QEAV9VK3Y1gOU+KtA2nEUQFdHyKeOYQWq6ek9Z4QxL7bVPMrndpSB
+FfY1m5ZMhiIVOBYrBjiEURoZyswgIQmEmefZqvFn+BWsDMs/x+J6B3FlibuCA9aA
+BPlRRlypu/Ko6f0+9f5sp+ZXBqrk8aEqCa8e6IPudvXmicIHiXdiRezkOTcrAgMB
+AAGgLTASBgkqhkiG9w0BCQIxBQwDU1NUMBcGCSqGSIb3DQEJBzEKDAhwcG1tQHNz
+dDANBgkqhkiG9w0BAQsFAAOCAQEAk9/S/9YUKjayh62Tagnk3hcJ5+YKJLHRtvv0
+Qu2HyPzpvyxORjQpnHaf+vpUj1W1amVQl7NSlNV181VzITtrySJyOdjvxTOvmITY
+stgCOXQiZeR6I9s2cZsh0yDcpiytlwnjWrFTgtIQ1dZgBRAvvJQIqoyrpgb22fva
+S3jilbFASColhEBeO0S8matO50qYwil7BabgQoUiu4QT6MhCXsJpNwi1qDD2rC/o
+Kffj63s4dRyJgqdbiYXMTDSfZvbx7UfnNCATBlniaoOTqbut1vmRGDYE+mkxly5X
+3KgcLvgpBoq0uUXNwsTNWo6CNthD8kY0fAkz34LG2aTKGy8Now==
+-----END CERTIFICATE REQUEST-----
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pull-SSL/ssl-cert/server.key" "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pull-SSL/ssl-cert/server.key"
new file mode 100644
index 000000000..2f36a1915
--- /dev/null
+++ "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pull-SSL/ssl-cert/server.key"
@@ -0,0 +1,30 @@
+-----BEGIN RSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: AES-256-CBC,107800C9B21513D8F642A394FAD9047E
+
+bmaTCBYAzKzpUrdaT6sb/dbH5o3JbFu2d8s1NfKhghYUG/RWgzx5H8QWSsh1Ll+8
+701HwSwauwbKaBWzWP5bj4mjw9hXcva8l1QWeuW+Q0GsE7uWNZGFQZbCxER/9jOu
+36KMlx0twcIEGs9PNwnY7d9oS/BMVpiUqhL8sPihMLCFK0fm6VGjMrfdIZJuZXEv
+BKt+c0UPkkPmivZjSm6iTPKI6VpGeyg0sM/uZr+mRj7IOAD6vsSQnCfUOq00Rm14
+ABrer8dCWJDKrx1iLq7tFojII+JcB7oBy+8KC/t0MlqmIP2jx93/MVW5lbZ3mj2v
+BanVQvklHTLe/WHjoaltqBEKN0sIzfyed6qWudKHUa8yjAr0PS4rsTbO0S4fFz+A
+KFWEs8fuXsanFHt5akWDTMiw1n4HaiioT4jjhWRRIKGEndztyGMklShYAdSTqsZO
+vzPO+xqLlg6wOgCGZ3Kl/c243XyLMCI+lJlzu3ccqzQJbNfPADXUcxSTqaEByWG3
+YIXttKY5WFBcNjf9B3c1qfJMt3nGY2QewnL+rNm/qpose/AsFS+2aqMeRw7fYh3R
+O+H+G+0gxrSK0E3WiewMIvUqFI6W300MWx6O7d87OkbfwMLpLPumsfLKswOKaAIF
+p0RxSABSe5ixqnErsoiYGNf3bln4tsQ+v5jYUY+Gn/9mVTPEYs6uwC78UW5Gj+Za
+lB3V8aRxQjWBerhLhf3iCmkkOVaG5JvVJDmvwo6iBRZ4NNzkAqOJm/UvfWoKN91b
+riHAWNayqvOfzaK6KYiJlOR9D779pK6xL+gZ0zo3rIA2yzs5MJAvJmaq6SQmQFl1
+Vzhnf3hIGJFtJYQJhlr36pkPgG9jVdJPhZisY9EsIAHvDbbLlBNexSmZc2RZmsVL
+VG6WqOm85DzuZxGULK/CnXCLpBMKWf9y5YPJrLkuwQILrr2btnAivPfUU80S3E0c
+VslBodCkSGVx3iQoAVJv2+6ZNMRNLVzpLnlaVtHl/gvw+InJlXmzBlZQFKOCaOny
+sz67qKmK1KWui2G3AzuvTEL9O++FVO+irpSNSLozxif/erLJl7R60pBkrWwd6jGB
+8qQv7ni+xIeXDBLSu26zPunLR/2PhrrCv49KmqNmF7sSNx6xmcc3CfgEy+5+Tm97
+KPE4JlaH/ZW61TlzXojbZMaiJltkFkpagFgm2bXrN1nMk2d6R+Yfe78lSvPKoB8k
+1m7LY1lNXFZJh2hxQRhdV9oTokFahUSitQCg1S3eASuE2jFRRL4jrh4LcBWUHZnJ
+OOAwBDOF4RfGyfiDs0IlrnLvK3a2KorlHfvUyj+cwkRmgI8sWgkJuNpz1mKDn5UZ
+yGn2JczHY0CiInRGgwMnS1Z/WpJZYGNh7pP7Hm1RnzVslkWSJGaKJv9jDNUCyy8R
+L+nwUSd6m6r8YWcs3zdBYsDHGOO5MgAU5Q8yuLbEgaK5NJSJgGkm+ya5oB88Y6T0
+JcL/u5xKw4kJiKgiLr3zrWe5qV6+lpH7fGKy7fucJWltDkfQSD3Dp0b64TW4FuQq
+VQhDR+KykLK6QxM2x3/maMfG578Ku1F6g4RboDR/6uCFu6hQuCoNYBk/QB0XpY13
+-----END RSA PRIVATE KEY-----
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pull-SSL/ssl-cert/server.pem" "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pull-SSL/ssl-cert/server.pem"
new file mode 100644
index 000000000..1d6040ca9
--- /dev/null
+++ "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pull-SSL/ssl-cert/server.pem"
@@ -0,0 +1,53 @@
+-----BEGIN RSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: AES-256-CBC,107800C9B21513D8F642A394FAD9047E
+
+bmaTCBYAzKzpUrdaT6sb/dbH5o3JbFu2d8s1NfKhghYUG/RWgzx5H8QWSsh1Ll+8
+701HwSwauwbKaBWzWP5bj4mjw9hXcva8l1QWeuW+Q0GsE7uWNZGFQZbCxER/9jOu
+36KMlx0twcIEGs9PNwnY7d9oS/BMVpiUqhL8sPihMLCFK0fm6VGjMrfdIZJuZXEv
+BKt+c0UPkkPmivZjSm6iTPKI6VpGeyg0sM/uZr+mRj7IOAD6vsSQnCfUOq00Rm14
+ABrer8dCWJDKrx1iLq7tFojII+JcB7oBy+8KC/t0MlqmIP2jx93/MVW5lbZ3mj2v
+BanVQvklHTLe/WHjoaltqBEKN0sIzfyed6qWudKHUa8yjAr0PS4rsTbO0S4fFz+A
+KFWEs8fuXsanFHt5akWDTMiw1n4HaiioT4jjhWRRIKGEndztyGMklShYAdSTqsZO
+vzPO+xqLlg6wOgCGZ3Kl/c243XyLMCI+lJlzu3ccqzQJbNfPADXUcxSTqaEByWG3
+YIXttKY5WFBcNjf9B3c1qfJMt3nGY2QewnL+rNm/qpose/AsFS+2aqMeRw7fYh3R
+O+H+G+0gxrSK0E3WiewMIvUqFI6W300MWx6O7d87OkbfwMLpLPumsfLKswOKaAIF
+p0RxSABSe5ixqnErsoiYGNf3bln4tsQ+v5jYUY+Gn/9mVTPEYs6uwC78UW5Gj+Za
+lB3V8aRxQjWBerhLhf3iCmkkOVaG5JvVJDmvwo6iBRZ4NNzkAqOJm/UvfWoKN91b
+riHAWNayqvOfzaK6KYiJlOR9D779pK6xL+gZ0zo3rIA2yzs5MJAvJmaq6SQmQFl1
+Vzhnf3hIGJFtJYQJhlr36pkPgG9jVdJPhZisY9EsIAHvDbbLlBNexSmZc2RZmsVL
+VG6WqOm85DzuZxGULK/CnXCLpBMKWf9y5YPJrLkuwQILrr2btnAivPfUU80S3E0c
+VslBodCkSGVx3iQoAVJv2+6ZNMRNLVzpLnlaVtHl/gvw+InJlXmzBlZQFKOCaOny
+sz67qKmK1KWui2G3AzuvTEL9O++FVO+irpSNSLozxif/erLJl7R60pBkrWwd6jGB
+8qQv7ni+xIeXDBLSu26zPunLR/2PhrrCv49KmqNmF7sSNx6xmcc3CfgEy+5+Tm97
+KPE4JlaH/ZW61TlzXojbZMaiJltkFkpagFgm2bXrN1nMk2d6R+Yfe78lSvPKoB8k
+1m7LY1lNXFZJh2hxQRhdV9oTokFahUSitQCg1S3eASuE2jFRRL4jrh4LcBWUHZnJ
+OOAwBDOF4RfGyfiDs0IlrnLvK3a2KorlHfvUyj+cwkRmgI8sWgkJuNpz1mKDn5UZ
+yGn2JczHY0CiInRGgwMnS1Z/WpJZYGNh7pP7Hm1RnzVslkWSJGaKJv9jDNUCyy8R
+L+nwUSd6m6r8YWcs3zdBYsDHGOO5MgAU5Q8yuLbEgaK5NJSJgGkm+ya5oB88Y6T0
+JcL/u5xKw4kJiKgiLr3zrWe5qV6+lpH7fGKy7fucJWltDkfQSD3Dp0b64TW4FuQq
+VQhDR+KykLK6QxM2x3/maMfG578Ku1F6g4RboDR/6uCFu6hQuCoNYBk/QB0XpY13
+-----END RSA PRIVATE KEY-----
+-----BEGIN CERTIFICATE-----
+MIID6TCCAtGgAwIBAgIDAIFoMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNVBAYTAkNO
+MQswCQYDVQQIDAJHRDELMAkGA1UEBwwCR1oxDDAKBgNVBAoMA1NTVDEPMA0GA1UE
+CwwGSmVzc01BMRcwFQYDVQQDDA53d3cuamVzc21hLm9yZzEeMBwGCSqGSIb3DQEJ
+ARYPbGRjc2FhQDIxY24uY29tMB4XDTE2MDEwMTAwMDAwMFoXDTI2MDEwMTAwMDAw
+MFowcjELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQwwCgYDVQQKDANTU1QxDzAN
+BgNVBAsMBkplc3NNQTEXMBUGA1UEAwwOd3d3Lmplc3NtYS5vcmcxHjAcBgkqhkiG
+9w0BCQEWD2xkY3NhYUAyMWNuLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBALEOPuYKEl/iN3ub/QNaaqo0Hynk62znTp5kXj0zQAqxLxwHU117xHBk
+0LCZux0LnDFl9JAlilvqfeaXRWmQd6hrvV+1mNpnIe2xfyNWwa37QDNjXB7mEg3V
+O/dN9KeVxq9RlH/dQJ7qZlYy4i7wznYMUlz38378wYoOvdAQBX1UrdjWA5T4q0Da
+cRRAV0fIp45hBarp6T1nhDEvttU8yud2lIEV9jWblkyGIhU4FisGOIRRGhnKzCAh
+CYSZ59mq8Wf4FawMyz/H4noHcWWJu4ID1oAE+VFGXKm78qjp/T71/myn5lcGquTx
+oSoJrx7og+529eaJwgeJd2JF7OQ5NysCAwEAAaN7MHkwCQYDVR0TBAIwADAsBglg
+hkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0O
+BBYEFO0CmyFtrGLrkNkkA62QPzSp8vgJMB8GA1UdIwQYMBaAFPx+7pAUh/GVC8xa
+OXmmZ8GMvpyIMA0GCSqGSIb3DQEBCwUAA4IBAQBT1JGXn7HMyNHZntM4kCp7kwN9
+HSpcbQxbWFtk+l8ANP9SqCIEd4xc4rAaUDDDMdD2S0wF9iio1MA1KC5OoJ5Dqw6C
+yTa08LRowlmnw+NNZC2xzaSRmzLGlPDHNauZ/G2ScdWsqR5v2+pKF7bYxAajRkk5
+oqRRDI6X7vHsvX/kqTn9Prk0sFmU0EU64az2iUe/MG9v1WY8eOV+tTEq29GuYYjJ
+E3H8vaeq1fTB0vYgT5xoCc36xVXju/3l17CE12n5of004u4eRi3/T0wbp9WgG2ns
+wjetaYeIAWS/AJQzIK22tztGAbAk6kTgsO5YLx2h6GLGpytDXWvgzr2PdEu1
+-----END CERTIFICATE-----
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pull/FileTransfer-PullClient.e" "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pull/FileTransfer-PullClient.e"
new file mode 100644
index 000000000..d98eefed6
Binary files /dev/null and "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pull/FileTransfer-PullClient.e" differ
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pull/FileTransfer-PullServer.e" "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pull/FileTransfer-PullServer.e"
new file mode 100644
index 000000000..4b57100e9
Binary files /dev/null and "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pull/FileTransfer-PullServer.e" differ
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pull/HPSocket.ec" "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pull/HPSocket.ec"
new file mode 100644
index 000000000..d839e3d18
Binary files /dev/null and "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pull/HPSocket.ec" differ
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pull/HPSocket4C-SSL.dll" "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pull/HPSocket4C-SSL.dll"
new file mode 100644
index 000000000..75e525a4c
Binary files /dev/null and "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\226\207\344\273\266\344\274\240\350\276\223-Pull/HPSocket4C-SSL.dll" differ
diff --git "a/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\250\241\345\235\227\344\275\277\347\224\250\350\257\264\346\230\216.txt" "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\250\241\345\235\227\344\275\277\347\224\250\350\257\264\346\230\216.txt"
new file mode 100644
index 000000000..a874c3ede
--- /dev/null
+++ "b/HP-Socket/Demo/Other Languages Demos/E/\346\250\241\345\235\227/\346\250\241\345\235\227\344\275\277\347\224\250\350\257\264\346\230\216.txt"
@@ -0,0 +1 @@
+必须先初始化模块!否则将出错!
\ No newline at end of file
diff --git a/HP-Socket/Demo/Release/x64/HPSocket-SSL_U.dll b/HP-Socket/Demo/Release/x64/HPSocket-SSL_U.dll
index a6327f45c..4ccc59940 100644
Binary files a/HP-Socket/Demo/Release/x64/HPSocket-SSL_U.dll and b/HP-Socket/Demo/Release/x64/HPSocket-SSL_U.dll differ
diff --git a/HP-Socket/Demo/Release/x64/HPSocket4C-SSL_U.dll b/HP-Socket/Demo/Release/x64/HPSocket4C-SSL_U.dll
index 46f827c4a..8585b3809 100644
Binary files a/HP-Socket/Demo/Release/x64/HPSocket4C-SSL_U.dll and b/HP-Socket/Demo/Release/x64/HPSocket4C-SSL_U.dll differ
diff --git a/HP-Socket/Demo/Release/x64/HPSocket4C_U.dll b/HP-Socket/Demo/Release/x64/HPSocket4C_U.dll
index 1ec49e42d..0be59090a 100644
Binary files a/HP-Socket/Demo/Release/x64/HPSocket4C_U.dll and b/HP-Socket/Demo/Release/x64/HPSocket4C_U.dll differ
diff --git a/HP-Socket/Demo/Release/x64/HPSocket_U.dll b/HP-Socket/Demo/Release/x64/HPSocket_U.dll
index 9bad2f555..9ec44a128 100644
Binary files a/HP-Socket/Demo/Release/x64/HPSocket_U.dll and b/HP-Socket/Demo/Release/x64/HPSocket_U.dll differ
diff --git a/HP-Socket/Demo/Release/x64/HttpProxy-Server.exe b/HP-Socket/Demo/Release/x64/HttpProxy-Server.exe
index 4fbe95a11..0355098dd 100644
Binary files a/HP-Socket/Demo/Release/x64/HttpProxy-Server.exe and b/HP-Socket/Demo/Release/x64/HttpProxy-Server.exe differ
diff --git a/HP-Socket/Demo/Release/x64/TestEcho-4C-Client.exe b/HP-Socket/Demo/Release/x64/TestEcho-4C-Client.exe
index 6db3678b9..93a60da91 100644
Binary files a/HP-Socket/Demo/Release/x64/TestEcho-4C-Client.exe and b/HP-Socket/Demo/Release/x64/TestEcho-4C-Client.exe differ
diff --git a/HP-Socket/Demo/Release/x64/TestEcho-4C-Server.exe b/HP-Socket/Demo/Release/x64/TestEcho-4C-Server.exe
index 6f25f31ee..b475ecde4 100644
Binary files a/HP-Socket/Demo/Release/x64/TestEcho-4C-Server.exe and b/HP-Socket/Demo/Release/x64/TestEcho-4C-Server.exe differ
diff --git a/HP-Socket/Demo/Release/x64/TestEcho-Agent-4C.exe b/HP-Socket/Demo/Release/x64/TestEcho-Agent-4C.exe
index b5298d7bd..99fd58c90 100644
Binary files a/HP-Socket/Demo/Release/x64/TestEcho-Agent-4C.exe and b/HP-Socket/Demo/Release/x64/TestEcho-Agent-4C.exe differ
diff --git a/HP-Socket/Demo/Release/x64/TestEcho-Agent-PFM.exe b/HP-Socket/Demo/Release/x64/TestEcho-Agent-PFM.exe
index edb147400..56349ae04 100644
Binary files a/HP-Socket/Demo/Release/x64/TestEcho-Agent-PFM.exe and b/HP-Socket/Demo/Release/x64/TestEcho-Agent-PFM.exe differ
diff --git a/HP-Socket/Demo/Release/x64/TestEcho-Agent-Pull.exe b/HP-Socket/Demo/Release/x64/TestEcho-Agent-Pull.exe
index 4572555f3..6249f86f2 100644
Binary files a/HP-Socket/Demo/Release/x64/TestEcho-Agent-Pull.exe and b/HP-Socket/Demo/Release/x64/TestEcho-Agent-Pull.exe differ
diff --git a/HP-Socket/Demo/Release/x64/TestEcho-Agent-Server.exe b/HP-Socket/Demo/Release/x64/TestEcho-Agent-Server.exe
index 2b8e7e1b6..c452f886e 100644
Binary files a/HP-Socket/Demo/Release/x64/TestEcho-Agent-Server.exe and b/HP-Socket/Demo/Release/x64/TestEcho-Agent-Server.exe differ
diff --git a/HP-Socket/Demo/Release/x64/TestEcho-Client.exe b/HP-Socket/Demo/Release/x64/TestEcho-Client.exe
index fe3c85a24..c3b6a128a 100644
Binary files a/HP-Socket/Demo/Release/x64/TestEcho-Client.exe and b/HP-Socket/Demo/Release/x64/TestEcho-Client.exe differ
diff --git a/HP-Socket/Demo/Release/x64/TestEcho-PFM-Client.exe b/HP-Socket/Demo/Release/x64/TestEcho-PFM-Client.exe
index c12d7bfe1..1edea5c4f 100644
Binary files a/HP-Socket/Demo/Release/x64/TestEcho-PFM-Client.exe and b/HP-Socket/Demo/Release/x64/TestEcho-PFM-Client.exe differ
diff --git a/HP-Socket/Demo/Release/x64/TestEcho-PFM-Server.exe b/HP-Socket/Demo/Release/x64/TestEcho-PFM-Server.exe
index cb8a3cf61..fabbb2bfb 100644
Binary files a/HP-Socket/Demo/Release/x64/TestEcho-PFM-Server.exe and b/HP-Socket/Demo/Release/x64/TestEcho-PFM-Server.exe differ
diff --git a/HP-Socket/Demo/Release/x64/TestEcho-Pack-Client.exe b/HP-Socket/Demo/Release/x64/TestEcho-Pack-Client.exe
index e55c05a60..4d2045c17 100644
Binary files a/HP-Socket/Demo/Release/x64/TestEcho-Pack-Client.exe and b/HP-Socket/Demo/Release/x64/TestEcho-Pack-Client.exe differ
diff --git a/HP-Socket/Demo/Release/x64/TestEcho-Pack-Server.exe b/HP-Socket/Demo/Release/x64/TestEcho-Pack-Server.exe
index 3aa14d675..0c2277fbb 100644
Binary files a/HP-Socket/Demo/Release/x64/TestEcho-Pack-Server.exe and b/HP-Socket/Demo/Release/x64/TestEcho-Pack-Server.exe differ
diff --git a/HP-Socket/Demo/Release/x64/TestEcho-Pull-Client.exe b/HP-Socket/Demo/Release/x64/TestEcho-Pull-Client.exe
index 39645a8b7..2fbc9fbdf 100644
Binary files a/HP-Socket/Demo/Release/x64/TestEcho-Pull-Client.exe and b/HP-Socket/Demo/Release/x64/TestEcho-Pull-Client.exe differ
diff --git a/HP-Socket/Demo/Release/x64/TestEcho-Pull-Server.exe b/HP-Socket/Demo/Release/x64/TestEcho-Pull-Server.exe
index 5a9ad044d..7f7124b53 100644
Binary files a/HP-Socket/Demo/Release/x64/TestEcho-Pull-Server.exe and b/HP-Socket/Demo/Release/x64/TestEcho-Pull-Server.exe differ
diff --git a/HP-Socket/Demo/Release/x64/TestEcho-SSL-4C-Client.exe b/HP-Socket/Demo/Release/x64/TestEcho-SSL-4C-Client.exe
index 892439e84..92e6d32f0 100644
Binary files a/HP-Socket/Demo/Release/x64/TestEcho-SSL-4C-Client.exe and b/HP-Socket/Demo/Release/x64/TestEcho-SSL-4C-Client.exe differ
diff --git a/HP-Socket/Demo/Release/x64/TestEcho-SSL-4C-Server.exe b/HP-Socket/Demo/Release/x64/TestEcho-SSL-4C-Server.exe
index 3b41ab1d9..55ab4764f 100644
Binary files a/HP-Socket/Demo/Release/x64/TestEcho-SSL-4C-Server.exe and b/HP-Socket/Demo/Release/x64/TestEcho-SSL-4C-Server.exe differ
diff --git a/HP-Socket/Demo/Release/x64/TestEcho-SSL-Client.exe b/HP-Socket/Demo/Release/x64/TestEcho-SSL-Client.exe
index 7dbf6fa27..b03926e87 100644
Binary files a/HP-Socket/Demo/Release/x64/TestEcho-SSL-Client.exe and b/HP-Socket/Demo/Release/x64/TestEcho-SSL-Client.exe differ
diff --git a/HP-Socket/Demo/Release/x64/TestEcho-SSL-PFM-Client.exe b/HP-Socket/Demo/Release/x64/TestEcho-SSL-PFM-Client.exe
index 9fc11eeaa..107bd58a9 100644
Binary files a/HP-Socket/Demo/Release/x64/TestEcho-SSL-PFM-Client.exe and b/HP-Socket/Demo/Release/x64/TestEcho-SSL-PFM-Client.exe differ
diff --git a/HP-Socket/Demo/Release/x64/TestEcho-SSL-PFM-Server.exe b/HP-Socket/Demo/Release/x64/TestEcho-SSL-PFM-Server.exe
index 02c763dfa..2dab69310 100644
Binary files a/HP-Socket/Demo/Release/x64/TestEcho-SSL-PFM-Server.exe and b/HP-Socket/Demo/Release/x64/TestEcho-SSL-PFM-Server.exe differ
diff --git a/HP-Socket/Demo/Release/x64/TestEcho-SSL-Pack-Client.exe b/HP-Socket/Demo/Release/x64/TestEcho-SSL-Pack-Client.exe
index c99e3f2c4..becdd9993 100644
Binary files a/HP-Socket/Demo/Release/x64/TestEcho-SSL-Pack-Client.exe and b/HP-Socket/Demo/Release/x64/TestEcho-SSL-Pack-Client.exe differ
diff --git a/HP-Socket/Demo/Release/x64/TestEcho-SSL-Pack-Server.exe b/HP-Socket/Demo/Release/x64/TestEcho-SSL-Pack-Server.exe
index 9fec9adc1..7df55da1a 100644
Binary files a/HP-Socket/Demo/Release/x64/TestEcho-SSL-Pack-Server.exe and b/HP-Socket/Demo/Release/x64/TestEcho-SSL-Pack-Server.exe differ
diff --git a/HP-Socket/Demo/Release/x64/TestEcho-SSL-Server.exe b/HP-Socket/Demo/Release/x64/TestEcho-SSL-Server.exe
index cfd9ca73d..1c60cabd0 100644
Binary files a/HP-Socket/Demo/Release/x64/TestEcho-SSL-Server.exe and b/HP-Socket/Demo/Release/x64/TestEcho-SSL-Server.exe differ
diff --git a/HP-Socket/Demo/Release/x64/TestEcho-Server.exe b/HP-Socket/Demo/Release/x64/TestEcho-Server.exe
index 638cec880..4edac7bcb 100644
Binary files a/HP-Socket/Demo/Release/x64/TestEcho-Server.exe and b/HP-Socket/Demo/Release/x64/TestEcho-Server.exe differ
diff --git a/HP-Socket/Demo/Release/x64/TestEcho-UDP-Client.exe b/HP-Socket/Demo/Release/x64/TestEcho-UDP-Client.exe
index d557ff780..1db0317c8 100644
Binary files a/HP-Socket/Demo/Release/x64/TestEcho-UDP-Client.exe and b/HP-Socket/Demo/Release/x64/TestEcho-UDP-Client.exe differ
diff --git a/HP-Socket/Demo/Release/x64/TestEcho-UDP-PFM-Client.exe b/HP-Socket/Demo/Release/x64/TestEcho-UDP-PFM-Client.exe
index 73fae399c..b23b56228 100644
Binary files a/HP-Socket/Demo/Release/x64/TestEcho-UDP-PFM-Client.exe and b/HP-Socket/Demo/Release/x64/TestEcho-UDP-PFM-Client.exe differ
diff --git a/HP-Socket/Demo/Release/x64/TestEcho-UDP-PFM-Server.exe b/HP-Socket/Demo/Release/x64/TestEcho-UDP-PFM-Server.exe
index 13e7c2efe..c480c689c 100644
Binary files a/HP-Socket/Demo/Release/x64/TestEcho-UDP-PFM-Server.exe and b/HP-Socket/Demo/Release/x64/TestEcho-UDP-PFM-Server.exe differ
diff --git a/HP-Socket/Demo/Release/x64/TestEcho-UDP-Server.exe b/HP-Socket/Demo/Release/x64/TestEcho-UDP-Server.exe
index 4b9b54a4e..74e062cba 100644
Binary files a/HP-Socket/Demo/Release/x64/TestEcho-UDP-Server.exe and b/HP-Socket/Demo/Release/x64/TestEcho-UDP-Server.exe differ
diff --git a/HP-Socket/Demo/Release/x64/TestUDPCast-Member.exe b/HP-Socket/Demo/Release/x64/TestUDPCast-Member.exe
index fb4e6ef5f..84e784279 100644
Binary files a/HP-Socket/Demo/Release/x64/TestUDPCast-Member.exe and b/HP-Socket/Demo/Release/x64/TestUDPCast-Member.exe differ
diff --git a/HP-Socket/Demo/Release/x86/HPSocket-SSL_U.dll b/HP-Socket/Demo/Release/x86/HPSocket-SSL_U.dll
index afd8c388c..83dc6d4aa 100644
Binary files a/HP-Socket/Demo/Release/x86/HPSocket-SSL_U.dll and b/HP-Socket/Demo/Release/x86/HPSocket-SSL_U.dll differ
diff --git a/HP-Socket/Demo/Release/x86/HPSocket4C-SSL_U.dll b/HP-Socket/Demo/Release/x86/HPSocket4C-SSL_U.dll
index a67c799aa..aabaddc7c 100644
Binary files a/HP-Socket/Demo/Release/x86/HPSocket4C-SSL_U.dll and b/HP-Socket/Demo/Release/x86/HPSocket4C-SSL_U.dll differ
diff --git a/HP-Socket/Demo/Release/x86/HPSocket4C_U.dll b/HP-Socket/Demo/Release/x86/HPSocket4C_U.dll
index 4efcb500f..0201b4a32 100644
Binary files a/HP-Socket/Demo/Release/x86/HPSocket4C_U.dll and b/HP-Socket/Demo/Release/x86/HPSocket4C_U.dll differ
diff --git a/HP-Socket/Demo/Release/x86/HPSocket_U.dll b/HP-Socket/Demo/Release/x86/HPSocket_U.dll
index cd641fbea..3c6eb6f3a 100644
Binary files a/HP-Socket/Demo/Release/x86/HPSocket_U.dll and b/HP-Socket/Demo/Release/x86/HPSocket_U.dll differ
diff --git a/HP-Socket/Demo/Release/x86/HttpProxy-Server.exe b/HP-Socket/Demo/Release/x86/HttpProxy-Server.exe
index 83de9402c..5c9515b24 100644
Binary files a/HP-Socket/Demo/Release/x86/HttpProxy-Server.exe and b/HP-Socket/Demo/Release/x86/HttpProxy-Server.exe differ
diff --git a/HP-Socket/Demo/Release/x86/TestEcho-4C-Client.exe b/HP-Socket/Demo/Release/x86/TestEcho-4C-Client.exe
index b88c222bf..75347bbcf 100644
Binary files a/HP-Socket/Demo/Release/x86/TestEcho-4C-Client.exe and b/HP-Socket/Demo/Release/x86/TestEcho-4C-Client.exe differ
diff --git a/HP-Socket/Demo/Release/x86/TestEcho-4C-Server.exe b/HP-Socket/Demo/Release/x86/TestEcho-4C-Server.exe
index 9d3b1b484..862fc0972 100644
Binary files a/HP-Socket/Demo/Release/x86/TestEcho-4C-Server.exe and b/HP-Socket/Demo/Release/x86/TestEcho-4C-Server.exe differ
diff --git a/HP-Socket/Demo/Release/x86/TestEcho-Agent-4C.exe b/HP-Socket/Demo/Release/x86/TestEcho-Agent-4C.exe
index 04a672fe0..b0a2ebd3b 100644
Binary files a/HP-Socket/Demo/Release/x86/TestEcho-Agent-4C.exe and b/HP-Socket/Demo/Release/x86/TestEcho-Agent-4C.exe differ
diff --git a/HP-Socket/Demo/Release/x86/TestEcho-Agent-PFM.exe b/HP-Socket/Demo/Release/x86/TestEcho-Agent-PFM.exe
index fea5988e6..32885a062 100644
Binary files a/HP-Socket/Demo/Release/x86/TestEcho-Agent-PFM.exe and b/HP-Socket/Demo/Release/x86/TestEcho-Agent-PFM.exe differ
diff --git a/HP-Socket/Demo/Release/x86/TestEcho-Agent-Pull.exe b/HP-Socket/Demo/Release/x86/TestEcho-Agent-Pull.exe
index 8132e2c2c..d523125c5 100644
Binary files a/HP-Socket/Demo/Release/x86/TestEcho-Agent-Pull.exe and b/HP-Socket/Demo/Release/x86/TestEcho-Agent-Pull.exe differ
diff --git a/HP-Socket/Demo/Release/x86/TestEcho-Agent-Server.exe b/HP-Socket/Demo/Release/x86/TestEcho-Agent-Server.exe
index c9a650791..baa67c3da 100644
Binary files a/HP-Socket/Demo/Release/x86/TestEcho-Agent-Server.exe and b/HP-Socket/Demo/Release/x86/TestEcho-Agent-Server.exe differ
diff --git a/HP-Socket/Demo/Release/x86/TestEcho-Client.exe b/HP-Socket/Demo/Release/x86/TestEcho-Client.exe
index e57d66ee1..96ae9d811 100644
Binary files a/HP-Socket/Demo/Release/x86/TestEcho-Client.exe and b/HP-Socket/Demo/Release/x86/TestEcho-Client.exe differ
diff --git a/HP-Socket/Demo/Release/x86/TestEcho-PFM-Client.exe b/HP-Socket/Demo/Release/x86/TestEcho-PFM-Client.exe
index 9e3f87ae7..86a25a325 100644
Binary files a/HP-Socket/Demo/Release/x86/TestEcho-PFM-Client.exe and b/HP-Socket/Demo/Release/x86/TestEcho-PFM-Client.exe differ
diff --git a/HP-Socket/Demo/Release/x86/TestEcho-PFM-Server.exe b/HP-Socket/Demo/Release/x86/TestEcho-PFM-Server.exe
index 0f6059d16..947e66779 100644
Binary files a/HP-Socket/Demo/Release/x86/TestEcho-PFM-Server.exe and b/HP-Socket/Demo/Release/x86/TestEcho-PFM-Server.exe differ
diff --git a/HP-Socket/Demo/Release/x86/TestEcho-Pack-Client.exe b/HP-Socket/Demo/Release/x86/TestEcho-Pack-Client.exe
index dbb71d405..a7bdfd4a1 100644
Binary files a/HP-Socket/Demo/Release/x86/TestEcho-Pack-Client.exe and b/HP-Socket/Demo/Release/x86/TestEcho-Pack-Client.exe differ
diff --git a/HP-Socket/Demo/Release/x86/TestEcho-Pack-Server.exe b/HP-Socket/Demo/Release/x86/TestEcho-Pack-Server.exe
index 162181381..d7ee7a9e3 100644
Binary files a/HP-Socket/Demo/Release/x86/TestEcho-Pack-Server.exe and b/HP-Socket/Demo/Release/x86/TestEcho-Pack-Server.exe differ
diff --git a/HP-Socket/Demo/Release/x86/TestEcho-Pull-Client.exe b/HP-Socket/Demo/Release/x86/TestEcho-Pull-Client.exe
index 3eaaf7d98..94cbbad0c 100644
Binary files a/HP-Socket/Demo/Release/x86/TestEcho-Pull-Client.exe and b/HP-Socket/Demo/Release/x86/TestEcho-Pull-Client.exe differ
diff --git a/HP-Socket/Demo/Release/x86/TestEcho-Pull-Server.exe b/HP-Socket/Demo/Release/x86/TestEcho-Pull-Server.exe
index aa4e83d6b..5ce3c9464 100644
Binary files a/HP-Socket/Demo/Release/x86/TestEcho-Pull-Server.exe and b/HP-Socket/Demo/Release/x86/TestEcho-Pull-Server.exe differ
diff --git a/HP-Socket/Demo/Release/x86/TestEcho-SSL-4C-Client.exe b/HP-Socket/Demo/Release/x86/TestEcho-SSL-4C-Client.exe
index ef610a12d..b7d036081 100644
Binary files a/HP-Socket/Demo/Release/x86/TestEcho-SSL-4C-Client.exe and b/HP-Socket/Demo/Release/x86/TestEcho-SSL-4C-Client.exe differ
diff --git a/HP-Socket/Demo/Release/x86/TestEcho-SSL-4C-Server.exe b/HP-Socket/Demo/Release/x86/TestEcho-SSL-4C-Server.exe
index 5bc899dae..67976794b 100644
Binary files a/HP-Socket/Demo/Release/x86/TestEcho-SSL-4C-Server.exe and b/HP-Socket/Demo/Release/x86/TestEcho-SSL-4C-Server.exe differ
diff --git a/HP-Socket/Demo/Release/x86/TestEcho-SSL-Client.exe b/HP-Socket/Demo/Release/x86/TestEcho-SSL-Client.exe
index 4568b62a1..b44956aec 100644
Binary files a/HP-Socket/Demo/Release/x86/TestEcho-SSL-Client.exe and b/HP-Socket/Demo/Release/x86/TestEcho-SSL-Client.exe differ
diff --git a/HP-Socket/Demo/Release/x86/TestEcho-SSL-PFM-Client.exe b/HP-Socket/Demo/Release/x86/TestEcho-SSL-PFM-Client.exe
index 0c674a9ff..b0be7c02c 100644
Binary files a/HP-Socket/Demo/Release/x86/TestEcho-SSL-PFM-Client.exe and b/HP-Socket/Demo/Release/x86/TestEcho-SSL-PFM-Client.exe differ
diff --git a/HP-Socket/Demo/Release/x86/TestEcho-SSL-PFM-Server.exe b/HP-Socket/Demo/Release/x86/TestEcho-SSL-PFM-Server.exe
index e5dc4d67c..d27887e86 100644
Binary files a/HP-Socket/Demo/Release/x86/TestEcho-SSL-PFM-Server.exe and b/HP-Socket/Demo/Release/x86/TestEcho-SSL-PFM-Server.exe differ
diff --git a/HP-Socket/Demo/Release/x86/TestEcho-SSL-Pack-Client.exe b/HP-Socket/Demo/Release/x86/TestEcho-SSL-Pack-Client.exe
index fcd02eca3..458575f53 100644
Binary files a/HP-Socket/Demo/Release/x86/TestEcho-SSL-Pack-Client.exe and b/HP-Socket/Demo/Release/x86/TestEcho-SSL-Pack-Client.exe differ
diff --git a/HP-Socket/Demo/Release/x86/TestEcho-SSL-Pack-Server.exe b/HP-Socket/Demo/Release/x86/TestEcho-SSL-Pack-Server.exe
index 21674f0bd..4bd3cbd43 100644
Binary files a/HP-Socket/Demo/Release/x86/TestEcho-SSL-Pack-Server.exe and b/HP-Socket/Demo/Release/x86/TestEcho-SSL-Pack-Server.exe differ
diff --git a/HP-Socket/Demo/Release/x86/TestEcho-SSL-Server.exe b/HP-Socket/Demo/Release/x86/TestEcho-SSL-Server.exe
index 38c608f0f..73bbcf64f 100644
Binary files a/HP-Socket/Demo/Release/x86/TestEcho-SSL-Server.exe and b/HP-Socket/Demo/Release/x86/TestEcho-SSL-Server.exe differ
diff --git a/HP-Socket/Demo/Release/x86/TestEcho-Server.exe b/HP-Socket/Demo/Release/x86/TestEcho-Server.exe
index 328de4172..597fcde67 100644
Binary files a/HP-Socket/Demo/Release/x86/TestEcho-Server.exe and b/HP-Socket/Demo/Release/x86/TestEcho-Server.exe differ
diff --git a/HP-Socket/Demo/Release/x86/TestEcho-UDP-Client.exe b/HP-Socket/Demo/Release/x86/TestEcho-UDP-Client.exe
index a72e378f9..15b2847b8 100644
Binary files a/HP-Socket/Demo/Release/x86/TestEcho-UDP-Client.exe and b/HP-Socket/Demo/Release/x86/TestEcho-UDP-Client.exe differ
diff --git a/HP-Socket/Demo/Release/x86/TestEcho-UDP-PFM-Client.exe b/HP-Socket/Demo/Release/x86/TestEcho-UDP-PFM-Client.exe
index 361f7714e..37b32a217 100644
Binary files a/HP-Socket/Demo/Release/x86/TestEcho-UDP-PFM-Client.exe and b/HP-Socket/Demo/Release/x86/TestEcho-UDP-PFM-Client.exe differ
diff --git a/HP-Socket/Demo/Release/x86/TestEcho-UDP-PFM-Server.exe b/HP-Socket/Demo/Release/x86/TestEcho-UDP-PFM-Server.exe
index ade97d9a2..6cf0b9d69 100644
Binary files a/HP-Socket/Demo/Release/x86/TestEcho-UDP-PFM-Server.exe and b/HP-Socket/Demo/Release/x86/TestEcho-UDP-PFM-Server.exe differ
diff --git a/HP-Socket/Demo/Release/x86/TestEcho-UDP-Server.exe b/HP-Socket/Demo/Release/x86/TestEcho-UDP-Server.exe
index d441f1854..c4512802e 100644
Binary files a/HP-Socket/Demo/Release/x86/TestEcho-UDP-Server.exe and b/HP-Socket/Demo/Release/x86/TestEcho-UDP-Server.exe differ
diff --git a/HP-Socket/Demo/Release/x86/TestUDPCast-Member.exe b/HP-Socket/Demo/Release/x86/TestUDPCast-Member.exe
index 254e9c9c5..ceabbaade 100644
Binary files a/HP-Socket/Demo/Release/x86/TestUDPCast-Member.exe and b/HP-Socket/Demo/Release/x86/TestUDPCast-Member.exe differ
diff --git a/HP-Socket/Demo/TestEcho-4C/Client/Client.rc b/HP-Socket/Demo/TestEcho-4C/Client/Client.rc
index ce4b2aabf..06dfd0440 100644
Binary files a/HP-Socket/Demo/TestEcho-4C/Client/Client.rc and b/HP-Socket/Demo/TestEcho-4C/Client/Client.rc differ
diff --git a/HP-Socket/Demo/TestEcho-4C/Server/Server.rc b/HP-Socket/Demo/TestEcho-4C/Server/Server.rc
index d8119dd42..58e73a9f5 100644
Binary files a/HP-Socket/Demo/TestEcho-4C/Server/Server.rc and b/HP-Socket/Demo/TestEcho-4C/Server/Server.rc differ
diff --git a/HP-Socket/Demo/TestEcho-4C/TestEcho-4C.suo b/HP-Socket/Demo/TestEcho-4C/TestEcho-4C.suo
index ed9dea84d..74c665b49 100644
Binary files a/HP-Socket/Demo/TestEcho-4C/TestEcho-4C.suo and b/HP-Socket/Demo/TestEcho-4C/TestEcho-4C.suo differ
diff --git a/HP-Socket/Demo/TestEcho-Agent/Agent-4C/Client.rc b/HP-Socket/Demo/TestEcho-Agent/Agent-4C/Client.rc
index 1dba82a73..2872140c5 100644
Binary files a/HP-Socket/Demo/TestEcho-Agent/Agent-4C/Client.rc and b/HP-Socket/Demo/TestEcho-Agent/Agent-4C/Client.rc differ
diff --git a/HP-Socket/Demo/TestEcho-Agent/Agent-PFM/Client.rc b/HP-Socket/Demo/TestEcho-Agent/Agent-PFM/Client.rc
index 29c35c719..bf90db5ff 100644
Binary files a/HP-Socket/Demo/TestEcho-Agent/Agent-PFM/Client.rc and b/HP-Socket/Demo/TestEcho-Agent/Agent-PFM/Client.rc differ
diff --git a/HP-Socket/Demo/TestEcho-Agent/Agent-Pull/Client.rc b/HP-Socket/Demo/TestEcho-Agent/Agent-Pull/Client.rc
index 0aa587c5b..7b9c08e0f 100644
Binary files a/HP-Socket/Demo/TestEcho-Agent/Agent-Pull/Client.rc and b/HP-Socket/Demo/TestEcho-Agent/Agent-Pull/Client.rc differ
diff --git a/HP-Socket/Demo/TestEcho-Agent/TestEcho-Agent.suo b/HP-Socket/Demo/TestEcho-Agent/TestEcho-Agent.suo
index 5152b6a1c..c93ce6c57 100644
Binary files a/HP-Socket/Demo/TestEcho-Agent/TestEcho-Agent.suo and b/HP-Socket/Demo/TestEcho-Agent/TestEcho-Agent.suo differ
diff --git a/HP-Socket/Demo/TestEcho-PFM/Client/Client.rc b/HP-Socket/Demo/TestEcho-PFM/Client/Client.rc
index 6b2286172..281196afa 100644
Binary files a/HP-Socket/Demo/TestEcho-PFM/Client/Client.rc and b/HP-Socket/Demo/TestEcho-PFM/Client/Client.rc differ
diff --git a/HP-Socket/Demo/TestEcho-PFM/Server/Server.rc b/HP-Socket/Demo/TestEcho-PFM/Server/Server.rc
index 7cd9bb59d..b50eb6152 100644
Binary files a/HP-Socket/Demo/TestEcho-PFM/Server/Server.rc and b/HP-Socket/Demo/TestEcho-PFM/Server/Server.rc differ
diff --git a/HP-Socket/Demo/TestEcho-PFM/TestEcho-PFM.suo b/HP-Socket/Demo/TestEcho-PFM/TestEcho-PFM.suo
index ede8d3844..1f5e24a36 100644
Binary files a/HP-Socket/Demo/TestEcho-PFM/TestEcho-PFM.suo and b/HP-Socket/Demo/TestEcho-PFM/TestEcho-PFM.suo differ
diff --git a/HP-Socket/Demo/TestEcho-Pack/Client/Client.rc b/HP-Socket/Demo/TestEcho-Pack/Client/Client.rc
index 9b2b751ea..574801090 100644
Binary files a/HP-Socket/Demo/TestEcho-Pack/Client/Client.rc and b/HP-Socket/Demo/TestEcho-Pack/Client/Client.rc differ
diff --git a/HP-Socket/Demo/TestEcho-Pack/Server/Server.rc b/HP-Socket/Demo/TestEcho-Pack/Server/Server.rc
index af3e5ad3b..5e16fcccb 100644
Binary files a/HP-Socket/Demo/TestEcho-Pack/Server/Server.rc and b/HP-Socket/Demo/TestEcho-Pack/Server/Server.rc differ
diff --git a/HP-Socket/Demo/TestEcho-Pack/TestEcho-Pack.suo b/HP-Socket/Demo/TestEcho-Pack/TestEcho-Pack.suo
index 7afca3670..6e23ea5e3 100644
Binary files a/HP-Socket/Demo/TestEcho-Pack/TestEcho-Pack.suo and b/HP-Socket/Demo/TestEcho-Pack/TestEcho-Pack.suo differ
diff --git a/HP-Socket/Demo/TestEcho-Pull/Client/Client.rc b/HP-Socket/Demo/TestEcho-Pull/Client/Client.rc
index 83ef2452a..e59689549 100644
Binary files a/HP-Socket/Demo/TestEcho-Pull/Client/Client.rc and b/HP-Socket/Demo/TestEcho-Pull/Client/Client.rc differ
diff --git a/HP-Socket/Demo/TestEcho-Pull/Server/Server.rc b/HP-Socket/Demo/TestEcho-Pull/Server/Server.rc
index 3ac38834e..053645e54 100644
Binary files a/HP-Socket/Demo/TestEcho-Pull/Server/Server.rc and b/HP-Socket/Demo/TestEcho-Pull/Server/Server.rc differ
diff --git a/HP-Socket/Demo/TestEcho-Pull/TestEcho-Pull.suo b/HP-Socket/Demo/TestEcho-Pull/TestEcho-Pull.suo
index 91496dfd3..abfcbfc22 100644
Binary files a/HP-Socket/Demo/TestEcho-Pull/TestEcho-Pull.suo and b/HP-Socket/Demo/TestEcho-Pull/TestEcho-Pull.suo differ
diff --git a/HP-Socket/Demo/TestEcho-SSL-4C/Client/Client.rc b/HP-Socket/Demo/TestEcho-SSL-4C/Client/Client.rc
index 565eb69b8..386dc168c 100644
Binary files a/HP-Socket/Demo/TestEcho-SSL-4C/Client/Client.rc and b/HP-Socket/Demo/TestEcho-SSL-4C/Client/Client.rc differ
diff --git a/HP-Socket/Demo/TestEcho-SSL-4C/Server/Server.rc b/HP-Socket/Demo/TestEcho-SSL-4C/Server/Server.rc
index 9db552066..6022d5de2 100644
Binary files a/HP-Socket/Demo/TestEcho-SSL-4C/Server/Server.rc and b/HP-Socket/Demo/TestEcho-SSL-4C/Server/Server.rc differ
diff --git a/HP-Socket/Demo/TestEcho-SSL-4C/TestEcho-SSL-4C.suo b/HP-Socket/Demo/TestEcho-SSL-4C/TestEcho-SSL-4C.suo
index bb2b5667b..bca5d833c 100644
Binary files a/HP-Socket/Demo/TestEcho-SSL-4C/TestEcho-SSL-4C.suo and b/HP-Socket/Demo/TestEcho-SSL-4C/TestEcho-SSL-4C.suo differ
diff --git a/HP-Socket/Demo/TestEcho-SSL-PFM/Client/Client.rc b/HP-Socket/Demo/TestEcho-SSL-PFM/Client/Client.rc
index aaf2b554d..73a131583 100644
Binary files a/HP-Socket/Demo/TestEcho-SSL-PFM/Client/Client.rc and b/HP-Socket/Demo/TestEcho-SSL-PFM/Client/Client.rc differ
diff --git a/HP-Socket/Demo/TestEcho-SSL-PFM/Server/Server.rc b/HP-Socket/Demo/TestEcho-SSL-PFM/Server/Server.rc
index 90d190de5..6d216ffb8 100644
Binary files a/HP-Socket/Demo/TestEcho-SSL-PFM/Server/Server.rc and b/HP-Socket/Demo/TestEcho-SSL-PFM/Server/Server.rc differ
diff --git a/HP-Socket/Demo/TestEcho-SSL-PFM/TestEcho-SSL-PFM.suo b/HP-Socket/Demo/TestEcho-SSL-PFM/TestEcho-SSL-PFM.suo
index 49fc994c5..5265f0ae1 100644
Binary files a/HP-Socket/Demo/TestEcho-SSL-PFM/TestEcho-SSL-PFM.suo and b/HP-Socket/Demo/TestEcho-SSL-PFM/TestEcho-SSL-PFM.suo differ
diff --git a/HP-Socket/Demo/TestEcho-SSL-Pack/Client/Client.rc b/HP-Socket/Demo/TestEcho-SSL-Pack/Client/Client.rc
index b3d4f74b8..211a55ab2 100644
Binary files a/HP-Socket/Demo/TestEcho-SSL-Pack/Client/Client.rc and b/HP-Socket/Demo/TestEcho-SSL-Pack/Client/Client.rc differ
diff --git a/HP-Socket/Demo/TestEcho-SSL-Pack/Server/Server.rc b/HP-Socket/Demo/TestEcho-SSL-Pack/Server/Server.rc
index 01239b0eb..1e59afc97 100644
Binary files a/HP-Socket/Demo/TestEcho-SSL-Pack/Server/Server.rc and b/HP-Socket/Demo/TestEcho-SSL-Pack/Server/Server.rc differ
diff --git a/HP-Socket/Demo/TestEcho-SSL-Pack/TestEcho-SSL-Pack.suo b/HP-Socket/Demo/TestEcho-SSL-Pack/TestEcho-SSL-Pack.suo
index 46346c71a..ba240a5f7 100644
Binary files a/HP-Socket/Demo/TestEcho-SSL-Pack/TestEcho-SSL-Pack.suo and b/HP-Socket/Demo/TestEcho-SSL-Pack/TestEcho-SSL-Pack.suo differ
diff --git a/HP-Socket/Demo/TestEcho-SSL/Client/Client.rc b/HP-Socket/Demo/TestEcho-SSL/Client/Client.rc
index 56e99f776..ad06876db 100644
Binary files a/HP-Socket/Demo/TestEcho-SSL/Client/Client.rc and b/HP-Socket/Demo/TestEcho-SSL/Client/Client.rc differ
diff --git a/HP-Socket/Demo/TestEcho-SSL/Server/Server.rc b/HP-Socket/Demo/TestEcho-SSL/Server/Server.rc
index 4fcb600b9..30c66631a 100644
Binary files a/HP-Socket/Demo/TestEcho-SSL/Server/Server.rc and b/HP-Socket/Demo/TestEcho-SSL/Server/Server.rc differ
diff --git a/HP-Socket/Demo/TestEcho-SSL/TestEcho-SSL.suo b/HP-Socket/Demo/TestEcho-SSL/TestEcho-SSL.suo
index dae3adfdf..e85fc8d35 100644
Binary files a/HP-Socket/Demo/TestEcho-SSL/TestEcho-SSL.suo and b/HP-Socket/Demo/TestEcho-SSL/TestEcho-SSL.suo differ
diff --git a/HP-Socket/Demo/TestEcho-UDP-PFM/Client/Client.rc b/HP-Socket/Demo/TestEcho-UDP-PFM/Client/Client.rc
index 8db4be990..2043c254c 100644
Binary files a/HP-Socket/Demo/TestEcho-UDP-PFM/Client/Client.rc and b/HP-Socket/Demo/TestEcho-UDP-PFM/Client/Client.rc differ
diff --git a/HP-Socket/Demo/TestEcho-UDP-PFM/Server/Server.rc b/HP-Socket/Demo/TestEcho-UDP-PFM/Server/Server.rc
index f4d31643e..e0bf870fa 100644
Binary files a/HP-Socket/Demo/TestEcho-UDP-PFM/Server/Server.rc and b/HP-Socket/Demo/TestEcho-UDP-PFM/Server/Server.rc differ
diff --git a/HP-Socket/Demo/TestEcho-UDP-PFM/TestEcho-UDP-PFM.suo b/HP-Socket/Demo/TestEcho-UDP-PFM/TestEcho-UDP-PFM.suo
index 3b6c926e7..efbd47d3c 100644
Binary files a/HP-Socket/Demo/TestEcho-UDP-PFM/TestEcho-UDP-PFM.suo and b/HP-Socket/Demo/TestEcho-UDP-PFM/TestEcho-UDP-PFM.suo differ
diff --git a/HP-Socket/Demo/TestEcho-UDP/Client/Client.rc b/HP-Socket/Demo/TestEcho-UDP/Client/Client.rc
index 1c2051b04..d9afaf0e4 100644
Binary files a/HP-Socket/Demo/TestEcho-UDP/Client/Client.rc and b/HP-Socket/Demo/TestEcho-UDP/Client/Client.rc differ
diff --git a/HP-Socket/Demo/TestEcho-UDP/Server/Server.rc b/HP-Socket/Demo/TestEcho-UDP/Server/Server.rc
index 377f547bf..019c07b15 100644
Binary files a/HP-Socket/Demo/TestEcho-UDP/Server/Server.rc and b/HP-Socket/Demo/TestEcho-UDP/Server/Server.rc differ
diff --git a/HP-Socket/Demo/TestEcho-UDP/TestEcho-UDP.suo b/HP-Socket/Demo/TestEcho-UDP/TestEcho-UDP.suo
index 9272789a3..2fde845f1 100644
Binary files a/HP-Socket/Demo/TestEcho-UDP/TestEcho-UDP.suo and b/HP-Socket/Demo/TestEcho-UDP/TestEcho-UDP.suo differ
diff --git a/HP-Socket/Demo/TestEcho/Client/Client.rc b/HP-Socket/Demo/TestEcho/Client/Client.rc
index f37c32a64..e307ce872 100644
Binary files a/HP-Socket/Demo/TestEcho/Client/Client.rc and b/HP-Socket/Demo/TestEcho/Client/Client.rc differ
diff --git a/HP-Socket/Demo/TestEcho/Server/Server.rc b/HP-Socket/Demo/TestEcho/Server/Server.rc
index 01c098974..ee33484b3 100644
Binary files a/HP-Socket/Demo/TestEcho/Server/Server.rc and b/HP-Socket/Demo/TestEcho/Server/Server.rc differ
diff --git a/HP-Socket/Demo/TestEcho/TestEcho.suo b/HP-Socket/Demo/TestEcho/TestEcho.suo
index 77920e694..6d1da1eed 100644
Binary files a/HP-Socket/Demo/TestEcho/TestEcho.suo and b/HP-Socket/Demo/TestEcho/TestEcho.suo differ
diff --git a/HP-Socket/Demo/TestUDPCast/Member/Client.rc b/HP-Socket/Demo/TestUDPCast/Member/Client.rc
index 6b11ccdcf..9e7d0130c 100644
Binary files a/HP-Socket/Demo/TestUDPCast/Member/Client.rc and b/HP-Socket/Demo/TestUDPCast/Member/Client.rc differ
diff --git a/HP-Socket/Demo/TestUDPCast/Member/ClientDlg.cpp b/HP-Socket/Demo/TestUDPCast/Member/ClientDlg.cpp
index a746fe6e2..764b11337 100644
--- a/HP-Socket/Demo/TestUDPCast/Member/ClientDlg.cpp
+++ b/HP-Socket/Demo/TestUDPCast/Member/ClientDlg.cpp
@@ -211,11 +211,10 @@ void CClientDlg::OnBnClickedStart()
m_Cast.SetMultiCastLoop(bIPLoop);
m_Cast.SetReuseAddress(bReuseAddr);
m_Cast.SetMultiCastTtl(iTTL);
- m_Cast.SetBindAdddress(strBindAddress);
::LogClientStarting(strCastAddress, usPort);
- if(m_Cast.Start(strCastAddress, usPort, FALSE))
+ if(m_Cast.Start(strCastAddress, usPort, FALSE, strBindAddress))
{
}
diff --git a/HP-Socket/Demo/TestUDPCast/TestUDPCast.suo b/HP-Socket/Demo/TestUDPCast/TestUDPCast.suo
index 76207e9d5..c103af733 100644
Binary files a/HP-Socket/Demo/TestUDPCast/TestUDPCast.suo and b/HP-Socket/Demo/TestUDPCast/TestUDPCast.suo differ
diff --git a/HP-Socket/Project/HPSocketDLL/HPSocketDLL.rc b/HP-Socket/Project/HPSocketDLL/HPSocketDLL.rc
index 3a25df064..abcc90b0e 100644
Binary files a/HP-Socket/Project/HPSocketDLL/HPSocketDLL.rc and b/HP-Socket/Project/HPSocketDLL/HPSocketDLL.rc differ
diff --git a/HP-Socket/Project/HPSocketDLL/HPSocketDLL.suo b/HP-Socket/Project/HPSocketDLL/HPSocketDLL.suo
index 29190f4c5..1e21e5800 100644
Binary files a/HP-Socket/Project/HPSocketDLL/HPSocketDLL.suo and b/HP-Socket/Project/HPSocketDLL/HPSocketDLL.suo differ
diff --git a/HP-Socket/Project/HPSocketDLL4C/HPSocketDLL.rc b/HP-Socket/Project/HPSocketDLL4C/HPSocketDLL.rc
index f0d029e1c..0b1718215 100644
Binary files a/HP-Socket/Project/HPSocketDLL4C/HPSocketDLL.rc and b/HP-Socket/Project/HPSocketDLL4C/HPSocketDLL.rc differ
diff --git a/HP-Socket/Project/HPSocketDLL4C/HPSocketDLL4C.suo b/HP-Socket/Project/HPSocketDLL4C/HPSocketDLL4C.suo
index 888653df8..f1a6bc9ff 100644
Binary files a/HP-Socket/Project/HPSocketDLL4C/HPSocketDLL4C.suo and b/HP-Socket/Project/HPSocketDLL4C/HPSocketDLL4C.suo differ
diff --git a/HP-Socket/Project/HPSocketLIB/HPSocketLIB.rc b/HP-Socket/Project/HPSocketLIB/HPSocketLIB.rc
index 2214046cd..de2078003 100644
Binary files a/HP-Socket/Project/HPSocketLIB/HPSocketLIB.rc and b/HP-Socket/Project/HPSocketLIB/HPSocketLIB.rc differ
diff --git a/HP-Socket/Project/HPSocketLIB/HPSocketLIB.suo b/HP-Socket/Project/HPSocketLIB/HPSocketLIB.suo
index e5bb16c64..d6979d649 100644
Binary files a/HP-Socket/Project/HPSocketLIB/HPSocketLIB.suo and b/HP-Socket/Project/HPSocketLIB/HPSocketLIB.suo differ
diff --git a/HP-Socket/Project/HPSocketLIB4C/HPSocketLIB.rc b/HP-Socket/Project/HPSocketLIB4C/HPSocketLIB.rc
index 5696dedfe..a1bae8a76 100644
Binary files a/HP-Socket/Project/HPSocketLIB4C/HPSocketLIB.rc and b/HP-Socket/Project/HPSocketLIB4C/HPSocketLIB.rc differ
diff --git a/HP-Socket/Project/HPSocketLIB4C/HPSocketLIB4C.suo b/HP-Socket/Project/HPSocketLIB4C/HPSocketLIB4C.suo
index 2342ad6f5..2cf7e4335 100644
Binary files a/HP-Socket/Project/HPSocketLIB4C/HPSocketLIB4C.suo and b/HP-Socket/Project/HPSocketLIB4C/HPSocketLIB4C.suo differ
diff --git a/HP-Socket/Src/HPSocket-SSL.cpp b/HP-Socket/Src/HPSocket-SSL.cpp
index 1245ae4af..25bfe71ae 100644
--- a/HP-Socket/Src/HPSocket-SSL.cpp
+++ b/HP-Socket/Src/HPSocket-SSL.cpp
@@ -1,7 +1,7 @@
/*
* Copyright: JessMA Open Source (ldcsaa@gmail.com)
*
- * Version : 3.5.1
+ * Version : 3.5.2
* Author : Bruce Liang
* Website : http://www.jessma.org
* Project : https://github.com/ldcsaa
diff --git a/HP-Socket/Src/HPSocket-SSL.h b/HP-Socket/Src/HPSocket-SSL.h
index 47157ace8..53bc0a177 100644
--- a/HP-Socket/Src/HPSocket-SSL.h
+++ b/HP-Socket/Src/HPSocket-SSL.h
@@ -1,7 +1,7 @@
/*
* Copyright: JessMA Open Source (ldcsaa@gmail.com)
*
- * Version : 3.5.1
+ * Version : 3.5.2
* Author : Bruce Liang
* Website : http://www.jessma.org
* Project : https://github.com/ldcsaa
diff --git a/HP-Socket/Src/HPSocket.cpp b/HP-Socket/Src/HPSocket.cpp
index 1f022df66..15a1713bd 100644
--- a/HP-Socket/Src/HPSocket.cpp
+++ b/HP-Socket/Src/HPSocket.cpp
@@ -1,7 +1,7 @@
/*
* Copyright: JessMA Open Source (ldcsaa@gmail.com)
*
- * Version : 3.5.1
+ * Version : 3.5.2
* Author : Bruce Liang
* Website : http://www.jessma.org
* Project : https://github.com/ldcsaa
@@ -70,6 +70,8 @@
#pragma comment(linker, "/EXPORT:SYS_GetSocketOption=_SYS_GetSocketOption")
#pragma comment(linker, "/EXPORT:SYS_IoctlSocket=_SYS_IoctlSocket")
#pragma comment(linker, "/EXPORT:SYS_WSAIoctl=_SYS_WSAIoctl")
+ #pragma comment(linker, "/EXPORT:SYS_GetSocketLocalAddress=_SYS_GetSocketLocalAddress")
+ #pragma comment(linker, "/EXPORT:SYS_GetSocketRemoteAddress=_SYS_GetSocketRemoteAddress")
#endif
*/
@@ -227,3 +229,13 @@ HPSOCKET_API int SYS_WSAIoctl(SOCKET sock, DWORD dwIoControlCode, LPVOID lpvInBu
{
return ::SSO_WSAIoctl(sock, dwIoControlCode, lpvInBuffer, cbInBuffer, lpvOutBuffer, cbOutBuffer, lpcbBytesReturned);
}
+
+HPSOCKET_API BOOL SYS_GetSocketLocalAddress(SOCKET socket, TCHAR lpszAddress[], int* piAddressLen, USHORT* pusPort)
+{
+ return ::GetSocketLocalAddress(socket, lpszAddress, *piAddressLen, *pusPort);
+}
+
+HPSOCKET_API BOOL SYS_GetSocketRemoteAddress(SOCKET socket, TCHAR lpszAddress[], int* piAddressLen, USHORT* pusPort)
+{
+ return ::GetSocketRemoteAddress(socket, lpszAddress, *piAddressLen, *pusPort);
+}
diff --git a/HP-Socket/Src/HPSocket.h b/HP-Socket/Src/HPSocket.h
index 5eedffce3..a7d4e8d26 100644
--- a/HP-Socket/Src/HPSocket.h
+++ b/HP-Socket/Src/HPSocket.h
@@ -1,7 +1,7 @@
/*
* Copyright: JessMA Open Source (ldcsaa@gmail.com)
*
- * Version : 3.5.1
+ * Version : 3.5.2
* Author : Bruce Liang
* Website : http://www.jessma.org
* Project : https://github.com/ldcsaa
@@ -145,6 +145,10 @@ HPSOCKET_API int SYS_GetSocketOption(SOCKET sock, int level, int name, LPVOID va
HPSOCKET_API int SYS_IoctlSocket(SOCKET sock, long cmd, u_long* arg);
// 调用系统的 ::WSAIoctl()
HPSOCKET_API int SYS_WSAIoctl(SOCKET sock, DWORD dwIoControlCode, LPVOID lpvInBuffer, DWORD cbInBuffer, LPVOID lpvOutBuffer, DWORD cbOutBuffer, LPDWORD lpcbBytesReturned);
+// 获取 SOCKET 本地地址信息
+HPSOCKET_API BOOL SYS_GetSocketLocalAddress(SOCKET socket, TCHAR lpszAddress[], int* piAddressLen, USHORT* pusPort);
+// 获取 SOCKET 远程地址信息
+HPSOCKET_API BOOL SYS_GetSocketRemoteAddress(SOCKET socket, TCHAR lpszAddress[], int* piAddressLen, USHORT* pusPort);
// ITcpServer 对象创建器
struct TcpServer_Creator
diff --git a/HP-Socket/Src/HPSocket4C-SSL.cpp b/HP-Socket/Src/HPSocket4C-SSL.cpp
index 1977b50df..2fecb2af4 100644
--- a/HP-Socket/Src/HPSocket4C-SSL.cpp
+++ b/HP-Socket/Src/HPSocket4C-SSL.cpp
@@ -1,7 +1,7 @@
/*
* Copyright: JessMA Open Source (ldcsaa@gmail.com)
*
- * Version : 3.5.1
+ * Version : 3.5.2
* Author : Bruce Liang
* Website : http://www.jessma.org
* Project : https://github.com/ldcsaa
diff --git a/HP-Socket/Src/HPSocket4C-SSL.h b/HP-Socket/Src/HPSocket4C-SSL.h
index c980d9d4d..32f9ff18d 100644
--- a/HP-Socket/Src/HPSocket4C-SSL.h
+++ b/HP-Socket/Src/HPSocket4C-SSL.h
@@ -1,7 +1,7 @@
/*
* Copyright: JessMA Open Source (ldcsaa@gmail.com)
*
- * Version : 3.5.1
+ * Version : 3.5.2
* Author : Bruce Liang
* Website : http://www.jessma.org
* Project : https://github.com/ldcsaa
diff --git a/HP-Socket/Src/HPSocket4C.cpp b/HP-Socket/Src/HPSocket4C.cpp
index e04784230..2d02eb806 100644
--- a/HP-Socket/Src/HPSocket4C.cpp
+++ b/HP-Socket/Src/HPSocket4C.cpp
@@ -1,7 +1,7 @@
/*
* Copyright: JessMA Open Source (ldcsaa@gmail.com)
*
- * Version : 3.5.1
+ * Version : 3.5.2
* Author : Bruce Liang
* Website : http://www.jessma.org
* Project : https://github.com/ldcsaa
@@ -135,6 +135,7 @@
#pragma comment(linker, "/EXPORT:HP_Client_SetFreeBufferPoolHold=_HP_Client_SetFreeBufferPoolHold@8")
#pragma comment(linker, "/EXPORT:HP_Client_SetFreeBufferPoolSize=_HP_Client_SetFreeBufferPoolSize@8")
#pragma comment(linker, "/EXPORT:HP_Client_Start=_HP_Client_Start@16")
+ #pragma comment(linker, "/EXPORT:HP_Client_StartWithBindAddress=_HP_Client_StartWithBindAddress@20")
#pragma comment(linker, "/EXPORT:HP_Client_Stop=_HP_Client_Stop@4")
#pragma comment(linker, "/EXPORT:HP_Server_Disconnect=_HP_Server_Disconnect@12")
#pragma comment(linker, "/EXPORT:HP_Server_DisconnectLongConnections=_HP_Server_DisconnectLongConnections@12")
@@ -154,6 +155,7 @@
#pragma comment(linker, "/EXPORT:HP_Server_GetListenAddress=_HP_Server_GetListenAddress@16")
#pragma comment(linker, "/EXPORT:HP_Server_IsMarkSilence=_HP_Server_IsMarkSilence@4")
#pragma comment(linker, "/EXPORT:HP_Server_GetPendingDataLength=_HP_Server_GetPendingDataLength@12")
+ #pragma comment(linker, "/EXPORT:HP_Server_GetLocalAddress=_HP_Server_GetLocalAddress@20")
#pragma comment(linker, "/EXPORT:HP_Server_GetRemoteAddress=_HP_Server_GetRemoteAddress@20")
#pragma comment(linker, "/EXPORT:HP_Server_GetSendPolicy=_HP_Server_GetSendPolicy@4")
#pragma comment(linker, "/EXPORT:HP_Server_GetState=_HP_Server_GetState@4")
@@ -241,14 +243,12 @@
#pragma comment(linker, "/EXPORT:HP_TcpServer_SetKeepAliveTime=_HP_TcpServer_SetKeepAliveTime@8")
#pragma comment(linker, "/EXPORT:HP_TcpServer_SetSocketBufferSize=_HP_TcpServer_SetSocketBufferSize@8")
#pragma comment(linker, "/EXPORT:HP_TcpServer_SetSocketListenQueue=_HP_TcpServer_SetSocketListenQueue@8")
- #pragma comment(linker, "/EXPORT:HP_UdpCast_GetBindAdddress=_HP_UdpCast_GetBindAdddress@4")
#pragma comment(linker, "/EXPORT:HP_UdpCast_GetCastMode=_HP_UdpCast_GetCastMode@4")
#pragma comment(linker, "/EXPORT:HP_UdpCast_GetMaxDatagramSize=_HP_UdpCast_GetMaxDatagramSize@4")
#pragma comment(linker, "/EXPORT:HP_UdpCast_GetMultiCastTtl=_HP_UdpCast_GetMultiCastTtl@4")
#pragma comment(linker, "/EXPORT:HP_UdpCast_GetRemoteAddress=_HP_UdpCast_GetRemoteAddress@16")
#pragma comment(linker, "/EXPORT:HP_UdpCast_IsMultiCastLoop=_HP_UdpCast_IsMultiCastLoop@4")
#pragma comment(linker, "/EXPORT:HP_UdpCast_IsReuseAddress=_HP_UdpCast_IsReuseAddress@4")
- #pragma comment(linker, "/EXPORT:HP_UdpCast_SetBindAdddress=_HP_UdpCast_SetBindAdddress@8")
#pragma comment(linker, "/EXPORT:HP_UdpCast_SetCastMode=_HP_UdpCast_SetCastMode@8")
#pragma comment(linker, "/EXPORT:HP_UdpCast_SetMaxDatagramSize=_HP_UdpCast_SetMaxDatagramSize@8")
#pragma comment(linker, "/EXPORT:HP_UdpCast_SetMultiCastLoop=_HP_UdpCast_SetMultiCastLoop@8")
@@ -275,6 +275,8 @@
#pragma comment(linker, "/EXPORT:SYS_SetSocketOption=_SYS_SetSocketOption@20")
#pragma comment(linker, "/EXPORT:SYS_WSAGetLastError=_SYS_WSAGetLastError@0")
#pragma comment(linker, "/EXPORT:SYS_WSAIoctl=_SYS_WSAIoctl@28")
+ #pragma comment(linker, "/EXPORT:SYS_GetSocketLocalAddress=_SYS_GetSocketLocalAddress@16")
+ #pragma comment(linker, "/EXPORT:SYS_GetSocketRemoteAddress=_SYS_GetSocketRemoteAddress@16")
#endif
class C_HP_TcpServer : public C_HP_Object, public CTcpServer
@@ -689,9 +691,9 @@ HPSOCKET_API void __stdcall HP_Set_FN_Client_OnClose(HP_ClientListener pListener
/**************************************************************************/
/***************************** Server 操作方法 *****************************/
-HPSOCKET_API BOOL __stdcall HP_Server_Start(HP_Server pServer, LPCTSTR pszBindAddress, USHORT usPort)
+HPSOCKET_API BOOL __stdcall HP_Server_Start(HP_Server pServer, LPCTSTR lpszBindAddress, USHORT usPort)
{
- return C_HP_Object::ToServer(pServer)->Start(pszBindAddress, usPort);
+ return C_HP_Object::ToServer(pServer)->Start(lpszBindAddress, usPort);
}
HPSOCKET_API BOOL __stdcall HP_Server_Stop(HP_Server pServer)
@@ -792,6 +794,11 @@ HPSOCKET_API BOOL __stdcall HP_Server_GetListenAddress(HP_Server pServer, TCHAR
return C_HP_Object::ToServer(pServer)->GetListenAddress(lpszAddress, *piAddressLen, *pusPort);
}
+HPSOCKET_API BOOL __stdcall HP_Server_GetLocalAddress(HP_Server pServer, HP_CONNID dwConnID, TCHAR lpszAddress[], int* piAddressLen, USHORT* pusPort)
+{
+ return C_HP_Object::ToServer(pServer)->GetLocalAddress(dwConnID, lpszAddress, *piAddressLen, *pusPort);
+}
+
HPSOCKET_API BOOL __stdcall HP_Server_GetRemoteAddress(HP_Server pServer, HP_CONNID dwConnID, TCHAR lpszAddress[], int* piAddressLen, USHORT* pusPort)
{
return C_HP_Object::ToServer(pServer)->GetRemoteAddress(dwConnID, lpszAddress, *piAddressLen, *pusPort);
@@ -984,9 +991,9 @@ HPSOCKET_API DWORD __stdcall HP_UdpServer_GetDetectInterval(HP_UdpServer pServer
/**************************************************************************/
/***************************** Agent 操作方法 *****************************/
-HPSOCKET_API BOOL __stdcall HP_Agent_Start(HP_Agent pAgent, LPCTSTR pszBindAddress, BOOL bAsyncConnect)
+HPSOCKET_API BOOL __stdcall HP_Agent_Start(HP_Agent pAgent, LPCTSTR lpszBindAddress, BOOL bAsyncConnect)
{
- return C_HP_Object::ToAgent(pAgent)->Start(pszBindAddress, bAsyncConnect);
+ return C_HP_Object::ToAgent(pAgent)->Start(lpszBindAddress, bAsyncConnect);
}
HPSOCKET_API BOOL __stdcall HP_Agent_Stop(HP_Agent pAgent)
@@ -994,9 +1001,9 @@ HPSOCKET_API BOOL __stdcall HP_Agent_Stop(HP_Agent pAgent)
return C_HP_Object::ToAgent(pAgent)->Stop();
}
-HPSOCKET_API BOOL __stdcall HP_Agent_Connect(HP_Agent pAgent, LPCTSTR pszRemoteAddress, USHORT usPort, HP_CONNID* pdwConnID)
+HPSOCKET_API BOOL __stdcall HP_Agent_Connect(HP_Agent pAgent, LPCTSTR lpszRemoteAddress, USHORT usPort, HP_CONNID* pdwConnID)
{
- return C_HP_Object::ToAgent(pAgent)->Connect(pszRemoteAddress, usPort, pdwConnID);
+ return C_HP_Object::ToAgent(pAgent)->Connect(lpszRemoteAddress, usPort, pdwConnID);
}
HPSOCKET_API BOOL __stdcall HP_Agent_Send(HP_Agent pAgent, HP_CONNID dwConnID, const BYTE* pBuffer, int iLength)
@@ -1231,9 +1238,14 @@ HPSOCKET_API DWORD __stdcall HP_TcpAgent_GetKeepAliveInterval(HP_TcpAgent pAgent
/******************************************************************************/
/***************************** Client 组件操作方法 *****************************/
-HPSOCKET_API BOOL __stdcall HP_Client_Start(HP_Client pClient, LPCTSTR pszRemoteAddress, USHORT usPort, BOOL bAsyncConnect)
+HPSOCKET_API BOOL __stdcall HP_Client_Start(HP_Client pClient, LPCTSTR lpszRemoteAddress, USHORT usPort, BOOL bAsyncConnect)
{
- return C_HP_Object::ToClient(pClient)->Start(pszRemoteAddress, usPort, bAsyncConnect);
+ return C_HP_Object::ToClient(pClient)->Start(lpszRemoteAddress, usPort, bAsyncConnect);
+}
+
+HPSOCKET_API BOOL __stdcall HP_Client_StartWithBindAddress(HP_Client pClient, LPCTSTR lpszRemoteAddress, USHORT usPort, BOOL bAsyncConnect, LPCTSTR lpszBindAddress)
+{
+ return C_HP_Object::ToClient(pClient)->Start(lpszRemoteAddress, usPort, bAsyncConnect, lpszBindAddress);
}
HPSOCKET_API BOOL __stdcall HP_Client_Stop(HP_Client pClient)
@@ -1416,16 +1428,6 @@ HPSOCKET_API BOOL __stdcall HP_UdpCast_GetRemoteAddress(HP_UdpCast pCast, TCHAR
return C_HP_Object::ToUdpCast(pCast)->GetRemoteAddress(lpszAddress, *piAddressLen, *pusPort);
}
-HPSOCKET_API void __stdcall HP_UdpCast_SetBindAdddress(HP_UdpCast pCast, LPCTSTR pszBindAddress)
-{
- C_HP_Object::ToUdpCast(pCast)->SetBindAdddress(pszBindAddress);
-}
-
-HPSOCKET_API LPCTSTR __stdcall HP_UdpCast_GetBindAdddress(HP_UdpCast pCast)
-{
- return C_HP_Object::ToUdpCast(pCast)->GetBindAdddress();
-}
-
HPSOCKET_API void __stdcall HP_UdpCast_SetReuseAddress(HP_UdpCast pCast, BOOL bReuseAddress)
{
C_HP_Object::ToUdpCast(pCast)->SetReuseAddress(bReuseAddress);
@@ -1629,3 +1631,13 @@ HPSOCKET_API int __stdcall SYS_WSAIoctl(SOCKET sock, DWORD dwIoControlCode, LPVO
{
return ::SSO_WSAIoctl(sock, dwIoControlCode, lpvInBuffer, cbInBuffer, lpvOutBuffer, cbOutBuffer, lpcbBytesReturned);
}
+
+HPSOCKET_API BOOL __stdcall SYS_GetSocketLocalAddress(SOCKET socket, TCHAR lpszAddress[], int* piAddressLen, USHORT* pusPort)
+{
+ return ::GetSocketLocalAddress(socket, lpszAddress, *piAddressLen, *pusPort);
+}
+
+HPSOCKET_API BOOL __stdcall SYS_GetSocketRemoteAddress(SOCKET socket, TCHAR lpszAddress[], int* piAddressLen, USHORT* pusPort)
+{
+ return ::GetSocketRemoteAddress(socket, lpszAddress, *piAddressLen, *pusPort);
+}
diff --git a/HP-Socket/Src/HPSocket4C.h b/HP-Socket/Src/HPSocket4C.h
index f6ca4ece0..04b72ed6b 100644
--- a/HP-Socket/Src/HPSocket4C.h
+++ b/HP-Socket/Src/HPSocket4C.h
@@ -1,7 +1,7 @@
/*
* Copyright: JessMA Open Source (ldcsaa@gmail.com)
*
- * Version : 3.5.1
+ * Version : 3.5.2
* Author : Bruce Liang
* Website : http://www.jessma.org
* Project : https://github.com/ldcsaa
@@ -404,12 +404,12 @@ HPSOCKET_API void __stdcall HP_Set_FN_Client_OnClose(HP_ClientListener pListener
* 名称:启动通信组件
* 描述:启动服务端通信组件,启动完成后可开始接收客户端连接并收发数据
*
-* 参数: pszBindAddress -- 监听地址
+* 参数: lpszBindAddress -- 监听地址
* usPort -- 监听端口
* 返回值: TRUE -- 成功
* FALSE -- 失败,可通过 HP_Server_GetLastError() 获取错误代码
*/
-HPSOCKET_API BOOL __stdcall HP_Server_Start(HP_Server pServer, LPCTSTR pszBindAddress, USHORT usPort);
+HPSOCKET_API BOOL __stdcall HP_Server_Start(HP_Server pServer, LPCTSTR lpszBindAddress, USHORT usPort);
/*
* 名称:关闭通信组件
@@ -538,6 +538,8 @@ HPSOCKET_API BOOL __stdcall HP_Server_GetConnectPeriod(HP_Server pServer, HP_CON
HPSOCKET_API BOOL __stdcall HP_Server_GetSilencePeriod(HP_Server pServer, HP_CONNID dwConnID, DWORD* pdwPeriod);
/* 获取监听 Socket 的地址信息 */
HPSOCKET_API BOOL __stdcall HP_Server_GetListenAddress(HP_Server pServer, TCHAR lpszAddress[], int* piAddressLen, USHORT* pusPort);
+/* 获取某个连接的本地地址信息 */
+HPSOCKET_API BOOL __stdcall HP_Server_GetLocalAddress(HP_Server pServer, HP_CONNID dwConnID, TCHAR lpszAddress[], int* piAddressLen, USHORT* pusPort);
/* 获取某个连接的远程地址信息 */
HPSOCKET_API BOOL __stdcall HP_Server_GetRemoteAddress(HP_Server pServer, HP_CONNID dwConnID, TCHAR lpszAddress[], int* piAddressLen, USHORT* pusPort);
@@ -645,12 +647,12 @@ HPSOCKET_API DWORD __stdcall HP_UdpServer_GetDetectInterval(HP_UdpServer pServer
* 名称:启动通信组件
* 描述:启动通信代理组件,启动完成后可开始连接远程服务器
*
-* 参数: pszBindAddress -- 监听地址
+* 参数: lpszBindAddress -- 绑定地址(默认:nullptr,绑定 0.0.0.0)
* bAsyncConnect -- 是否采用异步 Connect
* 返回值: TRUE -- 成功
* FALSE -- 失败,可通过 HP_Agent_GetLastError() 获取错误代码
*/
-HPSOCKET_API BOOL __stdcall HP_Agent_Start(HP_Agent pAgent, LPCTSTR pszBindAddress, BOOL bAsyncConnect);
+HPSOCKET_API BOOL __stdcall HP_Agent_Start(HP_Agent pAgent, LPCTSTR lpszBindAddress, BOOL bAsyncConnect);
/*
* 名称:关闭通信组件
@@ -666,13 +668,13 @@ HPSOCKET_API BOOL __stdcall HP_Agent_Stop(HP_Agent pAgent);
* 名称:连接服务器
* 描述:连接服务器,连接成功后 IAgentListener 会接收到 OnConnect() 事件
*
-* 参数: pszRemoteAddress -- 服务端地址
+* 参数: lpszRemoteAddress -- 服务端地址
* usPort -- 服务端端口
* pdwConnID -- 连接 ID(默认:nullptr,不获取连接 ID)
* 返回值: TRUE -- 成功
* FALSE -- 失败,可通过函数 SYS_GetLastError() 获取 Windows 错误代码
*/
-HPSOCKET_API BOOL __stdcall HP_Agent_Connect(HP_Agent pAgent, LPCTSTR pszRemoteAddress, USHORT usPort, HP_CONNID* pdwConnID);
+HPSOCKET_API BOOL __stdcall HP_Agent_Connect(HP_Agent pAgent, LPCTSTR lpszRemoteAddress, USHORT usPort, HP_CONNID* pdwConnID);
/*
* 名称:发送数据
@@ -873,13 +875,26 @@ HPSOCKET_API DWORD __stdcall HP_TcpAgent_GetKeepAliveInterval(HP_TcpAgent pAgent
* 名称:启动通信组件
* 描述:启动客户端通信组件并连接服务端,启动完成后可开始收发数据
*
-* 参数: pszRemoteAddress -- 服务端地址
+* 参数: lpszRemoteAddress -- 服务端地址
+* usPort -- 服务端端口
+* bAsyncConnect -- 是否采用异步 Connect
+* 返回值: TRUE -- 成功
+* FALSE -- 失败,可通过 HP_Client_GetLastError() 获取错误代码
+*/
+HPSOCKET_API BOOL __stdcall HP_Client_Start(HP_Client pClient, LPCTSTR lpszRemoteAddress, USHORT usPort, BOOL bAsyncConnect);
+
+/*
+* 名称:启动通信组件(并指定绑定地址)
+* 描述:启动客户端通信组件并连接服务端,启动完成后可开始收发数据
+*
+* 参数: lpszRemoteAddress -- 服务端地址
* usPort -- 服务端端口
* bAsyncConnect -- 是否采用异步 Connect
+* lpszBindAddress -- 绑定地址(默认:nullptr,TcpClient/UdpClient -> 不执行绑定操作,UdpCast 绑定 -> 0.0.0.0)
* 返回值: TRUE -- 成功
* FALSE -- 失败,可通过 HP_Client_GetLastError() 获取错误代码
*/
-HPSOCKET_API BOOL __stdcall HP_Client_Start(HP_Client pClient, LPCTSTR pszRemoteAddress, USHORT usPort, BOOL bAsyncConnect);
+HPSOCKET_API BOOL __stdcall HP_Client_StartWithBindAddress(HP_Client pClient, LPCTSTR lpszRemoteAddress, USHORT usPort, BOOL bAsyncConnect, LPCTSTR lpszBindAddress);
/*
* 名称:关闭通信组件
@@ -1016,10 +1031,6 @@ HPSOCKET_API void __stdcall HP_UdpCast_SetMaxDatagramSize(HP_UdpCast pCast, DWOR
HPSOCKET_API DWORD __stdcall HP_UdpCast_GetMaxDatagramSize(HP_UdpCast pCast);
/* 获取当前数据报的远程地址信息(通常在 OnReceive 事件中调用) */
HPSOCKET_API BOOL __stdcall HP_UdpCast_GetRemoteAddress(HP_UdpCast pCast, TCHAR lpszAddress[], int* piAddressLen, USHORT* pusPort);
-/* 设置绑定地址 */
-HPSOCKET_API void __stdcall HP_UdpCast_SetBindAdddress(HP_UdpCast pCast, LPCTSTR pszBindAddress);
-/* 获取绑定地址 */
-HPSOCKET_API LPCTSTR __stdcall HP_UdpCast_GetBindAdddress(HP_UdpCast pCast);
/* 设置是否启用地址重用机制(默认:不启用) */
HPSOCKET_API void __stdcall HP_UdpCast_SetReuseAddress(HP_UdpCast pCast, BOOL bReuseAddress);
/* 检测是否启用地址重用机制 */
@@ -1186,3 +1197,7 @@ HPSOCKET_API int __stdcall SYS_GetSocketOption(SOCKET sock, int level, int name,
HPSOCKET_API int __stdcall SYS_IoctlSocket(SOCKET sock, long cmd, u_long* arg);
// 调用系统的 ::WSAIoctl()
HPSOCKET_API int __stdcall SYS_WSAIoctl(SOCKET sock, DWORD dwIoControlCode, LPVOID lpvInBuffer, DWORD cbInBuffer, LPVOID lpvOutBuffer, DWORD cbOutBuffer, LPDWORD lpcbBytesReturned);
+// 获取 SOCKET 本地地址信息
+HPSOCKET_API BOOL __stdcall SYS_GetSocketLocalAddress(SOCKET socket, TCHAR lpszAddress[], int* piAddressLen, USHORT* pusPort);
+// 获取 SOCKET 远程地址信息
+HPSOCKET_API BOOL __stdcall SYS_GetSocketRemoteAddress(SOCKET socket, TCHAR lpszAddress[], int* piAddressLen, USHORT* pusPort);
diff --git a/HP-Socket/Src/MiscHelper.cpp b/HP-Socket/Src/MiscHelper.cpp
index 6a67d8906..47d857f97 100644
--- a/HP-Socket/Src/MiscHelper.cpp
+++ b/HP-Socket/Src/MiscHelper.cpp
@@ -1,7 +1,7 @@
/*
* Copyright: JessMA Open Source (ldcsaa@gmail.com)
*
- * Version : 3.5.1
+ * Version : 3.5.2
* Author : Bruce Liang
* Website : http://www.jessma.org
* Project : https://github.com/ldcsaa
diff --git a/HP-Socket/Src/MiscHelper.h b/HP-Socket/Src/MiscHelper.h
index 358098fc0..74bb522c1 100644
--- a/HP-Socket/Src/MiscHelper.h
+++ b/HP-Socket/Src/MiscHelper.h
@@ -1,7 +1,7 @@
/*
* Copyright: JessMA Open Source (ldcsaa@gmail.com)
*
- * Version : 3.5.1
+ * Version : 3.5.2
* Author : Bruce Liang
* Website : http://www.jessma.org
* Project : https://github.com/ldcsaa
diff --git a/HP-Socket/Src/SSLAgent.cpp b/HP-Socket/Src/SSLAgent.cpp
index e50b36a93..674ca2715 100644
--- a/HP-Socket/Src/SSLAgent.cpp
+++ b/HP-Socket/Src/SSLAgent.cpp
@@ -1,7 +1,7 @@
/*
* Copyright: JessMA Open Source (ldcsaa@gmail.com)
*
- * Version : 3.5.1
+ * Version : 3.5.2
* Author : Bruce Liang
* Website : http://www.jessma.org
* Project : https://github.com/ldcsaa
diff --git a/HP-Socket/Src/SSLAgent.h b/HP-Socket/Src/SSLAgent.h
index f072b757c..7bf1c10ce 100644
--- a/HP-Socket/Src/SSLAgent.h
+++ b/HP-Socket/Src/SSLAgent.h
@@ -1,7 +1,7 @@
/*
* Copyright: JessMA Open Source (ldcsaa@gmail.com)
*
- * Version : 3.5.1
+ * Version : 3.5.2
* Author : Bruce Liang
* Website : http://www.jessma.org
* Project : https://github.com/ldcsaa
diff --git a/HP-Socket/Src/SSLClient.cpp b/HP-Socket/Src/SSLClient.cpp
index b835a39da..860634010 100644
--- a/HP-Socket/Src/SSLClient.cpp
+++ b/HP-Socket/Src/SSLClient.cpp
@@ -1,7 +1,7 @@
/*
* Copyright: JessMA Open Source (ldcsaa@gmail.com)
*
- * Version : 3.5.1
+ * Version : 3.5.2
* Author : Bruce Liang
* Website : http://www.jessma.org
* Project : https://github.com/ldcsaa
diff --git a/HP-Socket/Src/SSLClient.h b/HP-Socket/Src/SSLClient.h
index 3a71aa67d..5c70a52a1 100644
--- a/HP-Socket/Src/SSLClient.h
+++ b/HP-Socket/Src/SSLClient.h
@@ -1,7 +1,7 @@
/*
* Copyright: JessMA Open Source (ldcsaa@gmail.com)
*
- * Version : 3.5.1
+ * Version : 3.5.2
* Author : Bruce Liang
* Website : http://www.jessma.org
* Project : https://github.com/ldcsaa
diff --git a/HP-Socket/Src/SSLHelper.cpp b/HP-Socket/Src/SSLHelper.cpp
index 41f6c28fe..c52669127 100644
--- a/HP-Socket/Src/SSLHelper.cpp
+++ b/HP-Socket/Src/SSLHelper.cpp
@@ -1,7 +1,7 @@
/*
* Copyright: JessMA Open Source (ldcsaa@gmail.com)
*
- * Version : 3.5.1
+ * Version : 3.5.2
* Author : Bruce Liang
* Website : http://www.jessma.org
* Project : https://github.com/ldcsaa
diff --git a/HP-Socket/Src/SSLHelper.h b/HP-Socket/Src/SSLHelper.h
index b31404019..32600dc6a 100644
--- a/HP-Socket/Src/SSLHelper.h
+++ b/HP-Socket/Src/SSLHelper.h
@@ -1,7 +1,7 @@
/*
* Copyright: JessMA Open Source (ldcsaa@gmail.com)
*
- * Version : 3.5.1
+ * Version : 3.5.2
* Author : Bruce Liang
* Website : http://www.jessma.org
* Project : https://github.com/ldcsaa
diff --git a/HP-Socket/Src/SSLServer.cpp b/HP-Socket/Src/SSLServer.cpp
index 631bad798..cd5039918 100644
--- a/HP-Socket/Src/SSLServer.cpp
+++ b/HP-Socket/Src/SSLServer.cpp
@@ -1,7 +1,7 @@
/*
* Copyright: JessMA Open Source (ldcsaa@gmail.com)
*
- * Version : 3.5.1
+ * Version : 3.5.2
* Author : Bruce Liang
* Website : http://www.jessma.org
* Project : https://github.com/ldcsaa
diff --git a/HP-Socket/Src/SSLServer.h b/HP-Socket/Src/SSLServer.h
index 2917dda0d..e09c8aaee 100644
--- a/HP-Socket/Src/SSLServer.h
+++ b/HP-Socket/Src/SSLServer.h
@@ -1,7 +1,7 @@
/*
* Copyright: JessMA Open Source (ldcsaa@gmail.com)
*
- * Version : 3.5.1
+ * Version : 3.5.2
* Author : Bruce Liang
* Website : http://www.jessma.org
* Project : https://github.com/ldcsaa
diff --git a/HP-Socket/Src/SocketHelper.cpp b/HP-Socket/Src/SocketHelper.cpp
index cbda33c34..e455d7212 100644
--- a/HP-Socket/Src/SocketHelper.cpp
+++ b/HP-Socket/Src/SocketHelper.cpp
@@ -1,7 +1,7 @@
/*
* Copyright: JessMA Open Source (ldcsaa@gmail.com)
*
- * Version : 3.5.1
+ * Version : 3.5.2
* Author : Bruce Liang
* Website : http://www.jessma.org
* Project : https://github.com/ldcsaa
@@ -202,13 +202,13 @@ BOOL sockaddr_IN_2_A(const SOCKADDR_IN& addr, ADDRESS_FAMILY& usFamily, LPTSTR l
return IN_ADDR_2_IP(addr.sin_addr, lpszAddress, iAddressLen);
}
-BOOL sockaddr_A_2_IN(ADDRESS_FAMILY usFamily, LPCTSTR pszAddress, USHORT usPort, SOCKADDR_IN& addr)
+BOOL sockaddr_A_2_IN(ADDRESS_FAMILY usFamily, LPCTSTR lpszAddress, USHORT usPort, SOCKADDR_IN& addr)
{
ASSERT(usFamily == AF_INET);
addr.sin_family = usFamily;
addr.sin_port = htons(usPort);
- addr.sin_addr.s_addr = GetIPv4InAddr(pszAddress);
+ addr.sin_addr.s_addr = GetIPv4InAddr(lpszAddress);
return addr.sin_addr.s_addr != INADDR_NONE;
}
diff --git a/HP-Socket/Src/SocketHelper.h b/HP-Socket/Src/SocketHelper.h
index f52159a19..805d5d7be 100644
--- a/HP-Socket/Src/SocketHelper.h
+++ b/HP-Socket/Src/SocketHelper.h
@@ -1,7 +1,7 @@
/*
* Copyright: JessMA Open Source (ldcsaa@gmail.com)
*
- * Version : 3.5.1
+ * Version : 3.5.2
* Author : Bruce Liang
* Website : http://www.jessma.org
* Project : https://github.com/ldcsaa
@@ -460,7 +460,7 @@ BOOL IN_ADDR_2_IP(const IN_ADDR& addr, __out LPTSTR lpszAddress, __inout int& iA
/* 把 SOCKADDR_IN 结构转换为地址数据 */
BOOL sockaddr_IN_2_A(const SOCKADDR_IN& addr, __out ADDRESS_FAMILY& usFamily, __out LPTSTR lpszAddress, __inout int& iAddressLen, __out USHORT& usPort);
/* 把地址数据转换为 SOCKADDR_IN 结构 */
-BOOL sockaddr_A_2_IN(ADDRESS_FAMILY usFamily, LPCTSTR pszAddress, USHORT usPort, __out SOCKADDR_IN& addr);
+BOOL sockaddr_A_2_IN(ADDRESS_FAMILY usFamily, LPCTSTR lpszAddress, USHORT usPort, __out SOCKADDR_IN& addr);
/* 获取 Socket 的本地或远程地址信息 */
BOOL GetSocketAddress(SOCKET socket, __out LPTSTR lpszAddress, __inout int& iAddressLen, __out USHORT& usPort, BOOL bLocal = TRUE);
/* 获取 Socket 的本地地址信息 */
diff --git a/HP-Socket/Src/SocketInterface-SSL.h b/HP-Socket/Src/SocketInterface-SSL.h
index 15295a8c1..c513cb491 100644
--- a/HP-Socket/Src/SocketInterface-SSL.h
+++ b/HP-Socket/Src/SocketInterface-SSL.h
@@ -1,7 +1,7 @@
/*
* Copyright: JessMA Open Source (ldcsaa@gmail.com)
*
- * Version : 3.5.1
+ * Version : 3.5.2
* Author : Bruce Liang
* Website : http://www.jessma.org
* Project : https://github.com/ldcsaa
diff --git a/HP-Socket/Src/SocketInterface.h b/HP-Socket/Src/SocketInterface.h
index 06e3479c6..392abc1e8 100644
--- a/HP-Socket/Src/SocketInterface.h
+++ b/HP-Socket/Src/SocketInterface.h
@@ -1,7 +1,7 @@
/*
* Copyright: JessMA Open Source (ldcsaa@gmail.com)
*
- * Version : 3.5.1
+ * Version : 3.5.2
* Author : Bruce Liang
* Website : http://www.jessma.org
* Project : https://github.com/ldcsaa
@@ -685,6 +685,8 @@ class IComplexSocket
virtual BOOL GetConnectPeriod (CONNID dwConnID, DWORD& dwPeriod) = 0;
/* 获取某个连接静默时间(毫秒) */
virtual BOOL GetSilencePeriod (CONNID dwConnID, DWORD& dwPeriod) = 0;
+ /* 获取某个连接的本地地址信息 */
+ virtual BOOL GetLocalAddress (CONNID dwConnID, TCHAR lpszAddress[], int& iAddressLen, USHORT& usPort) = 0;
/* 获取某个连接的远程地址信息 */
virtual BOOL GetRemoteAddress (CONNID dwConnID, TCHAR lpszAddress[], int& iAddressLen, USHORT& usPort) = 0;
/* 获取最近一次失败操作的错误代码 */
@@ -747,12 +749,12 @@ class IServer : public IComplexSocket
* 名称:启动通信组件
* 描述:启动服务端通信组件,启动完成后可开始接收客户端连接并收发数据
*
- * 参数: pszBindAddress -- 监听地址
+ * 参数: lpszBindAddress -- 监听地址
* usPort -- 监听端口
* 返回值: TRUE -- 成功
* FALSE -- 失败,可通过 GetLastError() 获取错误代码
*/
- virtual BOOL Start (LPCTSTR pszBindAddress, USHORT usPort) = 0;
+ virtual BOOL Start (LPCTSTR lpszBindAddress, USHORT usPort) = 0;
public:
@@ -866,32 +868,30 @@ class IAgent : public IComplexSocket
* 名称:启动通信组件
* 描述:启动通信代理组件,启动完成后可开始连接远程服务器
*
- * 参数: pszBindAddress -- 监听地址
+ * 参数: lpszBindAddress -- 绑定地址(默认:nullptr,绑定 0.0.0.0)
* bAsyncConnect -- 是否采用异步 Connect
* 返回值: TRUE -- 成功
* FALSE -- 失败,可通过 GetLastError() 获取错误代码
*/
- virtual BOOL Start (LPCTSTR pszBindAddress = nullptr, BOOL bAsyncConnect = TRUE) = 0;
+ virtual BOOL Start (LPCTSTR lpszBindAddress = nullptr, BOOL bAsyncConnect = TRUE) = 0;
/*
* 名称:连接服务器
* 描述:连接服务器,连接成功后 IAgentListener 会接收到 OnConnect() 事件
*
- * 参数: pszRemoteAddress -- 服务端地址
+ * 参数: lpszRemoteAddress -- 服务端地址
* usPort -- 服务端端口
* pdwConnID -- 连接 ID(默认:nullptr,不获取连接 ID)
* 返回值: TRUE -- 成功
* FALSE -- 失败,可通过 Windows API 函数 ::GetLastError() 获取 Windows 错误代码
*/
- virtual BOOL Connect(LPCTSTR pszRemoteAddress, USHORT usPort, CONNID* pdwConnID = nullptr) = 0;
+ virtual BOOL Connect(LPCTSTR lpszRemoteAddress, USHORT usPort, CONNID* pdwConnID = nullptr) = 0;
public:
/***********************************************************************/
/***************************** 属性访问方法 *****************************/
- /* 获取某个连接的本地地址信息 */
- virtual BOOL GetLocalAddress(CONNID dwConnID, TCHAR lpszAddress[], int& iAddressLen, USHORT& usPort) = 0;
};
/************************************************************************
@@ -958,13 +958,14 @@ class IClient
* 名称:启动通信组件
* 描述:启动客户端通信组件并连接服务端,启动完成后可开始收发数据
*
- * 参数: pszRemoteAddress -- 服务端地址
+ * 参数: lpszRemoteAddress -- 服务端地址
* usPort -- 服务端端口
* bAsyncConnect -- 是否采用异步 Connect
+ * lpszBindAddress -- 绑定地址(默认:nullptr,TcpClient/UdpClient -> 不执行绑定操作,UdpCast 绑定 -> 0.0.0.0)
* 返回值: TRUE -- 成功
* FALSE -- 失败,可通过 GetLastError() 获取错误代码
*/
- virtual BOOL Start (LPCTSTR pszRemoteAddress, USHORT usPort, BOOL bAsyncConnect = FALSE) = 0;
+ virtual BOOL Start (LPCTSTR lpszRemoteAddress, USHORT usPort, BOOL bAsyncConnect = TRUE, LPCTSTR lpszBindAddress = nullptr) = 0;
/*
* 名称:关闭通信组件
@@ -1131,11 +1132,6 @@ class IUdpCast : public IClient
/***********************************************************************/
/***************************** 属性访问方法 *****************************/
- /* 设置绑定地址 */
- virtual void SetBindAdddress (LPCTSTR pszBindAddress) = 0;
- /* 获取绑定地址 */
- virtual LPCTSTR GetBindAdddress () = 0;
-
/* 设置数据报文最大长度(建议在局域网环境下不超过 1472 字节,在广域网环境下不超过 548 字节) */
virtual void SetMaxDatagramSize (DWORD dwMaxDatagramSize) = 0;
/* 获取数据报文最大长度 */
diff --git a/HP-Socket/Src/SocketObject4C.h b/HP-Socket/Src/SocketObject4C.h
index b4fab6abc..4f6db41e5 100644
--- a/HP-Socket/Src/SocketObject4C.h
+++ b/HP-Socket/Src/SocketObject4C.h
@@ -1,7 +1,7 @@
/*
* Copyright: JessMA Open Source (ldcsaa@gmail.com)
*
- * Version : 3.5.1
+ * Version : 3.5.2
* Author : Bruce Liang
* Website : http://www.jessma.org
* Project : https://github.com/ldcsaa
diff --git a/HP-Socket/Src/TcpAgent.cpp b/HP-Socket/Src/TcpAgent.cpp
index 05eeaf6e3..3e7823e4c 100644
--- a/HP-Socket/Src/TcpAgent.cpp
+++ b/HP-Socket/Src/TcpAgent.cpp
@@ -1,7 +1,7 @@
/*
* Copyright: JessMA Open Source (ldcsaa@gmail.com)
*
- * Version : 3.5.1
+ * Version : 3.5.2
* Author : Bruce Liang
* Website : http://www.jessma.org
* Project : https://github.com/ldcsaa
@@ -81,14 +81,14 @@ void CTcpAgent::SetLastError(EnSocketError code, LPCSTR func, int ec)
TRACE("%s --> Error: %d, EC: %d\n", func, code, ec);
}
-BOOL CTcpAgent::Start(LPCTSTR pszBindAddress, BOOL bAsyncConnect)
+BOOL CTcpAgent::Start(LPCTSTR lpszBindAddress, BOOL bAsyncConnect)
{
if(!CheckParams() || !CheckStarting())
return FALSE;
PrepareStart();
- if(ParseBindAddress(pszBindAddress, bAsyncConnect))
+ if(ParseBindAddress(lpszBindAddress))
if(CreateCompletePort())
if(CreateWorkerThreads())
{
@@ -162,19 +162,19 @@ BOOL CTcpAgent::CheckStoping()
return TRUE;
}
-BOOL CTcpAgent::ParseBindAddress(LPCTSTR pszBindAddress, BOOL bAsyncConnect)
+BOOL CTcpAgent::ParseBindAddress(LPCTSTR lpszBindAddress)
{
BOOL isOK = FALSE;
SOCKET sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(sock != INVALID_SOCKET)
{
- if(!pszBindAddress)
- pszBindAddress = DEFAULT_BIND_ADDRESS;
+ if(!lpszBindAddress)
+ lpszBindAddress = DEFAULT_BIND_ADDRESS;
- ::sockaddr_A_2_IN(AF_INET, pszBindAddress, 0, m_soAddrIN);
+ ::sockaddr_A_2_IN(AF_INET, lpszBindAddress, 0, m_soAddrIN);
- if(!bAsyncConnect || ::bind(sock, (SOCKADDR*)&m_soAddrIN, sizeof(SOCKADDR_IN)) != SOCKET_ERROR)
+ if(::bind(sock, (SOCKADDR*)&m_soAddrIN, sizeof(SOCKADDR_IN)) != SOCKET_ERROR)
{
m_pfnConnectEx = ::Get_ConnectEx_FuncPtr(sock);
m_pfnDisconnectEx = ::Get_DisconnectEx_FuncPtr(sock);
@@ -1008,9 +1008,9 @@ int CTcpAgent::DoReceive(CONNID dwConnID, TSocketObj* pSocketObj, TBufferObj* pB
return result;
}
-BOOL CTcpAgent::Connect(LPCTSTR pszRemoteAddress, USHORT usPort, CONNID* pdwConnID)
+BOOL CTcpAgent::Connect(LPCTSTR lpszRemoteAddress, USHORT usPort, CONNID* pdwConnID)
{
- ASSERT(pszRemoteAddress && usPort != 0);
+ ASSERT(lpszRemoteAddress && usPort != 0);
if(pdwConnID) *pdwConnID = 0;
@@ -1029,7 +1029,7 @@ BOOL CTcpAgent::Connect(LPCTSTR pszRemoteAddress, USHORT usPort, CONNID* pdwConn
if(pdwConnID) *pdwConnID = dwConnID;
if(FirePrepareConnect(dwConnID, soClient) != HR_ERROR)
- result = ConnectToServer(dwConnID, soClient, pszRemoteAddress, usPort);
+ result = ConnectToServer(dwConnID, soClient, lpszRemoteAddress, usPort);
else
result = ERROR_CANCELLED;
}
@@ -1058,7 +1058,7 @@ DWORD CTcpAgent::CreateClientSocket(SOCKET& soClient)
BOOL bOnOff = (m_dwKeepAliveTime > 0 && m_dwKeepAliveInterval > 0);
::SSO_KeepAliveVals(soClient, bOnOff, m_dwKeepAliveTime, m_dwKeepAliveInterval);
- if(m_bAsyncConnect && ::bind(soClient, (SOCKADDR*)&m_soAddrIN, sizeof(SOCKADDR_IN)) == SOCKET_ERROR)
+ if(::bind(soClient, (SOCKADDR*)&m_soAddrIN, sizeof(SOCKADDR_IN)) == SOCKET_ERROR)
result = ::WSAGetLastError();
}
else
@@ -1067,12 +1067,12 @@ DWORD CTcpAgent::CreateClientSocket(SOCKET& soClient)
return result;
}
-DWORD CTcpAgent::ConnectToServer(CONNID dwConnID, SOCKET& soClient, LPCTSTR pszRemoteAddress, USHORT usPort)
+DWORD CTcpAgent::ConnectToServer(CONNID dwConnID, SOCKET& soClient, LPCTSTR lpszRemoteAddress, USHORT usPort)
{
TCHAR szAddress[40];
int iAddressLen = sizeof(szAddress) / sizeof(TCHAR);
- if(!::GetIPAddress(pszRemoteAddress, szAddress, iAddressLen))
+ if(!::GetIPAddress(lpszRemoteAddress, szAddress, iAddressLen))
return WSAEADDRNOTAVAIL;
SOCKADDR_IN addr;
diff --git a/HP-Socket/Src/TcpAgent.h b/HP-Socket/Src/TcpAgent.h
index 571787f4e..4f5f17866 100644
--- a/HP-Socket/Src/TcpAgent.h
+++ b/HP-Socket/Src/TcpAgent.h
@@ -1,7 +1,7 @@
/*
* Copyright: JessMA Open Source (ldcsaa@gmail.com)
*
- * Version : 3.5.1
+ * Version : 3.5.2
* Author : Bruce Liang
* Website : http://www.jessma.org
* Project : https://github.com/ldcsaa
@@ -68,9 +68,9 @@ class CTcpAgent : public ITcpAgent
}
public:
- virtual BOOL Start (LPCTSTR pszBindAddress = nullptr, BOOL bAsyncConnect = TRUE);
+ virtual BOOL Start (LPCTSTR lpszBindAddress = nullptr, BOOL bAsyncConnect = TRUE);
virtual BOOL Stop ();
- virtual BOOL Connect(LPCTSTR pszRemoteAddress, USHORT usPort, CONNID* pdwConnID = nullptr);
+ virtual BOOL Connect(LPCTSTR lpszRemoteAddress, USHORT usPort, CONNID* pdwConnID = nullptr);
virtual BOOL Send (CONNID dwConnID, const BYTE* pBuffer, int iLength, int iOffset = 0);
virtual BOOL SendSmallFile (CONNID dwConnID, LPCTSTR lpszFileName, const LPWSABUF pHead = nullptr, const LPWSABUF pTail = nullptr);
virtual BOOL SendPackets (CONNID dwConnID, const WSABUF pBuffers[], int iCount) {return DoSendPackets(dwConnID, pBuffers, iCount);}
@@ -187,7 +187,7 @@ class CTcpAgent : public ITcpAgent
private:
BOOL CheckStarting();
BOOL CheckStoping();
- BOOL ParseBindAddress(LPCTSTR pszBindAddress, BOOL bAsyncConnect);
+ BOOL ParseBindAddress(LPCTSTR lpszBindAddress);
BOOL CreateCompletePort();
BOOL CreateWorkerThreads();
@@ -217,7 +217,7 @@ class CTcpAgent : public ITcpAgent
EnIocpAction CheckIocpCommand(OVERLAPPED* pOverlapped, DWORD dwBytes, ULONG_PTR ulCompKey);
DWORD CreateClientSocket(SOCKET& soClient);
- DWORD ConnectToServer (CONNID dwConnID, SOCKET& soClient, LPCTSTR pszRemoteAddress, USHORT usPort);
+ DWORD ConnectToServer (CONNID dwConnID, SOCKET& soClient, LPCTSTR lpszRemoteAddress, USHORT usPort);
void ForceDisconnect (CONNID dwConnID);
void HandleIo (CONNID dwConnID, TSocketObj* pSocketObj, TBufferObj* pBufferObj, DWORD dwBytes, DWORD dwErrorCode);
diff --git a/HP-Socket/Src/TcpClient.cpp b/HP-Socket/Src/TcpClient.cpp
index 138ab60de..91e39daaa 100644
--- a/HP-Socket/Src/TcpClient.cpp
+++ b/HP-Socket/Src/TcpClient.cpp
@@ -1,7 +1,7 @@
/*
* Copyright: JessMA Open Source (ldcsaa@gmail.com)
*
- * Version : 3.5.1
+ * Version : 3.5.2
* Author : Bruce Liang
* Website : http://www.jessma.org
* Project : https://github.com/ldcsaa
@@ -29,7 +29,7 @@
#include
-BOOL CTcpClient::Start(LPCTSTR pszRemoteAddress, USHORT usPort, BOOL bAsyncConnect)
+BOOL CTcpClient::Start(LPCTSTR lpszRemoteAddress, USHORT usPort, BOOL bAsyncConnect, LPCTSTR lpszBindAddress)
{
if(!CheckParams() || !CheckStarting())
return FALSE;
@@ -41,20 +41,25 @@ BOOL CTcpClient::Start(LPCTSTR pszRemoteAddress, USHORT usPort, BOOL bAsyncConne
if(CreateClientSocket())
{
- if(FirePrepareConnect(this, m_soClient) != HR_ERROR)
+ if(BindClientSocket(lpszBindAddress))
{
- if(ConnectToServer(pszRemoteAddress, usPort))
+ if(FirePrepareConnect(this, m_soClient) != HR_ERROR)
{
- if(CreateWorkerThread())
- isOK = TRUE;
+ if(ConnectToServer(lpszRemoteAddress, usPort))
+ {
+ if(CreateWorkerThread())
+ isOK = TRUE;
+ else
+ SetLastError(SE_WORKER_THREAD_CREATE, __FUNCTION__, ERROR_CREATE_FAILED);
+ }
else
- SetLastError(SE_WORKER_THREAD_CREATE, __FUNCTION__, ERROR_CREATE_FAILED);
+ SetLastError(SE_CONNECT_SERVER, __FUNCTION__, ::WSAGetLastError());
}
else
- SetLastError(SE_CONNECT_SERVER, __FUNCTION__, ::WSAGetLastError());
+ SetLastError(SE_SOCKET_PREPARE, __FUNCTION__, ERROR_CANCELLED);
}
else
- SetLastError(SE_SOCKET_PREPARE, __FUNCTION__, ERROR_CANCELLED);
+ SetLastError(SE_SOCKET_BIND, __FUNCTION__, ::WSAGetLastError());
}
else
SetLastError(SE_SOCKET_CREATE, __FUNCTION__, ::WSAGetLastError());
@@ -119,6 +124,7 @@ BOOL CTcpClient::CheckStoping()
BOOL CTcpClient::CreateClientSocket()
{
m_soClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
+
if(m_soClient != INVALID_SOCKET)
{
BOOL bOnOff = (m_dwKeepAliveTime > 0 && m_dwKeepAliveInterval > 0);
@@ -127,20 +133,38 @@ BOOL CTcpClient::CreateClientSocket()
m_evSocket = ::WSACreateEvent();
ASSERT(m_evSocket != WSA_INVALID_EVENT);
- m_dwConnID = ::GenerateConnectionID();
-
return TRUE;
}
return FALSE;
}
-BOOL CTcpClient::ConnectToServer(LPCTSTR pszRemoteAddress, USHORT usPort)
+BOOL CTcpClient::BindClientSocket(LPCTSTR lpszBindAddress)
+{
+ if(lpszBindAddress)
+ {
+ SOCKADDR_IN bindAddr;
+ if(!::sockaddr_A_2_IN(AF_INET, lpszBindAddress, 0, bindAddr))
+ {
+ ::WSASetLastError(WSAEADDRNOTAVAIL);
+ return FALSE;
+ }
+
+ if(::bind(m_soClient, (struct sockaddr*)&bindAddr, sizeof(SOCKADDR_IN)) == SOCKET_ERROR)
+ return FALSE;
+ }
+
+ m_dwConnID = ::GenerateConnectionID();
+
+ return TRUE;
+}
+
+BOOL CTcpClient::ConnectToServer(LPCTSTR lpszRemoteAddress, USHORT usPort)
{
TCHAR szAddress[40];
int iAddressLen = sizeof(szAddress) / sizeof(TCHAR);
- if(!::GetIPAddress(pszRemoteAddress, szAddress, iAddressLen))
+ if(!::GetIPAddress(lpszRemoteAddress, szAddress, iAddressLen))
{
::WSASetLastError(WSAEADDRNOTAVAIL);
return FALSE;
diff --git a/HP-Socket/Src/TcpClient.h b/HP-Socket/Src/TcpClient.h
index 8e66d9d0f..45f9d6352 100644
--- a/HP-Socket/Src/TcpClient.h
+++ b/HP-Socket/Src/TcpClient.h
@@ -1,7 +1,7 @@
/*
* Copyright: JessMA Open Source (ldcsaa@gmail.com)
*
- * Version : 3.5.1
+ * Version : 3.5.2
* Author : Bruce Liang
* Website : http://www.jessma.org
* Project : https://github.com/ldcsaa
@@ -33,7 +33,7 @@
class CTcpClient : public ITcpClient
{
public:
- virtual BOOL Start (LPCTSTR pszRemoteAddress, USHORT usPort, BOOL bAsyncConnect = FALSE);
+ virtual BOOL Start (LPCTSTR lpszRemoteAddress, USHORT usPort, BOOL bAsyncConnect = TRUE, LPCTSTR lpszBindAddress = nullptr);
virtual BOOL Stop ();
virtual BOOL Send (const BYTE* pBuffer, int iLength, int iOffset = 0);
virtual BOOL SendSmallFile (LPCTSTR lpszFileName, const LPWSABUF pHead = nullptr, const LPWSABUF pTail = nullptr);
@@ -109,7 +109,8 @@ class CTcpClient : public ITcpClient
BOOL CheckStarting();
BOOL CheckStoping();
BOOL CreateClientSocket();
- BOOL ConnectToServer(LPCTSTR pszRemoteAddress, USHORT usPort);
+ BOOL BindClientSocket(LPCTSTR lpszBindAddress);
+ BOOL ConnectToServer(LPCTSTR lpszRemoteAddress, USHORT usPort);
BOOL CreateWorkerThread();
BOOL ProcessNetworkEvent();
BOOL ReadData();
diff --git a/HP-Socket/Src/TcpPackAgent.cpp b/HP-Socket/Src/TcpPackAgent.cpp
index 91fd07eff..a7404a7b9 100644
--- a/HP-Socket/Src/TcpPackAgent.cpp
+++ b/HP-Socket/Src/TcpPackAgent.cpp
@@ -1,7 +1,7 @@
/*
* Copyright: JessMA Open Source (ldcsaa@gmail.com)
*
- * Version : 3.5.1
+ * Version : 3.5.2
* Author : Bruce Liang
* Website : http://www.jessma.org
* Project : https://github.com/ldcsaa
diff --git a/HP-Socket/Src/TcpPackAgent.h b/HP-Socket/Src/TcpPackAgent.h
index ba95fa180..4e6125598 100644
--- a/HP-Socket/Src/TcpPackAgent.h
+++ b/HP-Socket/Src/TcpPackAgent.h
@@ -1,7 +1,7 @@
/*
* Copyright: JessMA Open Source (ldcsaa@gmail.com)
*
- * Version : 3.5.1
+ * Version : 3.5.2
* Author : Bruce Liang
* Website : http://www.jessma.org
* Project : https://github.com/ldcsaa
diff --git a/HP-Socket/Src/TcpPackClient.cpp b/HP-Socket/Src/TcpPackClient.cpp
index f0f50eb20..0a0f06f13 100644
--- a/HP-Socket/Src/TcpPackClient.cpp
+++ b/HP-Socket/Src/TcpPackClient.cpp
@@ -1,7 +1,7 @@
/*
* Copyright: JessMA Open Source (ldcsaa@gmail.com)
*
- * Version : 3.5.1
+ * Version : 3.5.2
* Author : Bruce Liang
* Website : http://www.jessma.org
* Project : https://github.com/ldcsaa
diff --git a/HP-Socket/Src/TcpPackClient.h b/HP-Socket/Src/TcpPackClient.h
index e5b6d28aa..cc7895734 100644
--- a/HP-Socket/Src/TcpPackClient.h
+++ b/HP-Socket/Src/TcpPackClient.h
@@ -1,7 +1,7 @@
/*
* Copyright: JessMA Open Source (ldcsaa@gmail.com)
*
- * Version : 3.5.1
+ * Version : 3.5.2
* Author : Bruce Liang
* Website : http://www.jessma.org
* Project : https://github.com/ldcsaa
diff --git a/HP-Socket/Src/TcpPackServer.cpp b/HP-Socket/Src/TcpPackServer.cpp
index 06479b2fe..755b7e61f 100644
--- a/HP-Socket/Src/TcpPackServer.cpp
+++ b/HP-Socket/Src/TcpPackServer.cpp
@@ -1,7 +1,7 @@
/*
* Copyright: JessMA Open Source (ldcsaa@gmail.com)
*
- * Version : 3.5.1
+ * Version : 3.5.2
* Author : Bruce Liang
* Website : http://www.jessma.org
* Project : https://github.com/ldcsaa
diff --git a/HP-Socket/Src/TcpPackServer.h b/HP-Socket/Src/TcpPackServer.h
index 32614a729..b7068b8a2 100644
--- a/HP-Socket/Src/TcpPackServer.h
+++ b/HP-Socket/Src/TcpPackServer.h
@@ -1,7 +1,7 @@
/*
* Copyright: JessMA Open Source (ldcsaa@gmail.com)
*
- * Version : 3.5.1
+ * Version : 3.5.2
* Author : Bruce Liang
* Website : http://www.jessma.org
* Project : https://github.com/ldcsaa
diff --git a/HP-Socket/Src/TcpPullAgent.cpp b/HP-Socket/Src/TcpPullAgent.cpp
index 9db21d02e..b0769e528 100644
--- a/HP-Socket/Src/TcpPullAgent.cpp
+++ b/HP-Socket/Src/TcpPullAgent.cpp
@@ -1,7 +1,7 @@
/*
* Copyright: JessMA Open Source (ldcsaa@gmail.com)
*
- * Version : 3.5.1
+ * Version : 3.5.2
* Author : Bruce Liang
* Website : http://www.jessma.org
* Project : https://github.com/ldcsaa
diff --git a/HP-Socket/Src/TcpPullAgent.h b/HP-Socket/Src/TcpPullAgent.h
index 2cb12396d..4c92f1d2f 100644
--- a/HP-Socket/Src/TcpPullAgent.h
+++ b/HP-Socket/Src/TcpPullAgent.h
@@ -1,7 +1,7 @@
/*
* Copyright: JessMA Open Source (ldcsaa@gmail.com)
*
- * Version : 3.5.1
+ * Version : 3.5.2
* Author : Bruce Liang
* Website : http://www.jessma.org
* Project : https://github.com/ldcsaa
diff --git a/HP-Socket/Src/TcpPullClient.cpp b/HP-Socket/Src/TcpPullClient.cpp
index d1adcf9d3..61349686c 100644
--- a/HP-Socket/Src/TcpPullClient.cpp
+++ b/HP-Socket/Src/TcpPullClient.cpp
@@ -1,7 +1,7 @@
/*
* Copyright: JessMA Open Source (ldcsaa@gmail.com)
*
- * Version : 3.5.1
+ * Version : 3.5.2
* Author : Bruce Liang
* Website : http://www.jessma.org
* Project : https://github.com/ldcsaa
diff --git a/HP-Socket/Src/TcpPullClient.h b/HP-Socket/Src/TcpPullClient.h
index 83c31d4a3..2f3970d86 100644
--- a/HP-Socket/Src/TcpPullClient.h
+++ b/HP-Socket/Src/TcpPullClient.h
@@ -1,7 +1,7 @@
/*
* Copyright: JessMA Open Source (ldcsaa@gmail.com)
*
- * Version : 3.5.1
+ * Version : 3.5.2
* Author : Bruce Liang
* Website : http://www.jessma.org
* Project : https://github.com/ldcsaa
diff --git a/HP-Socket/Src/TcpPullServer.cpp b/HP-Socket/Src/TcpPullServer.cpp
index fe69db8cf..259089495 100644
--- a/HP-Socket/Src/TcpPullServer.cpp
+++ b/HP-Socket/Src/TcpPullServer.cpp
@@ -1,7 +1,7 @@
/*
* Copyright: JessMA Open Source (ldcsaa@gmail.com)
*
- * Version : 3.5.1
+ * Version : 3.5.2
* Author : Bruce Liang
* Website : http://www.jessma.org
* Project : https://github.com/ldcsaa
diff --git a/HP-Socket/Src/TcpPullServer.h b/HP-Socket/Src/TcpPullServer.h
index 45b2cafd4..2b85957d2 100644
--- a/HP-Socket/Src/TcpPullServer.h
+++ b/HP-Socket/Src/TcpPullServer.h
@@ -1,7 +1,7 @@
/*
* Copyright: JessMA Open Source (ldcsaa@gmail.com)
*
- * Version : 3.5.1
+ * Version : 3.5.2
* Author : Bruce Liang
* Website : http://www.jessma.org
* Project : https://github.com/ldcsaa
diff --git a/HP-Socket/Src/TcpServer.cpp b/HP-Socket/Src/TcpServer.cpp
index f355d4d69..1199de586 100644
--- a/HP-Socket/Src/TcpServer.cpp
+++ b/HP-Socket/Src/TcpServer.cpp
@@ -1,7 +1,7 @@
/*
* Copyright: JessMA Open Source (ldcsaa@gmail.com)
*
- * Version : 3.5.1
+ * Version : 3.5.2
* Author : Bruce Liang
* Website : http://www.jessma.org
* Project : https://github.com/ldcsaa
@@ -81,14 +81,14 @@ void CTcpServer::SetLastError(EnSocketError code, LPCSTR func, int ec)
TRACE("%s --> Error: %d, EC: %d\n", func, code, ec);
}
-BOOL CTcpServer::Start(LPCTSTR pszBindAddress, USHORT usPort)
+BOOL CTcpServer::Start(LPCTSTR lpszBindAddress, USHORT usPort)
{
if(!CheckParams() || !CheckStarting())
return FALSE;
PrepareStart();
- if(CreateListenSocket(pszBindAddress, usPort))
+ if(CreateListenSocket(lpszBindAddress, usPort))
if(CreateCompletePort())
if(CreateWorkerThreads())
if(StartAccept())
@@ -163,7 +163,7 @@ BOOL CTcpServer::CheckStoping()
return TRUE;
}
-BOOL CTcpServer::CreateListenSocket(LPCTSTR pszBindAddress, USHORT usPort)
+BOOL CTcpServer::CreateListenSocket(LPCTSTR lpszBindAddress, USHORT usPort)
{
BOOL isOK = FALSE;
@@ -171,7 +171,7 @@ BOOL CTcpServer::CreateListenSocket(LPCTSTR pszBindAddress, USHORT usPort)
if(m_soListen != INVALID_SOCKET)
{
SOCKADDR_IN addr;
- ::sockaddr_A_2_IN(AF_INET, pszBindAddress, usPort, addr);
+ ::sockaddr_A_2_IN(AF_INET, lpszBindAddress, usPort, addr);
BOOL bOnOff = (m_dwKeepAliveTime > 0 && m_dwKeepAliveInterval > 0);
::SSO_KeepAliveVals(m_soListen, bOnOff, m_dwKeepAliveTime, m_dwKeepAliveInterval);
@@ -512,6 +512,18 @@ BOOL CTcpServer::GetListenAddress(TCHAR lpszAddress[], int& iAddressLen, USHORT&
return ::GetSocketLocalAddress(m_soListen, lpszAddress, iAddressLen, usPort);
}
+BOOL CTcpServer::GetLocalAddress(CONNID dwConnID, TCHAR lpszAddress[], int& iAddressLen, USHORT& usPort)
+{
+ ASSERT(lpszAddress != nullptr && iAddressLen > 0);
+
+ TSocketObj* pSocketObj = FindSocketObj(dwConnID);
+
+ if(TSocketObj::IsValid(pSocketObj))
+ return ::GetSocketLocalAddress(pSocketObj->socket, lpszAddress, iAddressLen, usPort);
+
+ return FALSE;
+}
+
BOOL CTcpServer::GetRemoteAddress(CONNID dwConnID, TCHAR lpszAddress[], int& iAddressLen, USHORT& usPort)
{
ASSERT(lpszAddress != nullptr && iAddressLen > 0);
diff --git a/HP-Socket/Src/TcpServer.h b/HP-Socket/Src/TcpServer.h
index 7f0b248e2..1ad8df593 100644
--- a/HP-Socket/Src/TcpServer.h
+++ b/HP-Socket/Src/TcpServer.h
@@ -1,7 +1,7 @@
/*
* Copyright: JessMA Open Source (ldcsaa@gmail.com)
*
- * Version : 3.5.1
+ * Version : 3.5.2
* Author : Bruce Liang
* Website : http://www.jessma.org
* Project : https://github.com/ldcsaa
@@ -71,7 +71,7 @@ class CTcpServer : public ITcpServer
}
public:
- virtual BOOL Start (LPCTSTR pszBindAddress, USHORT usPort);
+ virtual BOOL Start (LPCTSTR lpszBindAddress, USHORT usPort);
virtual BOOL Stop ();
virtual BOOL Send (CONNID dwConnID, const BYTE* pBuffer, int iLength, int iOffset = 0);
virtual BOOL SendSmallFile (CONNID dwConnID, LPCTSTR lpszFileName, const LPWSABUF pHead = nullptr, const LPWSABUF pTail = nullptr);
@@ -82,6 +82,7 @@ class CTcpServer : public ITcpServer
virtual BOOL DisconnectLongConnections (DWORD dwPeriod, BOOL bForce = TRUE);
virtual BOOL DisconnectSilenceConnections(DWORD dwPeriod, BOOL bForce = TRUE);
virtual BOOL GetListenAddress (TCHAR lpszAddress[], int& iAddressLen, USHORT& usPort);
+ virtual BOOL GetLocalAddress (CONNID dwConnID, TCHAR lpszAddress[], int& iAddressLen, USHORT& usPort);
virtual BOOL GetRemoteAddress (CONNID dwConnID, TCHAR lpszAddress[], int& iAddressLen, USHORT& usPort);
virtual BOOL GetPendingDataLength (CONNID dwConnID, int& iPending);
@@ -191,7 +192,7 @@ class CTcpServer : public ITcpServer
private:
BOOL CheckStarting();
BOOL CheckStoping();
- BOOL CreateListenSocket(LPCTSTR pszBindAddress, USHORT usPort);
+ BOOL CreateListenSocket(LPCTSTR lpszBindAddress, USHORT usPort);
BOOL CreateCompletePort();
BOOL CreateWorkerThreads();
BOOL StartAccept();
diff --git a/HP-Socket/Src/UdpCast.cpp b/HP-Socket/Src/UdpCast.cpp
index 08ade62f3..4f0c24ddb 100644
--- a/HP-Socket/Src/UdpCast.cpp
+++ b/HP-Socket/Src/UdpCast.cpp
@@ -1,7 +1,7 @@
/*
* Copyright: JessMA Open Source (ldcsaa@gmail.com)
*
- * Version : 3.5.1
+ * Version : 3.5.2
* Author : Bruce Liang
* Website : http://www.jessma.org
* Project : https://github.com/ldcsaa
@@ -28,33 +28,39 @@
#include
-BOOL CUdpCast::Start(LPCTSTR pszRemoteAddress, USHORT usPort, BOOL bAsyncConnect)
+BOOL CUdpCast::Start(LPCTSTR lpszRemoteAddress, USHORT usPort, BOOL bAsyncConnect, LPCTSTR lpszBindAddress)
{
if(!CheckParams() || !CheckStarting())
return FALSE;
PrepareStart();
- BOOL isOK = FALSE;
+ BOOL isOK = FALSE;
+ in_addr sinAddr = {0};
if(CreateClientSocket())
{
- if(FirePrepareConnect(this, m_soClient) != HR_ERROR)
+ if(BindClientSocket(lpszBindAddress, usPort, sinAddr))
{
- if(ConnectToGroup(pszRemoteAddress, usPort))
+ if(FirePrepareConnect(this, m_soClient) != HR_ERROR)
{
- if(CreateWorkerThread())
+ if(ConnectToGroup(lpszRemoteAddress, usPort, sinAddr))
{
- isOK = TRUE;
+ if(CreateWorkerThread())
+ {
+ isOK = TRUE;
+ }
+ else
+ SetLastError(SE_WORKER_THREAD_CREATE, __FUNCTION__, ERROR_CREATE_FAILED);
}
else
- SetLastError(SE_WORKER_THREAD_CREATE, __FUNCTION__, ERROR_CREATE_FAILED);
+ SetLastError(SE_CONNECT_SERVER, __FUNCTION__, ::WSAGetLastError());
}
else
- SetLastError(SE_CONNECT_SERVER, __FUNCTION__, ::WSAGetLastError());
- }
+ SetLastError(SE_SOCKET_PREPARE, __FUNCTION__, ERROR_CANCELLED);
+ }
else
- SetLastError(SE_SOCKET_PREPARE, __FUNCTION__, ERROR_CANCELLED);
+ SetLastError(SE_SOCKET_BIND, __FUNCTION__, ::WSAGetLastError());
}
else
SetLastError(SE_SOCKET_CREATE, __FUNCTION__, ::WSAGetLastError());
@@ -72,8 +78,7 @@ BOOL CUdpCast::CheckParams()
if(m_enCastMode >= CM_MULTICAST && m_enCastMode <= CM_BROADCAST)
if(m_iMCTtl >= 0 && m_iMCTtl <= 255)
if(m_bMCLoop >= 0 && m_bMCLoop <= 1)
- if(::IsIPAddress(m_strBindAddress))
- return TRUE;
+ return TRUE;
SetLastError(SE_INVALID_PARAM, __FUNCTION__, ERROR_INVALID_PARAMETER);
return FALSE;
@@ -131,22 +136,41 @@ BOOL CUdpCast::CreateClientSocket()
m_evSocket = ::WSACreateEvent();
ASSERT(m_evSocket != WSA_INVALID_EVENT);
- m_dwConnID = ::GenerateConnectionID();
-
return TRUE;
}
return FALSE;
}
-BOOL CUdpCast::ConnectToGroup(LPCTSTR pszRemoteAddress, USHORT usPort)
+BOOL CUdpCast::BindClientSocket(LPCTSTR lpszBindAddress, USHORT usPort, in_addr& sinAddr)
+{
+ if(!lpszBindAddress)
+ lpszBindAddress = DEFAULT_BIND_ADDRESS;
+
+ SOCKADDR_IN bindAddr;
+ if(!::sockaddr_A_2_IN(AF_INET, lpszBindAddress, usPort, bindAddr))
+ {
+ ::WSASetLastError(WSAEADDRNOTAVAIL);
+ return FALSE;
+ }
+
+ if(::bind(m_soClient, (struct sockaddr*)&bindAddr, sizeof(SOCKADDR_IN)) == SOCKET_ERROR)
+ return FALSE;
+
+ sinAddr = bindAddr.sin_addr;
+ m_dwConnID = ::GenerateConnectionID();
+
+ return TRUE;
+}
+
+BOOL CUdpCast::ConnectToGroup(LPCTSTR lpszRemoteAddress, USHORT usPort, in_addr sinAddr)
{
if(m_enCastMode == CM_MULTICAST)
{
TCHAR szAddress[40];
int iAddressLen = sizeof(szAddress) / sizeof(TCHAR);
- if(!::GetIPAddress(pszRemoteAddress, szAddress, iAddressLen))
+ if(!::GetIPAddress(lpszRemoteAddress, szAddress, iAddressLen))
{
::WSASetLastError(WSAEADDRNOTAVAIL);
return FALSE;
@@ -171,28 +195,16 @@ BOOL CUdpCast::ConnectToGroup(LPCTSTR pszRemoteAddress, USHORT usPort)
VERIFY(::SSO_SetSocketOption(m_soClient, SOL_SOCKET, SO_BROADCAST, &bSet, sizeof(BOOL)) != SOCKET_ERROR);
}
- SOCKADDR_IN bindAddr;
- if(!::sockaddr_A_2_IN(AF_INET, m_strBindAddress, usPort, bindAddr))
- {
- ::WSASetLastError(WSAEADDRNOTAVAIL);
- return FALSE;
- }
-
- if(::bind(m_soClient, (struct sockaddr*)&bindAddr, sizeof(SOCKADDR_IN)) == SOCKET_ERROR)
- return FALSE;
- else
+ if(m_enCastMode == CM_MULTICAST)
{
- if(m_enCastMode == CM_MULTICAST)
- {
- ip_mreq mcast;
- ::ZeroMemory(&mcast, sizeof(ip_mreq));
+ ip_mreq mcast;
+ ::ZeroMemory(&mcast, sizeof(ip_mreq));
- mcast.imr_multiaddr = m_castAddr.sin_addr;
- mcast.imr_interface = bindAddr.sin_addr;
+ mcast.imr_multiaddr = m_castAddr.sin_addr;
+ mcast.imr_interface = sinAddr;
- if(::SSO_SetSocketOption(m_soClient, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mcast, sizeof(ip_mreq)) == SOCKET_ERROR)
- return FALSE;
- }
+ if(::SSO_SetSocketOption(m_soClient, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mcast, sizeof(ip_mreq)) == SOCKET_ERROR)
+ return FALSE;
}
BOOL isOK = FALSE;
diff --git a/HP-Socket/Src/UdpCast.h b/HP-Socket/Src/UdpCast.h
index 7e11f721a..d33e72c09 100644
--- a/HP-Socket/Src/UdpCast.h
+++ b/HP-Socket/Src/UdpCast.h
@@ -1,7 +1,7 @@
/*
* Copyright: JessMA Open Source (ldcsaa@gmail.com)
*
- * Version : 3.5.1
+ * Version : 3.5.2
* Author : Bruce Liang
* Website : http://www.jessma.org
* Project : https://github.com/ldcsaa
@@ -33,7 +33,7 @@
class CUdpCast : public IUdpCast
{
public:
- virtual BOOL Start (LPCTSTR pszRemoteAddress, USHORT usPort, BOOL bAsyncConnect = FALSE);
+ virtual BOOL Start (LPCTSTR lpszRemoteAddress, USHORT usPort, BOOL bAsyncConnect = TRUE, LPCTSTR lpszBindAddress = nullptr);
virtual BOOL Stop ();
virtual BOOL Send (const BYTE* pBuffer, int iLength, int iOffset = 0);
virtual BOOL SendPackets (const WSABUF pBuffers[], int iCount);
@@ -50,7 +50,6 @@ class CUdpCast : public IUdpCast
virtual void SetFreeBufferPoolSize (DWORD dwFreeBufferPoolSize) {m_dwFreeBufferPoolSize = dwFreeBufferPoolSize;}
virtual void SetFreeBufferPoolHold (DWORD dwFreeBufferPoolHold) {m_dwFreeBufferPoolHold = dwFreeBufferPoolHold;}
virtual void SetReuseAddress (BOOL bReuseAddress) {m_bReuseAddress = bReuseAddress;}
- virtual void SetBindAdddress (LPCTSTR pszBindAddress) {m_strBindAddress = pszBindAddress;}
virtual void SetCastMode (EnCastMode enCastMode) {m_enCastMode = enCastMode;}
virtual void SetMultiCastTtl (int iMCTtl) {m_iMCTtl = iMCTtl;}
virtual void SetMultiCastLoop (BOOL bMCLoop) {m_bMCLoop = bMCLoop;}
@@ -60,7 +59,6 @@ class CUdpCast : public IUdpCast
virtual DWORD GetFreeBufferPoolSize () {return m_dwFreeBufferPoolSize;}
virtual DWORD GetFreeBufferPoolHold () {return m_dwFreeBufferPoolHold;}
virtual BOOL IsReuseAddress () {return m_bReuseAddress;}
- virtual LPCTSTR GetBindAdddress () {return (LPCTSTR)m_strBindAddress;}
virtual EnCastMode GetCastMode () {return m_enCastMode;}
virtual int GetMultiCastTtl () {return m_iMCTtl;}
virtual BOOL IsMultiCastLoop () {return m_bMCLoop;}
@@ -101,7 +99,8 @@ class CUdpCast : public IUdpCast
BOOL CheckStarting();
BOOL CheckStoping();
BOOL CreateClientSocket();
- BOOL ConnectToGroup(LPCTSTR pszRemoteAddress, USHORT usPort);
+ BOOL BindClientSocket(LPCTSTR lpszBindAddress, USHORT usPort, in_addr& sinAddr);
+ BOOL ConnectToGroup(LPCTSTR lpszRemoteAddress, USHORT usPort, in_addr sinAddr);
BOOL CreateWorkerThread();
BOOL CreateDetectorThread();
BOOL ProcessNetworkEvent();
@@ -140,7 +139,6 @@ class CUdpCast : public IUdpCast
, m_iMCTtl (1)
, m_bMCLoop (FALSE)
, m_enCastMode (CM_MULTICAST)
- , m_strBindAddress (DEFAULT_BIND_ADDRESS)
{
ASSERT(m_psoListener);
Reset(FALSE);
@@ -166,7 +164,6 @@ class CUdpCast : public IUdpCast
int m_iMCTtl;
BOOL m_bMCLoop;
EnCastMode m_enCastMode;
- CString m_strBindAddress;
HANDLE m_hWorker;
UINT m_dwWorkerID;
diff --git a/HP-Socket/Src/UdpClient.cpp b/HP-Socket/Src/UdpClient.cpp
index 17acbcff1..1b0f6f49a 100644
--- a/HP-Socket/Src/UdpClient.cpp
+++ b/HP-Socket/Src/UdpClient.cpp
@@ -1,7 +1,7 @@
/*
* Copyright: JessMA Open Source (ldcsaa@gmail.com)
*
- * Version : 3.5.1
+ * Version : 3.5.2
* Author : Bruce Liang
* Website : http://www.jessma.org
* Project : https://github.com/ldcsaa
@@ -28,7 +28,7 @@
#include
-BOOL CUdpClient::Start(LPCTSTR pszRemoteAddress, USHORT usPort, BOOL bAsyncConnect)
+BOOL CUdpClient::Start(LPCTSTR lpszRemoteAddress, USHORT usPort, BOOL bAsyncConnect, LPCTSTR lpszBindAddress)
{
if(!CheckParams() || !CheckStarting())
return FALSE;
@@ -40,25 +40,30 @@ BOOL CUdpClient::Start(LPCTSTR pszRemoteAddress, USHORT usPort, BOOL bAsyncConne
if(CreateClientSocket())
{
- if(FirePrepareConnect(this, m_soClient) != HR_ERROR)
+ if(BindClientSocket(lpszBindAddress))
{
- if(ConnectToServer(pszRemoteAddress, usPort))
+ if(FirePrepareConnect(this, m_soClient) != HR_ERROR)
{
- if(CreateWorkerThread())
+ if(ConnectToServer(lpszRemoteAddress, usPort))
{
- if(CreateDetectorThread())
- isOK = TRUE;
+ if(CreateWorkerThread())
+ {
+ if(CreateDetectorThread())
+ isOK = TRUE;
+ else
+ SetLastError(SE_DETECT_THREAD_CREATE, __FUNCTION__, ERROR_CREATE_FAILED);
+ }
else
- SetLastError(SE_DETECT_THREAD_CREATE, __FUNCTION__, ERROR_CREATE_FAILED);
+ SetLastError(SE_WORKER_THREAD_CREATE, __FUNCTION__, ERROR_CREATE_FAILED);
}
else
- SetLastError(SE_WORKER_THREAD_CREATE, __FUNCTION__, ERROR_CREATE_FAILED);
+ SetLastError(SE_CONNECT_SERVER, __FUNCTION__, ::WSAGetLastError());
}
else
- SetLastError(SE_CONNECT_SERVER, __FUNCTION__, ::WSAGetLastError());
+ SetLastError(SE_SOCKET_PREPARE, __FUNCTION__, ERROR_CANCELLED);
}
else
- SetLastError(SE_SOCKET_PREPARE, __FUNCTION__, ERROR_CANCELLED);
+ SetLastError(SE_SOCKET_BIND, __FUNCTION__, ::WSAGetLastError());
}
else
SetLastError(SE_SOCKET_CREATE, __FUNCTION__, ::WSAGetLastError());
@@ -131,20 +136,38 @@ BOOL CUdpClient::CreateClientSocket()
m_evSocket = ::WSACreateEvent();
ASSERT(m_evSocket != WSA_INVALID_EVENT);
- m_dwConnID = ::GenerateConnectionID();
-
return TRUE;
}
return FALSE;
}
-BOOL CUdpClient::ConnectToServer(LPCTSTR pszRemoteAddress, USHORT usPort)
+BOOL CUdpClient::BindClientSocket(LPCTSTR lpszBindAddress)
+{
+ if(lpszBindAddress)
+ {
+ SOCKADDR_IN bindAddr;
+ if(!::sockaddr_A_2_IN(AF_INET, lpszBindAddress, 0, bindAddr))
+ {
+ ::WSASetLastError(WSAEADDRNOTAVAIL);
+ return FALSE;
+ }
+
+ if(::bind(m_soClient, (struct sockaddr*)&bindAddr, sizeof(SOCKADDR_IN)) == SOCKET_ERROR)
+ return FALSE;
+ }
+
+ m_dwConnID = ::GenerateConnectionID();
+
+ return TRUE;
+}
+
+BOOL CUdpClient::ConnectToServer(LPCTSTR lpszRemoteAddress, USHORT usPort)
{
TCHAR szAddress[40];
int iAddressLen = sizeof(szAddress) / sizeof(TCHAR);
- if(!::GetIPAddress(pszRemoteAddress, szAddress, iAddressLen))
+ if(!::GetIPAddress(lpszRemoteAddress, szAddress, iAddressLen))
return FALSE;
SOCKADDR_IN addr;
diff --git a/HP-Socket/Src/UdpClient.h b/HP-Socket/Src/UdpClient.h
index 2bcfcf10a..9971c0aa1 100644
--- a/HP-Socket/Src/UdpClient.h
+++ b/HP-Socket/Src/UdpClient.h
@@ -1,7 +1,7 @@
/*
* Copyright: JessMA Open Source (ldcsaa@gmail.com)
*
- * Version : 3.5.1
+ * Version : 3.5.2
* Author : Bruce Liang
* Website : http://www.jessma.org
* Project : https://github.com/ldcsaa
@@ -33,7 +33,7 @@
class CUdpClient : public IUdpClient
{
public:
- virtual BOOL Start (LPCTSTR pszRemoteAddress, USHORT usPort, BOOL bAsyncConnect = FALSE);
+ virtual BOOL Start (LPCTSTR lpszRemoteAddress, USHORT usPort, BOOL bAsyncConnect = TRUE, LPCTSTR lpszBindAddress = nullptr);
virtual BOOL Stop ();
virtual BOOL Send (const BYTE* pBuffer, int iLength, int iOffset = 0);
virtual BOOL SendPackets (const WSABUF pBuffers[], int iCount);
@@ -90,7 +90,8 @@ class CUdpClient : public IUdpClient
BOOL CheckStarting();
BOOL CheckStoping();
BOOL CreateClientSocket();
- BOOL ConnectToServer(LPCTSTR pszRemoteAddress, USHORT usPort);
+ BOOL BindClientSocket(LPCTSTR lpszBindAddress);
+ BOOL ConnectToServer(LPCTSTR lpszRemoteAddress, USHORT usPort);
BOOL CreateWorkerThread();
BOOL CreateDetectorThread();
BOOL ProcessNetworkEvent();
diff --git a/HP-Socket/Src/UdpServer.cpp b/HP-Socket/Src/UdpServer.cpp
index 685c1a6e1..5585ea0cc 100644
--- a/HP-Socket/Src/UdpServer.cpp
+++ b/HP-Socket/Src/UdpServer.cpp
@@ -1,7 +1,7 @@
/*
* Copyright: JessMA Open Source (ldcsaa@gmail.com)
*
- * Version : 3.5.1
+ * Version : 3.5.2
* Author : Bruce Liang
* Website : http://www.jessma.org
* Project : https://github.com/ldcsaa
@@ -411,7 +411,7 @@ BOOL CUdpServer::InvalidSocketObj(TUdpSocketObj* pSocketObj)
return bDone;
}
-void CUdpServer::AddClienTUdpSocketObj(CONNID dwConnID, TUdpSocketObj* pSocketObj)
+void CUdpServer::AddClientUdpSocketObj(CONNID dwConnID, TUdpSocketObj* pSocketObj)
{
ASSERT(FindSocketObj(dwConnID) == nullptr);
@@ -523,6 +523,18 @@ BOOL CUdpServer::GetListenAddress(TCHAR lpszAddress[], int& iAddressLen, USHORT&
return ::GetSocketLocalAddress(m_soListen, lpszAddress, iAddressLen, usPort);
}
+BOOL CUdpServer::GetLocalAddress(CONNID dwConnID, TCHAR lpszAddress[], int& iAddressLen, USHORT& usPort)
+{
+ ASSERT(lpszAddress != nullptr && iAddressLen > 0);
+
+ TUdpSocketObj* pSocketObj = FindSocketObj(dwConnID);
+
+ if(TUdpSocketObj::IsValid(pSocketObj))
+ return ::GetSocketLocalAddress(m_soListen, lpszAddress, iAddressLen, usPort);
+
+ return FALSE;
+}
+
BOOL CUdpServer::GetRemoteAddress(CONNID dwConnID, TCHAR lpszAddress[], int& iAddressLen, USHORT& usPort)
{
ASSERT(lpszAddress != nullptr && iAddressLen > 0);
@@ -1041,7 +1053,7 @@ CONNID CUdpServer::HandleAccept(TUdpBufferObj* pBufferObj)
pSocketObj = GetFreeSocketObj(dwConnID);
memcpy(&pSocketObj->remoteAddr, &pBufferObj->remoteAddr, sizeof(SOCKADDR_IN));
- AddClienTUdpSocketObj(dwConnID, pSocketObj);
+ AddClientUdpSocketObj(dwConnID, pSocketObj);
}
}
diff --git a/HP-Socket/Src/UdpServer.h b/HP-Socket/Src/UdpServer.h
index 6dfb000cf..680d6c8f0 100644
--- a/HP-Socket/Src/UdpServer.h
+++ b/HP-Socket/Src/UdpServer.h
@@ -1,7 +1,7 @@
/*
* Copyright: JessMA Open Source (ldcsaa@gmail.com)
*
- * Version : 3.5.1
+ * Version : 3.5.2
* Author : Bruce Liang
* Website : http://www.jessma.org
* Project : https://github.com/ldcsaa
@@ -78,6 +78,7 @@ class CUdpServer : public IUdpServer
virtual BOOL DisconnectLongConnections (DWORD dwPeriod, BOOL bForce = TRUE);
virtual BOOL DisconnectSilenceConnections(DWORD dwPeriod, BOOL bForce = TRUE);
virtual BOOL GetListenAddress (TCHAR lpszAddress[], int& iAddressLen, USHORT& usPort);
+ virtual BOOL GetLocalAddress (CONNID dwConnID, TCHAR lpszAddress[], int& iAddressLen, USHORT& usPort);
virtual BOOL GetRemoteAddress (CONNID dwConnID, TCHAR lpszAddress[], int& iAddressLen, USHORT& usPort);
virtual BOOL GetPendingDataLength (CONNID dwConnID, int& iPending);
@@ -193,7 +194,7 @@ class CUdpServer : public IUdpServer
BOOL InvalidSocketObj(TUdpSocketObj* pSocketObj);
void ReleaseGCSocketObj(BOOL bForce = FALSE);
- void AddClienTUdpSocketObj(CONNID dwConnID, TUdpSocketObj* pSocketObj);
+ void AddClientUdpSocketObj(CONNID dwConnID, TUdpSocketObj* pSocketObj);
void CloseClientUdpSocketObj(TUdpSocketObj* pSocketObj, EnSocketCloseFlag enFlag = SCF_NONE, EnSocketOperation enOperation = SO_UNKNOWN, int iErrorCode = 0);
TUdpSocketObj* FindSocketObj(CONNID dwConnID);
diff --git a/Readme.txt b/Readme.txt
index 4eb880589..6c3114ecd 100644
--- a/Readme.txt
+++ b/Readme.txt
@@ -1,3 +1,3 @@
*** 编译 HP-Socket 源代码 ***
----------------------------------------
- HP-Socket v3.5.1 的源代码依赖 vc-common-src v2.3.13 中的基础公共代码。因此,编译 HP-Socket v3.5.1 时需要同时加入 vc-common-src v2.3.13
\ No newline at end of file
+ HP-Socket v3.5.2 的源代码依赖 vc-common-src v2.3.13 中的基础公共代码。因此,编译 HP-Socket v3.5.2 时需要同时加入 vc-common-src v2.3.13
\ No newline at end of file