5

マルチスレッドのクライアントサーバーチャットアプリケーションを作成し、複数のクライアントでアプリケーションをテストしたいと思います。ランダムなポートとIPを作成するシミュレーターをクライアント側で作成することを計画しています。つまり、クライアントシステムは複数のポートで実行する必要があります(複数回実行する必要はありません)。

クライアントクラスのクライアントIPとポート番号を与えるコードの部分を見つけようとしましたが、理解できませんでした。サーバーのIPとポートを提供する部分だけを見つけました。

これは私の接続確立部分です

private void cmdConnect_Click(object sender, System.EventArgs e)
    {
        try
        {
            //create a new client socket ...
            m_socWorker = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
            String szIPSelected  = txtIPAddress.Text;
            String szPort = txtPort.Text;
            int  alPort = System.Convert.ToInt16 (szPort,10);


            System.Net.IPAddress    remoteIPAddress  = System.Net.IPAddress.Parse(szIPSelected);
            System.Net.IPEndPoint   remoteEndPoint = new System.Net.IPEndPoint(remoteIPAddress, alPort);
            m_socWorker.Connect(remoteEndPoint);
        }
        catch (System.Net.Sockets.SocketException se)
        {
            MessageBox.Show ( se.Message );
        }
    }

と私のデータ送信部分

private void cmdSendData_Click(object sender, System.EventArgs e)
    {
        try
        {
            Object objData = txtData.Text;
            byte[] byData = System.Text.Encoding.ASCII.GetBytes(objData.ToString ());
            m_socWorker.Send (byData);
        }
        catch(System.Net.Sockets.SocketException se)
        {
            MessageBox.Show (se.Message );
        }
    }
4

1 に答える 1

6

サーバーに接続する前にクライアントソケットアドレスを設定する必要があり、マルチホームシステムでカーネルを特定のローカルアドレスにバインドするように強制する場合は、多くの場合、有効なシナリオです。呼び出すSocket.Bind() に呼び出すことができますSocket.Connect()

IPAddress  localIPAddress = IPAddress.Parse(szLocalIP);
IPEndPoint localEndPoint  = new IPEndPoint(localIPAddress, 0);
m_socWorker.Bind(localEndPoint);

m_socWorker.Connect(remoteEndPoint);

IPEndPointコンストラクターでローカルポート番号を明示的に指定することもできますが、ポートが使用されていないことを確認する必要があります。ポート番号を0のままにすると、システムは(ほぼ)任意の空きポート番号を選択します。

任意のクライアントIPアドレスを選択することはできないことに注意してください。これは、システムの有効なネットワークインターフェイスで構成されているアドレスの1つである必要があります。構成内容については、の出力を参照してくださいipconfig /all。単にテストしたい場合は、インターフェイスに複数のIPアドレスを割り当てることができます。

于 2012-12-17T13:23:31.540 に答える