課題で
今回悩んでいたところ
上司がUDP通信のソースを作ってきてくれました
このソースは受信と送信を同時に行っているんでしょうか?
見てもあんまり意味がわかりませんでした
ただ16進数にしなくちゃいけないが10進数になっているといわれました。
using
1using System.Collections.Generic; 2using UnityEngine; 3using System.Net; 4using System.Net.Sockets; 5using System.Threading; 6 7public class UdpSocket : MonoBehaviour 8{ 9 private string _MulticastAddr = "224.0.23.0"; // マルチキャストアドレス 10 private string _RemoteHost = ""; // 送信相手アドレス 11 private int _SendPort = 3610; // 送信ポート 12 private int _RecvPort = 3610; // 受信ポート 13 14 private UdpClient _UdpClient; // UDP 15 private IPEndPoint _IpEndPoint; // IPEndPoint 16 private Thread _RecvThread; // 受信スレッド 17 18 // 接続 19 public void Connect() 20 { 21 IPAddress grpAddr = IPAddress.Parse(_MulticastAddr); 22 23 if (_IpEndPoint != null) _IpEndPoint = null; 24 _IpEndPoint = new IPEndPoint(grpAddr, _RecvPort); 25 26 // マルチキャストグループに参加 27 Disconnect(); 28 _UdpClient = new UdpClient(_RecvPort); 29 _UdpClient.JoinMulticastGroup(grpAddr); 30 31 // 受信スレッド生成 32 _RecvThread = new Thread(ReceiveMulticastThread); 33 _RecvThread.Start(); 34 35 // ノードプロファイル通知送信 36 SendNodeProfile(); 37 } 38 39 // 切断 40 public void Disconnect() 41 { 42 if (_RecvThread != null) 43 { 44 _RecvThread.Abort(); 45 _RecvThread = null; 46 } 47 48 if (_UdpClient != null) 49 { 50 IPAddress grpAddr = IPAddress.Parse(_MulticastAddr); 51 _UdpClient.DropMulticastGroup(grpAddr); 52 _UdpClient.Close(); 53 _UdpClient = null; 54 } 55 } 56 57 // ノードプロファイル通知送信 58 public void SendNodeProfile() 59 { 60 byte[] pack = BuildNodeProfileInfo(); 61 SendPacket(pack, _MulticastAddr); 62 } 63 64 // 送信 65 public void SendPacket(byte[] packet, string host) 66 { 67 _UdpClient.Send(packet, packet.Length, host, _SendPort); 68 } 69 70 // 受信スレッド 71 public void ReceiveMulticastThread() 72 { 73 byte[] packet; 74 75 int i = 0; 76 System.Text.StringBuilder s = new System.Text.StringBuilder(); 77 78 packet = _UdpClient.Receive(ref _IpEndPoint); 79 if (packet != null) 80 { 81 // 受信できた! 82 s.Remove(0, s.Length); 83 for (i=0; i<packet.Length; i++) 84 { 85 s.Append(System.Convert.ToString(packet[i], 16).PadLeft(2, '0')); 86 } 87 Debug.Log(s.ToString()); 88 } 89 90 } 91 92 // ノードプロファイル通知パケット作成 93 private byte[] BuildNodeProfileInfo() 94 { 95 byte[] pack; 96 pack = new byte[17]; 97 98 pack[0] = 0x10; // EHD1 99 pack[1] = 0x81; // EHD2 100 pack[2] = 0x00; // 101 pack[3] = 0x01; // ID 102 103 pack[4] = 0x0E; // 送信元「ノードプロファイルクラス」 104 pack[5] = 0xF0; // EOJ = 0x0E F0 01 105 pack[6] = 0x01; // 106 107 pack[7] = 0x0E; // 送信先「ノードプロファイルクラス」 108 pack[8] = 0xF0; // EOJ = 0x0E F0 01 109 pack[9] = 0x01; // 110 111 pack[10] = 0x73; // ESV 112 113 pack[11] = 0x01; // OPC 114 115 pack[12] = 0xD5; // EPC 116 pack[13] = 0x04; // PDC 117 pack[14] = 0x01; // EDT 118 pack[15] = 0x05; // 119 pack[16] = 0xFF; // 120 pack[16] = 0x01; // 121 122 return pack; 123 } 124} 125 126コード
コード
unityでUDP通信の送信をしたい エラーはないのですが ボタンを押しても送信されません まず無反応です。何も起こりません 恐らくソースの何かがたらないです```ここに言語を入力 コード 送信コードが遅れたことも無反応なため 何か足りていないと思いました。
using UnityEngine;
using System.Net.Sockets;
using System.Text;
public class UDPClient : MonoBehaviour { public string host = "224.0.23.0"; public int port = 3610; private UdpClient client; // Use this for initialization
public void Start () {
client = new UdpClient();
client.Connect(host, port);
}
// Update is called once per frame
public void Update () {
} void OnGUI() { if (GUI.Button(new Rect(10, 10, 100, 40), "ボタン")) { byte[] dgram = Encoding.UTF8.GetBytes("hello!"); client.Send(dgram, dgram.Length); } } void OnApplicationQuit() { client.Close(); }
}
回答2件
あなたの回答
tips
プレビュー