问题描述
我在这里的第一个问题.我是这种编程的新手,我只编写过 .NET 网站和表单.
My first question here. I am new to this kind of programming, and i've only programmed .NET web sites and forms.
现在,我工作的公司要求我制作一个 ActiveX 组件,它侦听 UDP 消息并将它们转换为事件.
Now, the company I work at, asks me to make an ActiveX component, that listens to UDP messages, and turns them into events.
UDP 消息是从 Avaya 系统发送的,所以我被告知要测试我的 ActiveX,首先我需要创建一个只发送 UDP 的应用程序(只有一个发送预定义 UDP 字符串的按钮).然后创建侦听器套接字,普通的 C# 应用程序,它将从测试应用程序中获取那些传输的 UDP 字符串.两个应用都可以在同一台机器上运行.
The UDP msgs are send from Avaya system, so i was told that to test my ActiveX, at first I need to create an app, that only sends UDP (only one button that sends pre-defined UDP string). And then create listener socket, ordinary C# app, that will get those transmitted UDP string from the tests app. Both apps will work on the same machine.
稍后,当我得到这个工作时,我需要让监听器成为一个 ActiveX 组件,但首先要做的事情.
Later, when i get this working, i need to make the listener an ActiveX component, but first things first.
我想知道是否有任何关于此的好的教程,以及如何开始的任何想法?我很抱歉我的无知,但我真的很陌生,我真的没有时间学习这个,因为它必须在 2 周内完成.
I need to know if there are any good tutorials about this, and any idea on how to start? I am sorry for my ignorance, but i am really new on this and i don't really have any time to learn this since it has to be done in 2 weeks.
提前致谢.
我设法创建了 2 个简单的控制台应用程序,并且成功地在它们之间发送了 UDP 消息.发送方仅用于测试,现在我需要重新制作接收方以获取 UDP 消息并将其翻译"为事件.最后,让它成为一个 ActiveX 控件...
edit: I managed to create 2 simple console applications, and was sending UDP messages between them successfully. The sender will be only for testing, and now I need to re-make my receiver to get the UDP message and 'translate' it to events. And lastly, to make it an ActiveX control...
推荐答案
简单的服务端和客户端:
Simple server and client:
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 客户端和服务器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!