我正在使用UdpClient来查询游戏服务器有关服务器名称,地图,玩家数量等的信息.
我已按照此页面上的指南(A2S_INFO) http://developer.valvesoftware.com/wiki/Server_queries#Source_servers
我收到了正确答复:
替代文字http://data.fuskbugg.se/skalman01/reply.JPG
我不知道如何获取每一块信息(服务器名称,地图等).
有帮助吗?我假设我必须查看我链接的wiki中指定的回复格式,但我不知道该怎么做.
我有一个案例,我需要使用wsHttp使用WCF 传输大量的序列化对象图(通过NetDataContractSerializer).我正在使用邮件安全性,并希望继续这样做.使用这个设置我想传输序列化的对象图,有时可以接近300MB左右但是当我尝试这样做时,我开始看到System.InsufficientMemoryException类型的异常出现.
经过一些研究后,默认情况下,WCF中默认情况下,服务调用的结果默认包含在单个消息中,其中包含序列化数据,并且默认情况下在服务器上缓冲此数据,直到完整写入整个消息.因此,内存异常是由于服务器的内存资源不足而导致分配的,因为该缓冲区已满.我遇到的两个主要建议是使用流式传输或分块来解决这个问题,但是我不清楚这涉及到什么,以及我的当前设置是否可以使用任何解决方案(wsHttp/NetDataContractSerializer/Message Security).到目前为止,我理解使用流式消息安全性不起作用,因为消息加密和解密需要处理整个数据集而不是部分消息.然而,Chunking听起来似乎有可能,但是我不清楚如何使用我列出的其他约束来完成它.如果有人可以就可用的解决方案以及如何实施它提供一些指导,我将非常感激.
我应该补充一点,在我的情况下,我真的不担心与其他客户端的互操作性,因为我们拥有并控制通信的每一面,并使用共享接口模式传输到任何一方的数据.所以我愿意接受任何符合使用带有消息安全性的wsHttp以转移使用NetDataContractSerializer序列化的对象图的约束的想法,我更喜欢一个解决方案,我不需要大幅改变我现有的服务和周围的基础设施.
相关资源:
我也对可以对这些数据进行的任何类型的压缩感兴趣,但看起来我可能最好在传输级别执行此操作,一旦我可以转换到.NET 4.0,以便客户端将自动支持gzip标题如果我理解正确的话.
关于如何在结论中得出缓冲消息太大导致我的问题的一些历史.最初我在测试时看到了下面的CommunicationException.
底层连接已关闭:连接意外关闭.
最后,在运行此操作并进行更多日志记录后,我发现了导致指定消息出现问题的基础InsufficientMemoryException异常.
无法分配268435456字节的托管内存缓冲区.可用内存量可能很低.
其中源于以下方法.
System.ServiceModel.Diagnostics.Utility.AllocateByteArray(Int32 size)
所以在其他方面,失败来自分配阵列.当写入序列化到磁盘的相同数据时,它需要大约146MB,如果我将其减少一半,那么我就会停止获取错误但是我没有更多地挖掘破坏我的缓冲区的特定阈值以及它是否特定于我的系统或不.
我想在这一点上我正在为以下内容寻找一些澄清.我的理解是,默认情况下WCF wsHttp具有消息安全性,在响应被发送回客户端之前需要在服务器上缓冲整个消息(通常是我正在返回的整个数据集),从而导致我的问题.
可能的解决方案:
限制我可以返回的数据只能达到某一点,并且与Streaming选项一样,这些选项需要在WCF服务调用之外编写许多较低级别的工作.所以我想我需要知道的是,通过允许将一组数据分解为服务器上的单独消息然后在客户端上拼凑在一起,是否任何可能的分块通道实现都可以解决大型消息问题.这样一种方式,我不必改变现有服务合同的接口/形状,并且在仍然使用消息安全性和wsHttp的同时,几乎隐藏了每个服务实现的客户端和服务器部分的过程.如果分块通道要求我重新编写我的服务合同以暴露流,那么我不会 看看这与Streaming解决方案有什么不同.如果有人可以简单地为我回答这些问题,我会给予奖励,并将其标记为答案.
wcf large-data-volumes chunking wshttpbinding netdatacontractserializer
假设我有这个清单:
my @list = qw(one two three four five);
Run Code Online (Sandbox Code Playgroud)
我想抓住所有包含的元素o.我有这个:
my @containing_o = grep { /o/ } @list;
Run Code Online (Sandbox Code Playgroud)
但是我还需要做些什么才能获得索引,或者能够访问索引中的索引grep?
我已经安装了最新版本的Boost /usr/local(包含in /usr/local/include/boost和库/usr/local/lib/boost),我现在正尝试从源代码安装Wt,但CMake(版本2.6)似乎无法找到Boost安装.它尝试提供有关设置BOOST_DIR和Boost_LIBRARYDIR的有用建议,但我无法通过调整这些变量来使其工作.
我得到的最新错误消息是它找不到库,但它似乎表明它正在使用"/ usr/local/include"作为包含路径,这是不正确的(我可以'似乎解决了这个问题).是否有一个解决方案,他们的头顶,或者我需要在CMake内部捣乱才能弄明白?
我正在编写一个非常高性能的应用程序,每毫秒处理和处理数百个事件.
Unmanaged C++比托管c ++更快吗?为什么?
托管C++处理CLR而不是OS和CLR负责内存管理,这简化了代码,并且可能比非托管C++中"程序员"编写的代码更有效?还是有其他原因?当使用托管时,如果对程序员透明并由CLR处理,那么如何避免动态内存分配(这会导致性能损失)?
回到我的问题,托管C++在速度方面是否比非托管C++更有效?为什么?
在使用旧的INI文件多年后,我们最近开始使用XML文件.
我的同事发现了一些使用System.Xml.XmlDocument.Save的CodeProject示例代码.当两个程序试图同时写入同一个文件时,我们会遇到异常.
System.IO.IOException:进程无法访问文件'C:\ Test.xml',因为它正由另一个进程使用.
事后看来这很明显,但我们没有预料到它,因为通过Win32 API访问INI文件没有这个限制.我假设Win32调用完成了一些仲裁,它们的工作级别高于XmlDocument.Save方法.
我希望.Net库中某处有更高级别的XML例程,它们与Win32函数类似,但不知道从哪里开始查找.
或者我们可以设置文件访问权限以允许多个程序写入同一个文件?
时间很短(就像几乎所有软件项目一样),如果我们无法快速找到解决方案,我们就必须抓住我们的鼻子并回到INI文件中.
我有一个DateTime对象.我想返回一个格式如下的字符串:
2010年6月6日星期四16:00:00 +0200
到目前为止这是我的代码:
DateTime.Now.ToString("ddd, dd MMMM yyyy HH:mm:ss zzz");
Run Code Online (Sandbox Code Playgroud)
结果:
星期四,2010年6月10日18:33:14 +02:00
是否有内置的方法来获得时区差异格式化没有:?(不用手动剥离:.不知道是否有任何并发症,如果我这样做的话)
我只是有一个看起来像这样的字符串:
"7,真实,NA,假:67,假,NA,假:5,假,NA,假:5,假,NA,假"
我想要做的就是计算字符串" true "出现在该字符串中的次数.我觉得答案是这样的,String.CountAllTheTimesThisStringAppearsInThatString()但由于某种原因,我无法弄明白.救命?
我正在开发一个项目,我需要创建一个API.我使用套接字在服务器(我的应用程序)和客户端(使用我的API的其他应用程序)之间进行通信.
这个项目是c而不是C++
我来自linux背景,这是我的第一个使用Windows,Visual Studio 2008和dll库的项目.
我在客户端和服务器之间进行通信,但是我在两个项目上都有一些重复.我想创建一个库(可能是一个dll文件),两个项目都可以链接到,所以我不需要维护额外的代码.
我还必须创建具有我需要为我的客户提供的API的库.在我想要公开的API函数中,调用这些辅助函数是"重复代码",我不想将这些函数暴露给我的客户端,但我确实希望我的服务器能够使用这些函数.我怎样才能做到这一点?
我将尝试用一个例子来澄清.这就是我的开始.
服务器项目:
int Server_GetPacket(SOCKET sd);
int ReceiveAll(SOCKET sd, char *buf, int len);
int VerifyLen(char *buf);
Run Code Online (Sandbox Code Playgroud)
客户项目:
int Client_SendCommand(int command);
int Client_GetData(int command, char *buf, int len);
int ReceiveAll(SOCKET sd, char *buf, int len);
int VerifyLen(char *buf);
Run Code Online (Sandbox Code Playgroud)
这是我想要最终得到的结果:
//Server Project:
int Server_GetPacket(SOCKET sd);
// library with public and private types
// private API (not exposed to my client)
int ReceiveAll(SOCKET sd, char *buf, int len);
int VerifyLen(char *buf);
// public API (header file available …Run Code Online (Sandbox Code Playgroud)