c# - 如何使用 UnixDomainSocketEndPoint 在 dotnet 中创建 unix 套接字?
问题描述
我有一个用 C 编写的程序,它需要将数据发送到另一个用 C# 编写的应用程序。
有人可以展示一个关于如何在 linux 上使用UnixDomainSocketEndPoint的基本 hello world 示例吗?. 我希望 C# 应用程序成为服务器。换句话说,C 应用程序将向 C# 应用程序发送数据。如何创建一个将在 dotnet 上侦听数据的 unix 套接字(应用程序不需要回复任何内容)?
在互联网上研究时,我发现的所有东西都与单声道有关,例如这个问题: How to connect to a Unix Domain Socket in .NET Core in C#。我试过那个例子,但它没有用。此外,它没有使用 UnixDomainSocketEndPoint。
我还发现本教程https://medium.com/@goelhardik/http-connection-to-unix-socket-from-dotnet-core-in-c-21d19ef08f8a使用相同的代码。
解决方案
也许互联网上没有那么多例子,因为它比我想象的要简单。我能够在没有在互联网上进行研究的情况下回答这个问题。我应该在问之前尝试过。无论如何,这是答案:
using System;
using System.Net.Sockets;
using System.Threading.Tasks;
class Program
{
static void Main(string[] args)
{
var path = "/tmp/foo.sock";
// client
Task.Run(async () =>
{
// wait 2 seconds
await Task.Delay(2000);
using (var socket = new Socket(AddressFamily.Unix, SocketType.Stream, ProtocolType.Unspecified))
{
socket.Connect(new UnixDomainSocketEndPoint(path));
// send hello world
var dataToSend = System.Text.Encoding.UTF8.GetBytes("Hello-world!");
socket.Send(dataToSend);
}
});
// Server
{
// delete file if it exists
if (System.IO.File.Exists(path))
System.IO.File.Delete(path);
var socket = new Socket(AddressFamily.Unix, SocketType.Stream, ProtocolType.Unspecified);
socket.Bind(new UnixDomainSocketEndPoint(path));
socket.Listen(5);
Console.WriteLine("Server started waiting for client to connect...");
var s = socket.Accept();
Console.WriteLine("Client connected");
var buffer = new byte[1024];
var numberOfBytesReceived = s.Receive(buffer, 0, buffer.Length, SocketFlags.None);
var message = System.Text.Encoding.UTF8.GetString(buffer, 0, numberOfBytesReceived);
Console.WriteLine($"Received: {message}");
}
}
}
推荐阅读
- apache-spark - 在橙色数据挖掘中检索 Hive 表时出错 - Hive 表小部件
- docker - 用于 ios 的 bitbucket 管道和 docker 构建 Ionic 项目
- sharepoint - Microsoft Flow - Sharepoint“创建文件时”在子文件夹上触发
- javascript - 当用户在rails中使用AJAX调用查看帖子时如何将帖子标记为已读
- spring-boot - 使用“withSoapEnvelope”创建的 Spring WS 测试 MockWebServiceServer 响应为空
- python - 从子进程开始时出现 EOFError
- sas - SAS PROC SQL - 如何计算日期差异
- django - Django CBV:在同一个类中创建函数
- asp.net - 如何在页面上重用asp.net控件
- sql - 我怎样才能在(SQL)中解决这个查询?