48709


クライアントPC1台+サーバーPC2台(A、B)という構成で、  
クライアントPCからサーバAにtcp接続を行い、コネクション確立されたらAに、確立されなければBにアクセスするというソフトを作成しています。

TCPポート50002を指定して接続確認を行いたいのですが、うまく行えません。  
ファイアウォールの送受信設定で50002を許可にはしています。

下記が実装中のTCPアクセスクラスです。

[code]

    public class TcpClientAcs
    {
        string strPartnerIpAddress;
        int nPort;
        int nTcpConnectionTimeout;
        int nTcpConnectionCount;
    
    
        public TcpClientAcs()
        {
            nPort = 50002;
            nTcpConnectionTimeout = 2000;
            nTcpConnectionCount = 2;           
        }
    
        public bool CLTMain(string ipaddress)
        {
            strPartnerIpAddress = ipaddress;
            System.Net.Sockets.TcpClient tcp;        
            int ConnectionRetryCnt = 0;
            tcp = null;
    
            // TCP connection
            while (true)
            {
    
                if (ConnectionRetryCnt < nTcpConnectionCount)
                {
                    try
                    {
                        tcp = new TcpClient();
                        var connection = tcp.BeginConnect(strPartnerIpAddress, nPort, null, null);
                        var success = connection.AsyncWaitHandle.WaitOne(nTcpConnectionTimeout);
                        //add retry count
                        if (!success)
                        {
                            ConnectionRetryCnt++;
                            continue;
                        }
                        else
                        {                            
                            break;
                        }
                    }
                    catch (Exception)
                    {
                        ConnectionRetryCnt++;
                    }
                }
                else
                {
                    return false;
                }
                return true;
            }
            return true;
        }
    }
    
[/code]

宜しくお願いします。


CC BY-SA 4.0
2018-09-20T08:26:00.047
48588
2018-09-26T00:22:27.163
19580
question
c# visual-studio tcp
TcpClientでTCP接続がうまくできない


自己解決しました。  
Wiresharkで調べたところ送信元のポート番号が毎回異なることに気づきました。  
今回の場合、送信先のポート番号のみ指定しており、送信元のポート番号を指定していなかった為、起きていました。  
TcpClientのインスタンス作成時にIPEndpointを指定することで解決できました。

[code]

    IPEndPoint ep = new IPEndPoint(ip, nPort);
    tcp = new TcpClient(ep);
    
[/code]


CC BY-SA 4.0
2018-09-26T00:22:27.163
48709
2018-09-26T00:22:27.163
19580
48588
answer