gpt4 book ai didi

C# UDP Socket 客户端和服务器

转载 作者:可可西里 更新时间:2023-11-01 08:50:53 24 4
gpt4 key购买 nike

我的第一个问题。我是这种编程的新手,我只编写过 .NET 网站和表单。

现在,我工作的公司要我制作一个 ActiveX 组件,用于监听 UDP 消息,并将它们转化为事件。

UDP 消息是从 Avaya 系统发送的,所以我被告知要测试我的 ActiveX,首先我需要创建一个应用程序,它只发送 UDP(只有一个按钮发送预定义的 UDP 字符串)。然后创建监听器套接字,普通的 C# 应用程序,它将从测试应用程序获取那些传输的 UDP 字符串。这两个应用程序将在同一台机器上运行。

稍后,当我开始工作时,我需要让监听器成为一个 ActiveX 组件,但首先要做的是。

我想知道是否有关于此的任何好的教程,以及关于如何开始的任何想法?很抱歉我的无知,但我在这方面真的很陌生,我真的没有时间学习它,因为它必须在 2 周内完成。

提前致谢。

编辑:我设法创建了 2 个简单的控制台应用程序,并成功地在它们之间发送了 UDP 消息。发送方将仅用于测试,现在我需要重新制作我的接收方以获取 UDP 消息并将其“翻译”为事件。最后,使其成为 ActiveX 控件...

最佳答案

简单的服务器和客户端:

public struct Received
{
public IPEndPoint Sender;
public string Message;
}

abstract class UdpBase
{
protected UdpClient Client;

protected UdpBase()
{
Client = new UdpClient();
}

public async Task<Received> Receive()
{
var result = await Client.ReceiveAsync();
return new Received()
{
Message = Encoding.ASCII.GetString(result.Buffer, 0, result.Buffer.Length),
Sender = result.RemoteEndPoint
};
}
}

//Server
class UdpListener : UdpBase
{
private IPEndPoint _listenOn;

public UdpListener() : this(new IPEndPoint(IPAddress.Any,32123))
{
}

public UdpListener(IPEndPoint endpoint)
{
_listenOn = endpoint;
Client = new UdpClient(_listenOn);
}

public void Reply(string message,IPEndPoint endpoint)
{
var datagram = Encoding.ASCII.GetBytes(message);
Client.Send(datagram, datagram.Length,endpoint);
}

}

//Client
class UdpUser : UdpBase
{
private UdpUser(){}

public static UdpUser ConnectTo(string hostname, int port)
{
var connection = new UdpUser();
connection.Client.Connect(hostname, port);
return connection;
}

public void Send(string message)
{
var datagram = Encoding.ASCII.GetBytes(message);
Client.Send(datagram, datagram.Length);
}

}

class Program
{
static void Main(string[] args)
{
//create a new server
var server = new UdpListener();

//start listening for messages and copy the messages back to the client
Task.Factory.StartNew(async () => {
while (true)
{
var received = await server.Receive();
server.Reply("copy " + received.Message, received.Sender);
if (received.Message == "quit")
break;
}
});

//create a new client
var client = UdpUser.ConnectTo("127.0.0.1", 32123);

//wait for reply messages from server and send them to console
Task.Factory.StartNew(async () => {
while (true)
{
try
{
var received = await client.Receive();
Console.WriteLine(received.Message);
if (received.Message.Contains("quit"))
break;
}
catch (Exception ex)
{
Debug.Write(ex);
}
}
});

//type ahead :-)
string read;
do
{
read = Console.ReadLine();
client.Send(read);
} while (read != "quit");
}
}

关于C# UDP Socket 客户端和服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19786668/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com