我想制作一个像即时通讯工具一样的程序,我已经完成但我不知道如何向特定的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.) ]
}
我想在不运行任何额外服务器软件的情况下将客户端用于客户端系统。
我可以使用哪些系统命名空间和方法来实现此目的?
答案 0 :(得分:2)
您需要查看System.Net命名空间。
如果您正在进行点对点聊天,您可能需要将消息发送到多个IP地址,而没有中央服务器,则最好使用UDP。
从您的评论中看到您没有中央服务器,我建议您至少在最初使用UDP以便快速启动。 UdpClient class是您的朋友,允许您将数据包发送到任何指定的网络地址。
您基本上可以创建一个新的UdpClient实例,将已知的端口号传递给构造函数。
然后,使用Receive方法读取该端口上的数据包。
然后,您还可以使用同一实例上的Send方法将数据包发送到网络地址。
答案 1 :(得分: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);
}
}
答案 2 :(得分:0)
您必须使用System.Net.Socket类创建客户端/服务器体系结构。
服务器可以是第三台计算机或其中一台聊天室。如果您选择第二个选项,则第一个开始聊天的人必须在特定端口上运行侦听套接字,第二个必须使用IP地址和端口连接到它。