您好 Stackoverflow 社区,
在尝试使用 C++ 实现 UDP 传输时,我有以下问题:
1)我正在尝试构建一个函数,该函数将接收带有“/location 7 5”之类的字符串的简单UDP数据包,并解析出浮点值7和5并将其存储到数组中。有没有关于如何做到这一点的例子?
2) 在尝试使用来自https://code.google.com/p/oscpack/的 OSCPacket 数小时后,但我无法克服此处显示的任何编译器错误:http: //i.tylian.net/untitloxo.png
正如错误消息所示,错误来自 OSCPack 而不是我的代码。有没有人熟悉这个或者有更好的方法来实现 UDP 数据包传输?
3) 我只使用 ws32.dll 库,但除此之外我还应该使用其他库吗?
随意回答部分或全部多部分问题,如果需要更多详细信息,请告诉我!另外,我的目标平台是 Windows 7 64 位。
非常感谢您的宝贵时间!
以下是我使用 OSCPacket 完成的一些代码:
包括:
#include <iostream>
#include <cstring>
#if defined(__BORLANDC__) // workaround for BCB4 release build intrinsics bug
namespace std {using ::__strcmp__; } // avoid error: E2316 '__strcmp__' is not a member of 'std'.
#endif
#include "osc/OscReceivedElements.h"
#include "osc/OscPacketListener.h"
#include "ip/UdpSocket.h"
#define PORT 7000
数据包监听器
float* coordinateFromOSC = (float*) malloc (2);
class PacketListener : public osc::OscPacketListener {
protected:
virtual void ProcessMessage( const osc::ReceivedMessage& m,
const IpEndpointName& remoteEndpoint )
{
(void) remoteEndpoint; // suppress unused parameter warning
try{
//the return value, array of 2, [0] for xValue, [1] for yValue
//will be stored at global variable coordinateFromOSC
// Trying to parse the packet. osc::OsckPacketListener
if( strcmp( m.AddressPattern(), "/location" ) == 0 ){
// Streaming input as argument
osc::ReceivedMessageArgumentStream args = m.ArgumentStream();
float xValue, yValue;
args >> xValue >> yValue >> osc::EndMessage;
coordinateFromOSC[0] = xValue;
coordinateFromOSC[1] = yValue;
}
}catch( osc::Exception& e ){
// any parsing errors such as unexpected argument types, or
// missing arguments get thrown as exceptions.
std::cout << "Invalid format: "
<< m.AddressPattern() << ": " << e.what() << "\n";
}
}
};
最后在我需要存储值的函数中
PacketListener listener;
UdpListeningReceiveSocket s(IpEndpointName( IpEndpointName::ANY_ADDRESS, PORT ), &listener );