-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 功能,这里有一个简单的 echoserver 可以帮助您入门:

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类创建客户端/服务器体系结构。

服务器可以是第三台计算机或其中一台。如果您选择第二个选项,第一个开始聊天的人必须在特定端口上运行侦听套接字,第二个必须使用 IP 地址和端口连接到它。

于 2012-10-09T15:06:44.787 回答