我需要一个应用程序,它将UDP数据包发送到某个网络服务器并接收响应.服务器回复请求来自的相同端口号,因此我首先需要将我的套接字绑定到任何UDP端口号.
对UDP端口号进行硬编码是一个坏主意,因为它可能被运行在同一台PC上的任何其他应用程序使用.
有没有办法将UDP套接字绑定到任何可用的端口?IMO应该是快速获得自由端口#的有效方法,它由例如accept()函数使用.
如果不是,那么尝试绑定并检查WSAEADDRINUSE/EADDRINUSE状态的最佳策略是什么:从1025或1025 + rand()或其他一些顺序尝试端口?
这是代码:
static class AsyncFinally
{
static async Task<int> Func( int n )
{
try
{
Console.WriteLine( " Func: Begin #{0}", n );
await TaskEx.Delay( 100 );
Console.WriteLine( " Func: End #{0}", n );
return 0;
}
finally
{
Console.WriteLine( " Func: Finally #{0}", n );
}
}
static async Task Consumer()
{
for ( int i = 1; i <= 2; i++ )
{
Console.WriteLine( "Consumer: before await #{0}", i );
int u = await Func( i );
Console.WriteLine( "Consumer: …
Run Code Online (Sandbox Code Playgroud) 我是Windows开发人员,我正在使用Microsoft visual studio 2008 SP1.我的开发者机器是64位.
我目前正在处理的软件是用C#编写的.exe文件.不幸的是,我无法仅在C#中解决整个问题.这就是我在C++/CLI中开发了一个小型托管DLL的原因.两个项目都在同一个解决方案中.
我的C#.exe构建目标是"任何CPU".当我的C++ DLL构建目标是"x86"时,不加载DLL.据我所知,当我用Google搜索时,原因是C++/CLI语言与其他.NET语言不同,它编译为本机代码,而不是托管代码.
我将C++ DLL构建目标切换到x64,现在一切正常.但是,一旦我的客户端将我的产品安装在32位操作系统上,AFAIK的所有内容都将停止工作.我必须支持Windows Vista和7,它们各自的32位和64位版本.
我不想回落到32位.我的DLL中的250行C++代码只占我代码库的2%.并且该DLL仅在几个地方使用,因此在典型的使用场景中它甚至都没有加载.
我的DLL用ATL实现了两个COM对象,所以我不能使用" / clr:safe "项目设置.
有没有办法来配置解决方案和项目,使C#项目建立"任何CPU"版本中,C++项目建立两个 32位和64位版本,然后在运行时管理.EXE启动时,它使用的是32 -bit DLL或64位DLL取决于操作系统?
或者也许有一些我不知道的更好的解决方案?
提前致谢!
我正在评估Async CTP.
如何在另一个线程池的线程上开始执行异步函数?
static async Task Test()
{
// Do something, await something
}
static void Main( string[] args )
{
// Is there more elegant way to write the line below?
var t = TaskEx.Run( () => Test().Wait() );
// Doing much more in this same thread
t.Wait(); // Waiting for much more then just this single task, this is just an example
}
Run Code Online (Sandbox Code Playgroud) 我们正在构建一个WCF服务器(.NET 4.0).它只会使用net.tcp传输.
当客户端关闭TCP连接时,服务器将获取未处理的CommunicationException,并终止.
Q1.如何处理CommunicationException以便服务器不会终止并继续为其他客户端提供服务?
Q2.在处理程序中,如何获取已中止的会话的SessionId?我需要这个来清理一些特定于会话的数据.
提前致谢!
PS连接是通过Internet连接的,因此无论客户端是否正常断开连接,都可以随时关闭套接字.
我正在使用XmlDictionaryWriter将对象序列化为具有数据协定序列化程序的数据库.它的效果很好,尺寸和速度都比使用text/xml好2倍.
但是,我将不得不处理我的数据库中的大量记录,其中任何额外的字节直接转换为数据库大小的千兆字节.这就是为什么我喜欢通过使用XML字典来进一步缩小尺寸.
我怎么做?
我看到XmlDictionaryWriter.CreateBinaryWriter静态方法接受IXmlDictionary类型的第2个参数.MSDN说"XmlDictionary用作共享字典".
首先,我尝试使用系统提供的实现:
XmlDictionary dict = new XmlDictionary();
string[] dictEntries = new string[]
{
"http://schemas.datacontract.org/2004/07/MyContracts",
"http://www.w3.org/2001/XMLSchema-instance",
"MyElementName1",
"MyElementName2",
"MyElementName3",
};
foreach ( string s in dictEntries )
dict.Add( s );
Run Code Online (Sandbox Code Playgroud)
结果是.NET框架完全忽略了字典,仍然将上述字符串作为纯文本插入,而不是仅引用相应的字典条目.
然后我创建了自己的IXmlDictionary实现:
class MyDictionary : IXmlDictionary
{
Dictionary<int, string> values = new Dictionary<int, string>();
Dictionary<string, int> keys = new Dictionary<string, int>();
MyDictionary()
{
string[] dictEntries = new string[]
{
"http://schemas.datacontract.org/2004/07/MyContracts",
"http://www.w3.org/2001/XMLSchema-instance",
"MyElementName1",
"MyElementName2",
"MyElementName3",
};
foreach ( var s in dictEntries )
this.Add( s );
}
static IXmlDictionary …
Run Code Online (Sandbox Code Playgroud) 我正在评估SignalR技术用于我们的新产品(面向广大受众的移动网络应用程序,以及其他需要在某些页面上进行实时聊天的内容).
我按照指南创建了一个非常基本的聊天演示.然后我在我的IIS上部署了该演示,并开始与自己聊天.所有客户都在同一个WiFi网络上.
桌面浏览器或多或少都可以.
但是,iOS 4.2上的Safari和WP7.10上的IE - 它们都很糟糕.有时当我按下"发布"按钮时没有任何反应.有时外发消息被发送到桌面firefox,但是没有传入消息.
也许我错过了一些明显的东西?也许我需要jquery mobile而不是正常的?也许我应该调整IIS/web.config /无论如何,即使通过糟糕的移动互联网,SignalR也会蓬勃发展并开始完美运行?
或者它是否意味着,因为即使在从Web服务器单跳的WiFi上也不起作用,我应该抛弃SignalR并且只是编写一些JavaScript来轮询JSON端点以获取新消息?
提前致谢!
我目前正在研究在iOS软件中使用Google的WebP图像格式的可能性.
我发现使用谷歌的C库根据需要将WebP解码为RGBA8888并不困难.
但是,我想在API和性能方面创建一个与UIImage相当的实现.
Q1.是否有可能在iOS中开发图像解码器,以便原生imageWithData和其他API将读取新格式?
Q2.如果不是,UIImageView(和其他框架提供的控件)用什么API来绘制UIImage?它是公开的(例如drawInRect/drawAtPoint)还是内部的?我可以从UIImage继承,覆盖一些方法(例如+ imageWithContentsOfFile,+ imageWithData,+ imageNamed, - drawInRect,-drawAtPoint),并使我的WPImage对象在SDK提供的API中表现良好吗?
Q3.如果我假设的WPImage类的每个实例都会订阅UIApplicationDidReceiveMemoryWarningNotification(刷新RGBA图像缓冲区,而在RAM中留下更小的原始WebP数据),这不会对性能造成太大影响吗?我们正在开发的软件可能很容易在RAM中有数百个不同的图像.
提前致谢!
Windows更新后,Visual Studio始终重建我的C++项目.诊断日志说:
Project 'my.vcxproj' not up to date because 'C:\WINDOWS\SYSTEM32\TZRES.DLL'
was modified at 01/25/2018 07:43:09, which is newer than 'DEBUG\MY.LIB'
which was modified at 01/25/2018 05:28:05
Run Code Online (Sandbox Code Playgroud)
为什么visual studio会检查system32 DLL的时间戳?尤其是那些甚至没有联系的人?
重建没有帮助,因为Windows更新已设置该DLL的创建,修改和上次访问时间戳将来几个小时.BTW对DLL的描述说"Time Zones resource DLL",不知道是否相关.
我正在开发一个iPhone应用程序.
应用程序访问某些Web服务,其他东西应该识别设备ID.
由于不推荐使用UDID,我需要调用CFUUIDCreate来为此生成我自己的UUID.
该ID是安全敏感的:我的所有网络通信都是加密的,我不希望除证书认证服务器之外的任何人都知道UUID.
此外,我希望这个标识符能够在重新安装后继续存在.
使用钥匙串存储该UUID似乎是一个明显的解决方案.
我怎么做?
在互联网上,有一些示例如何在钥匙串中存储用户名和密码.我既没有用户也没有密码,只有16个字节的UUID(或单个NSString).
我需要使用哪个kSecClass?
我需要设置和检索哪些属性?
哪些属性是可选的,哪些属于强制性?
什么标头/框架定义了CSSM_ALGORITHMS?
文档提到cssmtype.h,xcode自动完成有<Security/cssmtype.h>但是xcode编译器说"找不到文件".
从常识来看,"身份"应该最合适.然而,文档说"身份是私钥和证书的组合",我没有.另外,我没有看到"关键字节"属性.
提前致谢!