-2

インスタント メッセンジャーのように動作するプログラムを作成したいと考えています。すでに完成していますが、特定の IP アドレスに文字列を送受信する方法がわかりません。

私はこのものが属するメソッドを自分自身に含めました:

//is called every second and when you commit a message
public void Update(ref eStatus prgmStatus, ref eProfile userProfile)
{
    UpdateUI(ref prgmStatus);
    [ Some other Update Methods ]
    [ Catch the string and add it to userProfile.CurrentChatHistory]
}

public void EnterText(object sender, EventArgs e)
{
    _usrProfile.CurrentChatHistory.Add(chatBox.Text);
    [ send chatBox.Text to IP 192.168.0.10 (e.g.) ]
}

追加のサーバー ソフトウェアを実行せずに、クライアント ツー クライアント システムを使用したいと考えています。

これを実現するために使用できるシステムの名前空間とメソッドは何ですか?

4

3 に答える 3

2

System.Net 名前空間は、探す必要がある場所です。

中央サーバーなしで複数の IP アドレスにメッセージを送信する必要があるピア ツー ピア チャットを行っている場合は、UDP を使用するのが最適な場合があります。

あなたのコメントから、中央サーバーがないことがわかりました。少なくとも最初は、迅速な起動のために UDP を使用することをお勧めします。UdpClient クラスはここでの友達で、指定したネットワーク アドレスにパケットを送信できます。

基本的には、新しい UdpClient インスタンスを作成し、バインドする既知のポート番号をコンストラクターに渡すだけです。

次に、Receive メソッドを使用して、そのポートでパケットを読み取ります。

その後、同じインスタンスで Send メソッドを使用して、パケットをネットワーク アドレスに送信することもできます。

于 2012-10-09T15:02:38.073 に答える
0

しばらく前に別の質問のためにこれを投稿しました。.Net4.5 の async/await 機能を使用する場合は、次の単純なエコー サーバーを使用して開始する必要があります。

void Main()
{
    CancellationTokenSource cts = new CancellationTokenSource();
    TcpListener listener = new TcpListener(IPAddress.Any,6666);
    try
    {
        listener.Start();
        AcceptClientsAsync(listener, cts.Token);
        Thread.Sleep(60000); //block here to hold open the server
    }
    finally
    {
        cts.Cancel();
        listener.Stop();
    }

    cts.Cancel();
}

async Task AcceptClientsAsync(TcpListener listener, CancellationToken ct)
{
    while(!ct.IsCancellationRequested)
    {
        TcpClient client = await listener.AcceptTcpClientAsync();
        EchoAsync(client, ct);
    }

}
async Task EchoAsync(TcpClient client, CancellationToken ct)
{
    var buf = new byte[4096];
    var stream = client.GetStream();
    while(!ct.IsCancellationRequested)
    {
        var amountRead = await stream.ReadAsync(buf, 0, buf.Length, ct);
        if(amountRead == 0) break; //end of stream.
        await stream.WriteAsync(buf, 0, amountRead, ct);
    }
}
于 2012-10-09T15:05:05.793 に答える
0

System.Net.Socketクラスを使用して、クライアント/サーバー アーキテクチャを作成する必要があります。

サーバーは、3 番目のコンピューターまたはおしゃべりの 1 つにすることができます。2 番目のオプションを選択した場合、チャットを開始する最初の人は特定のポートでリッスン ソケットを実行する必要があり、2 番目の人は IP アドレスとポートを使用してそれに接続する必要があります。

于 2012-10-09T15:06:44.787 に答える