出于某种原因,我很难从同一个套接字发送和接收数据.无论如何这里是我的客户端代码:
var client = new UdpClient();
IPEndPoint ep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 11000); // endpoint where server is listening (testing localy)
client.Connect(ep);
// send data
client.Send(new byte[] { 1, 2, 3, 4, 5 }, 5);
// then receive data
var receivedData = client.Receive(ref ep); // Exception: An existing connection was forcibly closed by the remote host
Run Code Online (Sandbox Code Playgroud)
基本上我想创建一个协议,我发送一个udp数据包,然后我期待一个响应.就像每个请求的HTTP协议一样,都有响应.如果服务器位于不同的计算机上,则此代码有效.可能存在服务器和客户端在同一台计算机上的情况.
这是服务器:
UdpClient udpServer = new UdpClient(UDP_LISTEN_PORT);
while (true)
{
var groupEP = new IPEndPoint(IPAddress.Any, 11000); // listen on any port
var data = …Run Code Online (Sandbox Code Playgroud) 这将是一个很长的,所以抓住一些咖啡/茶/ yerba.
如何告诉/强制GNU ld将一个节/符号放在输出ELF文件的特定部分?
具体来说,我不是询问符号的物理/加载地址,而是询问文件中的偏移量.
我正在尝试使用真实世界的BSD内核并使其与Multiboot兼容并由GRUB引导.为了使ELF图像与Multiboot兼容并且可以通过GRUB识别,需要将幻数(0x1BADB002)嵌入到文件的第一个8KiB中.
我指的是Multiboot 0.6.96.
由于原始内核是相当大的代码,我将使用基于OSDev wiki的Bare Bones内核的示例.由于该内核已经符合Multiboot标准,因此我将使用
extra_symbolwith值0xCAFEBABE作为我的问题的示例.
boot.s 包含:
.set CAFEBABE, 0xCAFEBABE
; ... snip ...
.section .extras
extra_symbol:
.long CAFEBABE
Run Code Online (Sandbox Code Playgroud)
.text最简单的选择是将具有该值的符号放在.text
其他任何内容之前:
.text BLOCK(4K) : ALIGN(4K)
{
*(.extras)
*(.multiboot)
*(.text)
}
Run Code Online (Sandbox Code Playgroud)
这对于示例来说很好,但是如果真正的BSD内核.text
在文件中的0x2000(8KiB)之后启动.这种方法不是一种选择.
.text?另一种选择是将整个.extras部分放在前面.text.在我的天真,我希望.text在链接器脚本之前放置这样的部分也会使它出现在输出ELF的前面:
SECTIONS
{
// ... some stuff ...
.extras : { *(.extras) }
.text BLOCK(4K) …Run Code Online (Sandbox Code Playgroud) 是否有dbg可用于Haskell或OCaml 的跟踪调试器?
非正式地说,它的printf风格调试只是更好,在运行时完全可配置.本质上,用户可以在系统运行时注册跟踪处理程序,这将在运行时支持的一组操作中对每个操作进行调用(例如,在每个函数调用/返回时,在发送/接收的每个消息上等) .这样的处理程序可以记录每个操作,这给出了系统(部分)中发生的所有步骤的良好序列.
此机制可用于记录/调试,分析系统的某些部分,但在许多情况下,仅用于发现新的(程序员未知)系统的工作方式.