我在C中编写了一个HTTP 1.1 POST向Web服务器发送请求的程序.
使用wireshark监视它,服务器响应并获取HTTP/1.1 200 OK消息需要不到一秒的时间,然后再需要20秒来获取FIN, ACK数据包,我相信这是导致recv返回0的原因,不再指定数据.
导致我的程序挂起20秒,等待服务器发送FIN, ACK数据包.
我已经测试了这个HTTP 1.0,并且没有延迟.所以我认为这是因为HTTP 1.1默认情况下将所有连接视为persistent connections.
但是我的网络浏览器使用HTTP 1.1并且没有延迟,所以我认为我做的不对.
我有一个想法,而不是等待recv返回0,我应该检查我是否在文档的末尾以其他方式,但我想不出有任何办法这样做.
所以如果有人能向我解释我应该怎么做呢?提前致谢.
我正在开发一个项目,我有几个矩形,我希望每个都有悬停效果.现在我知道我可以捕获WM_MOUSEMOVE消息并遍历每个矩形.但是,如果我有很多矩形(如果50很多),该怎么办?
我可能错了,但不会迭代那么多,并且每次鼠标移动缓慢应用程序一点点时测试每一个?
然后我开始想知道操作系统(例如windows)是如何做到这一点的,现在我的屏幕上有100多个东西,当我将鼠标悬停在它们上面时,它们都有某种动画.而且我不认为每次鼠标移动像素时窗口都会遍历所有窗口.
基本上:
1.如果我有大约50个矩形,我怎么能弄清楚我的鼠标在哪个矩形上面,并考虑到性能.
2. Windows如何做到这一点?(我对任何东西都更好奇,但如果它不复杂,也许我可以在我自己的程序中实现类似的东西?)
哦,它们都是矩形,它们不会旋转或任何东西.
我正在尝试重定向java中的子进程的stdin和stdout,最终我将输出转到JTextArea或其他东西.
这是我目前的代码,
Process cmd = Runtime.getRuntime().exec("cmd.exe");
cmd.getOutputStream().write("echo Hello World".getBytes());
cmd.getOutputStream().flush();
byte[] buffer = new byte[1024];
cmd.getInputStream().read(buffer);
String s = new String(buffer);
System.out.println(s);
Run Code Online (Sandbox Code Playgroud)
输出如下所示:
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
C:\(Current Directory)>
Run Code Online (Sandbox Code Playgroud)
我期待看到输出的"Hello World"字符串.也许是因为父进程没有足够长久存活?
我也希望能够发送和接收多个命令.
我通过将文本文件添加到资源然后加载它来将文本文件链接到我的项目中.
我使用LockResource和a static_cast将它投射到一个std::wstring
std::wstring sData(static_cast<wchar_t*>(pData));
我的项目采用UNICODE(窗口),这就是为什么我使用std::wstring和wchar_t.
我发现我必须将文件中的编码设置为UCS-2 LE,否则它只会读取乱码.我猜这是因为这是Windows使用的编码.
我的问题是,假设所有Windows操作系统目前都使用UCS-2 LE是否安全?我不想使用UCS-2 BE(或其他东西)进入系统.我的节目会崩溃.
我可以节省在ANSI文件,然后将其转换成什么都编码在操作系统使用MultiByteToWideChar,但是这将是浪费时间,如果它肯定会是UCS-2 LE.
如果我有2个相同文本的字符串,一个是UTF-8,另一个是UTF-16.
假设UTF-8字符串总是比UTF-16字符串更小或相同,是否安全?(按字节顺序)
public abstract class Class1 {
protected static Object object1 = null;
protected static Object object2 = null;
public static Object[] objects = { object1, object2 };
public static void main(String[] args) {
new Class2();
for (Object o : objects) {
System.out.println(o);
}
}
}
public class Class2 extends Class1 {
public Class2() {
Class1.object1 = new String("String 1");
Class1.object2 = new String("String 2");
}
}
Run Code Online (Sandbox Code Playgroud)
这输出:
null
null
Run Code Online (Sandbox Code Playgroud)
为什么?
当我创建一个新实例时Class2,该类的构造函数初始化object1和object2.
objects据我所知,包含对这些对象的引用.所以在他们初始化之后,我期待任何东西,但是无效.
有人能解释一下吗 谢谢.
我正在连接到一个网站并通过向其发送GET请求来检索HTTP数据.我必须连接到同一个站点两次以检索两个不同的页面.我是网络编程的新手,但我相信该connect功能连接到服务器,并创建了一个tcp连接.
现在,每次我连接到服务器以检索HTTP数据时,都必须创建一个新的tcp连接,有什么办法可以重用旧的连接吗?它会在另一个之后立即检索http数据.这不是什么大不了的事,但我很好奇.
使用std::wstring我的方式MultiByteToWideChar?
std::wstring widen(const std::string &in)
{
int len = MultiByteToWideChar(CP_UTF8, 0, &in[0], -1, NULL, 0);
std::wstring out(len, 0);
MultiByteToWideChar(CP_UTF8, 0, &in[0], -1, &out[0], len);
return out;
}
Run Code Online (Sandbox Code Playgroud) 使用Microsoft.Win32.RegistryKey(或任何相关的类),如何查询注册表项的上次写入时间?
我决定使用C#和C++中的图像进行基准测试,以确定在我正在考虑为自己制作的项目中使用哪种语言.
我预计基准测试非常接近C++可能会略微推进.
C#代码每次运行大约需要300ms(我运行每次测试100次),其中C++代码大约需要1.5ms.
我的C#代码错了吗?我对它进行基准测试吗?或者它真的只是这么慢?
这是我使用的c#代码:
Stopwatch watch = new Stopwatch();
watch.Start();
Image image = Image.FromFile(imagePath);
watch.Stop();
Console.WriteLine("DEBUG: {0}", watch.ElapsedMilliseconds);
Run Code Online (Sandbox Code Playgroud)
C++代码几乎归结为:
QueryPerformanceCounter(&start);
Image * img = Image::FromFile(imagePath);
QueryPerformanceCounter(&stop);
delete img;
return (stop.QuadPart - start.QuadPart) * 1000.0 / freq.QuadPart;
Run Code Online (Sandbox Code Playgroud)
无论使用哪种语言,它们都需要以Image对象结束,因为它提供了我将需要的功能.
================================================== =====================
正如xanatos在评论中指出的那样,Image.FromFile会进行检查.
更具体地说,这个:
num = SafeNativeMethods.Gdip.GdipImageForceValidation(new HandleRef(null, zero));
if (num != 0)
{
SafeNativeMethods.Gdip.GdipDisposeImage(new HandleRef(null, zero));
throw SafeNativeMethods.Gdip.StatusException(num);
}
Run Code Online (Sandbox Code Playgroud)
使用Image.FromStream()代替,您可以避免这种情况.
我想知道的是,如果你避免这种情况并尝试加载无效的图像文件,它会抛出OutOfMemory异常.
在C++中,你不做这样的检查.那么检查有多重要?任何人都可以给我一个避免这种情况会很糟糕的情况吗?