59873


Unity上のC#でソケット通信の受信をしようと思っています。  
以下のようなコードだと、送信元のプログラムが中断された場合、エラーになりまってしまいます。

**unityRecieve.cs**

[code]

    using UnityEngine;
    using System.Net;
    using System.Net.Sockets;
    using System.Text;
    
    public class unityRecieve : MonoBehaviour
    {
    
        static UdpClient udp;
    
        void Start()
        {
            int LOCA_LPORT = 50007;
    
            udp = new UdpClient(LOCA_LPORT);
            udp.Client.ReceiveTimeout = 100;
        }
    
        void Update()
        {
            IPEndPoint remoteEP = null;
            byte[] data = udp.Receive(ref remoteEP);
            string text = Encoding.UTF8.GetString(data);
            Debug.Log(text);
        }
    }
    
[/code]

参考URL：<https://jump1268.hatenablog.com/entry/2018/11/25/143459>

エラー内容は以下の通りです。

[code]

    SocketException: 接続済みの呼び出し先が一定の時間を過ぎても正しく応答しなかったため、接続できませんでした。または接続済みのホストが応答しなかったため、確立された接続は失敗しました。
    
[/code]

送信元のプログラムが停止・中断されてもエラーを出さないような回避処理を加えるにはどうしたら良いですか？


CC BY-SA 4.0
2019-10-20T17:30:17.837
59828
2019-11-01T03:37:27.507
34471
question
c# unity3d socket
ソケット通信でデータを受信できなかった場合もエラーを出さないようにする方法


[例外処理](https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-
guide/exceptions/)を実装してください。

[code]

    try
    {
        IPEndPoint remoteEP = null;
        byte[] data = udp.Receive(ref remoteEP);
        string text = Encoding.UTF8.GetString(data);
        Debug.Log(text);
    }
    catch (Exception e)
    {
        // 例外が発生したときの処理
        Debug.Log(e.ToString()); 
    }
    
[/code]


CC BY-SA 4.0
2019-10-22T09:31:49.950
59873
2019-10-22T09:31:49.950
14817
59828
answer


タイムアウトを設定しているため、受信しなければタイムアウトでエラーになると思います。  
受信タイミングが不明な場合、下記の「非同期的に送受信を行う」を参照してみてください。  
<https://dobon.net/vb/dotnet/internet/udpclient.html>


CC BY-SA 4.0
2019-11-01T03:37:27.507
60170
2019-11-01T03:37:27.507
24490
59828
answer