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 );