草庐IT

c++ - 游戏网络代码-客户端预测和修正

我正在使用winsock和c++创建一个2dsidescrollermmorpg,我想问一下如何编写客户端预测和校正程序?好吧,尤其是更正,因为预测基本上只是在客户端运行您在服务器上运行的物理代码。服务器大约每两秒发送一次更正。此消息包含X&Y位置和X&Y速度以及类似的输入左0,右1,跳1...编辑:我可以为其他客户做同样的事情吗?所以我没有发送位置和速度的快照,而是只发送已经改变的输入,以及本地客户端将预测其他客户端将移动到哪里。服务器每2-3秒发送一次更正。非常感谢! 最佳答案 通常在这种类型的游戏中会做什么:预测是“航位推算”

c++ - IO 完成端口 : How does WSARecv() work?

我想使用工作线程池和IO完成端口编写一个服务器。服务器应该在多个客户端之间处理和转发消息。“每个客户”数据位于ClientContext类中。此类实例之间的数据使用工作线程进行交换。我认为这是一个典型的场景。但是,我对那些IO完成端口有两个问题。(1)第一个问题是服务器基本上从客户端接收数据,但我不知道是否收到了完整的消息。事实上,WSAGetLastError()总是返回WSARecv()仍在挂起。我试图用WaitForMultipleObjects()等待事件OVERLAPPED.hEvent。但是,它会永远阻塞,即WSARecv()在我的程序中永远不会完成。我的目标是绝对确保在进

c++ - 使用 C++ 和 winsock 的蓝牙

我发现很难在C++中获得有关蓝牙通信的信息。具体来说,我想避免使用任何第三方库,我只想连接到已经与我的计算机配对的设备。该设备已经输入了密码,并且在我的设备和打印机下的“显示蓝牙设备”中可用。我正在使用Windows7和VisualStudio2013Professional进行C++开发。我有一些示例代码(来自此处http://www.winsocketdotnetworkprogramming.com/winsock2programming/winsock2advancedotherprotocol4k.html),它在我的蓝牙radio上显示信息,然后显示设备信息,它似乎运行良好

C++ 服务器端不阻塞 listen()

下面的代码不会阻塞在listen()上,它只是完成执行。你能告诉我为什么吗?(initWSA返回true,我查过了)。我正在学习一个教程,我被告知它应该阻止,因为它正在寻找要连接的客户端。#include#include#pragmacomment(lib,"ws2_32.lib")usingnamespacestd;#definePORT10000boolinitWSA(){WSADATAwsadata;interror=WSAStartup(0x0202,&wsadata);if(error)returnfalse;if(wsadata.wVersion!=0x0202){WSAC

c++ - 使用 C++ 中的示例服务器源替代 winsock2

我正在使用在http://tangentsoft.net/wskfaq/examples/basics/select-server.html中找到的这个示例实现这完成了我需要的大部分工作,无阻塞地处理连接并在其线程中完成所有工作(不像某些示例那样为每个连接创建一个新线程),但我很担心,因为有人告诉我winsock将只支持最多64个客户端连接:S这64个连接是真的吗?我还有什么其他选择?如果有一个类似实现的C++示例会很酷。谢谢 最佳答案 替代库:您应该考虑使用boostasio.它是一个跨平台网络库,可以简化您可能必须完成的许多任务

c++ - Winsock 应用程序中的线性航位推算

我在理解如何在我的服务器-客户端Winsock游戏中实现航位推算时遇到一点困难。我一直在互联网上寻找准确解释的体面解释:何时应从服务器向客户端发送消息如果客户端没有收到更新消息应该如何操作,它是否继续使用预测位置作为当前位置以计算新的预测位置?我使用的航位推算方法是:pathvector=oldPosition-oldestPositiondeltatime=oldTime-oldestTimedeltavelocity=pathvector/deltatimenewdeltatime=currenttime/oldesttimenewprediction=oldPosition+ne

c++ - Winsock MSG_DONTWAIT 等效项

在Windows下移植unixC++代码并使用sockets/winsockAPI时,我在服务器端遇到了这个问题:recv(ClientSocket,recvbuf,recvbuflen,MSG_DONTWAIT);//UNIXcode我从here找到WSA的MSG_DONTWAIT标志等效于使用ioctlsocket将套接字设置为非阻塞模式:使用arg!=0(hereisthedocumentation)调用FIONBIO。在服务器端,我有两个套接字:连接服务器的套接字:SOCKETListenSocket=socket(...)bind(ListenSocket,...)liste

C++ - 绕过 WinSock Hook

我想做的是使用theDetourslibrary连接到应用程序WinSock2send()和recv()函数(数据包记录器)。虽然它确实适用于send()函数,但它不适用于recv()函数。这是我的相关代码:#include#include#include#include#include#include#include#pragmacomment(lib,"Ws2_32.lib")#pragmacomment(lib,"detours.lib")#pragmacomment(lib,"detoured.lib")#pragmacomment(lib,"Mswsock.lib")std:

c++ - 计算套接字上传速度

我想知道是否有人知道如何用C++计算Berkeley套接字的上传速度。我的send调用没有阻塞,发送5MB数据需要0.001秒,但需要一段时间才能recv响应(所以我知道它正在上传)。这是到HTTP服务器的TCP套接字,我需要异步检查已上传/剩余的数据字节数。但是,我在Winsock中找不到任何API函数,所以我很困惑。如有任何帮助,我们将不胜感激。编辑:我找到了解决方案,并将尽快作为答案发布!编辑2:添加正确的解决方案作为答案,将在4小时内添加为解决方案。 最佳答案 由于bdolan建议减少SO_SNDBUF,我解决了我的问题。但

c++ - winsock2线程安全吗?

我正在编写一个包含3个服务器和1个客户端的小型程序。2个服务器发送tcp消息,最后一个使用winsock2发送upd数据报。我想知道我是否可以通过使用线程(OpenMP或boost::threads)进行同步recvfrom(),以便2个线程同时从同一端口上的同一套接字监听。我在windows7上使用VC++2010。感谢您的帮助。 最佳答案 是的,套接字是线程安全的,但是您必须小心。一种常见的模式(当使用阻塞IO时)是让一个线程在套接字上接收数据,而另一个线程在同一个套接字上发送数据。让多个线程从一个套接字接收数据通常对UDP套接