Poco ライブラリを使い始めたばかりです。Poco の DatagramSocket オブジェクトを使用して 2 台のコンピューターが通信する際に問題が発生しています。具体的には、 receiveBytes 関数が返されないようです (Wireshark を実行し、送信している UDP パケットが宛先マシンに到着していることを確認しているにもかかわらず)。簡単なことを省略していると思いますが、これはすべて私の愚かな間違いによるものです。Visual Studio Express 2010 を使用して、Windows 7 で Poco 1.4.3p1 をコンパイルしました。以下は、Poco の使用方法を示すコード スニペットです。アドバイスをいただければ幸いです。
送信
#include "Poco\Net\DatagramSocket.h"
#include "Serializer.h" //A library used for serializing data
int main()
{
Poco::Net::SocketAddress remoteAddr("192.168.1.140", 5678); //The IP address of the remote (receiving) machine
Poco::Net::DatagramSocket mSock; //We make our socket (its not connected currently)
mSock.connect(remoteAddr); //Sends/Receives are restricted to the inputted IPAddress and port
unsigned char float_bytes[4];
FloatToBin(1234.5678, float_bytes); //Serializing the float and storing it in float_bytes
mSock.sendBytes((void*)float_bytes, 4); //Bytes AWAY!
return 0;
}
受信 (問題がある場合)
#include "Poco\Net\DatagramSocket.h"
#include "Poco\Net\SocketAddress.h"
#include "Serializer.h"
#include <iostream>
int main()
{
Poco::Net::SocketAddress remoteAddr("192.168.1.116", 5678); //The IP address of the remote (sending) machine
Poco::Net::DatagramSocket mSock; //We make our socket (its not connected currently)
mSock.connect(remoteAddr); //Sends/Receives are restricted to the inputted IPAddress and port
//Now lets try to get some datas
std::cout << "Waiting for float" << std::endl;
unsigned char float_bytes[4];
mSock.receiveBytes((void*)float_bytes, 4); //The code is stuck here waiting for a packet. It never returns...
//Finally, lets convert it to a float and print to the screen
float net_float;
BinToFloat(float_bytes, &net_float); //Converting the binary data to a float and storing it in net_float
std::cout << net_float << std::endl;
system("PAUSE");
return 0;
}
お時間をいただきありがとうございます。