前提・実現したいこと
最近UnityとC#でプログラミングの勉強をはじめました。
UDP通信をやってみようと思い、下記参考にして通信はできるようになりました。
http://www.ams.eng.osaka-u.ac.jp/user/ishihara/?p=1931
そこで複数の接続先をUI上で切り替えたいと思い
プログラム上で入力したIPアドレスを、ボタンをトリガーにして別のIPアドレスに変更できるようにしたいです。
ボタンを押すと設定しておいたIPがremoteHostに入力され、
テキストに今remoteHostに入っている文字を表示させるようにしてみましたが、
テキスト上の文字が変わっても実際の接続先が変わりません。
remoteHostを上書きするだけじゃ接続先を切り替えられないのでしょうか?
どんな単語を調べれば良いかも分からず、どう実装すれば良いかわかりません、、、
よろしくお願いいたします
該当のソースコード
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using System.Text; 5using System.Net; 6using System.Net.Sockets; 7using System.Threading; 8using UnityEngine.UI; 9 10 11public class UDP 12{ 13 private UdpClient udpForSend; 14 private string remoteHost = "デフォルトのIP";//送信先 15 private int remotePort; 16 17 private UdpClient udpForReceive; 18 public string rcvMsg = "ini"; 19 private System.Threading.Thread rcvThread; 20 21 public string RemoteHost 22 { 23 get { return remoteHost; } 24 set { remoteHost = value; } 25 } 26 27 public UDP() 28 { 29 30 } 31 32 public bool init(int port_snd, int port_to, int port_rcv) 33 { 34 try 35 { 36 udpForSend = new UdpClient(port_snd); 37 remotePort = port_to; 38 udpForReceive = new UdpClient(port_rcv); 39 rcvThread = new System.Threading.Thread(new System.Threading.ThreadStart(receive)); 40 return true; 41 } 42 catch 43 { 44 return false; 45 } 46 } 47 48 public void send(string sendMsg) 49 { 50 try 51 { 52 byte[] sendBytes = Encoding.ASCII.GetBytes(sendMsg); 53 udpForSend.Send(sendBytes, sendBytes.Length, remoteHost, remotePort); 54 } 55 catch { } 56 } 57 58 public void receive() 59 { 60 IPEndPoint remoteEP = null; 61 while (true) 62 { 63 try 64 { 65 byte[] rcvBytes = udpForReceive.Receive(ref remoteEP); 66 Interlocked.Exchange(ref rcvMsg, Encoding.ASCII.GetString(rcvBytes)); 67 } 68 catch { } 69 } 70 } 71 72 public void start_receive() 73 { 74 try 75 { 76 rcvThread.Start(); 77 } 78 catch { } 79 } 80 81 public void stop_receive() 82 { 83 try 84 { 85 rcvThread.Interrupt(); 86 } 87 catch { } 88 } 89 90 public void end() 91 { 92 try 93 { 94 udpForReceive.Close(); 95 udpForSend.Close(); 96 rcvThread.Abort(); 97 } 98 catch { } 99 } 100} 101 102 103public class UDPManager : MonoBehaviour 104{ 105 public Text IPText; 106 107 private void Start() 108 { 109 var UDP = new UDP(); 110 IPText.text = UDP.RemoteHost;//getを使って取得している 111 } 112 113 public void toY_button_Clik() 114 115 { 116 var UDP = new UDP(); 117 UDP.RemoteHost = "IP候補1";//setを使って代入している 118 IPText.text = UDP.RemoteHost;//getを使って取得している 119 } 120 121 public void toA_button_Clik() 122 123 { 124 var UDP = new UDP(); 125 UDP.RemoteHost = "IP候補2";//setを使って代入している 126 IPText.text = UDP.RemoteHost;//getを使って取得している 127 128 } 129 130}
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using System.Text; 5using System.Net; 6using System.Net.Sockets; 7using System.Threading; 8using UnityEngine.UI; 9 10 11public class UDP_button_Manager : MonoBehaviour 12 { 13 public Text receiveText; 14 15 private UDP commUDP = new UDP(); 16 private bool sendSwitch = false; 17 private bool receiveSwitch = false; 18 19 private void Start() 20 { 21 commUDP.init(8887, 9001, 9000);//(送信用ポート番号、送信先ポート番号、受信用ポート番号) 22 receiveText.text = "Test"; 23 } 24 25 private void Update() 26 { 27 if (receiveSwitch) 28 { 29 receiveText.text = commUDP.rcvMsg; 30 } 31 } 32 33 public void wifiSend() 34 { 35 if (sendSwitch == false) 36 { 37 sendSwitch = true; 38 commUDP.send("ぽ"); 39 40 } 41 else 42 { 43 sendSwitch = false; 44 commUDP.send("め"); 45 46 } 47 48 } 49 50 51 public void WiFiReceive() 52 { 53 if (receiveSwitch == false) 54 { 55 receiveSwitch = true; 56 commUDP.start_receive(); 57 58 59 } 60 else 61 { 62 receiveSwitch = false; 63 commUDP.stop_receive(); 64 } 65 66 } 67 68 69 }
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/10 08:30
2020/07/10 08:40
2020/07/14 05:59