前提・実現したいこと
他アプリケーションのプラグインをC++で作成しており、Unity側でfloatの配列を送ってC++で受信するのを実現したいです。float単体で送り、受信は出来たのですが多分スマートではないと思います...。
C#はそこそこ使っている分かるのですが、C++での開発経験、UDP通信回りの知識がほぼゼロでの質問なので回答のコードも分からない可能性がありますので細かくご教授頂けると助かります。よろしくお願いいたします。
該当のソースコード、試したこと
char*とfloat配列の変換方法が分からないのでとりあえずfloat単体でstringに変換して送ってみることにしました。C++でのUDP受信が全く分からなかったので下記のURLのソースコードを使わせて頂きました。
送信側のソースコード(Unity)
C#
1private UdpClient m_testClient = null; 2 3public void TestSend() 4{ 5 if (m_testClient == null) 6 { 7 //接続 8 m_testClient = new UdpClient(); 9 m_testClient.ExclusiveAddressUse = false; 10 m_testClient.Client.SendTimeout = 30000; 11 m_testClient.Connect("127.0.0.1", 49004); 12 } 13 14 //送信 15 var testFloat = 1.23456f; 16 var sendString = testFloat.ToString("F5"); 17 byte[] array = System.Text.Encoding.UTF8.GetBytes(sendString); 18 m_testClient.Send(array, array.Length); 19}
受信側のソースコード
C++
1 2 WSAStartup(MAKEWORD(2, 0), &wsaData); 3 4 // socket作成 5 sock = socket(AF_INET, SOCK_DGRAM, 0); 6 // アドレス等格納 7 struct sockaddr_in addr; 8 addr.sin_family = AF_INET; 9 addr.sin_port = htons(49005); 10 addr.sin_addr.S_un.S_addr = INADDR_ANY; 11 12 // バインド 13 // アドレス等の情報をsocketに登録する 14 bind(sock, (struct sockaddr *)&addr, sizeof(addr)); 15 16 u_long val = 1; 17 ioctlsocket(sock, FIONBIO, &val); 18 19 char buf[2048]; 20 memset(buf, 0, sizeof(buf)); 21 22 // 受信 23 recv(sock, buf, sizeof(buf), 0); 24 // floatに変換(あまりスマートではないと思われる) 25 float val = (float)atof(buf); 26 27 // socketの破棄 28 closesocket(sock); 29 30 // winsockの終了 31 WSACleanup(); 32
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/08/01 02:50
2019/08/01 03:01
2019/08/01 03:11
2019/08/01 05:46