- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试制作一个模拟数控(netcat)工具。打开文件并将其发送到 TCP 套接字。
客户端(发送者)端
procedure TForm1.SpeedButton3Click(Sender: TObject);
var Client:TTCPBlockSocket;
FS: TFileStream;
begin
Client:=TTCPBlockSocket.Create;
Client.RaiseExcept:=True;
Client.Connect('192.168.1.95','9999');
FS:=TFileStream.Create('/tmp/test_print.pdf',fmOpenRead);
FS.Position:=0;
Client.SendStream(FS);
FS.Free;
Client.CloseSocket;
Client.Free;
end;
服务器(接收方)端
nc -l 192.168.1.95 9999 > test.pdf
运行后我得到test.pdf但md5sum无效
fe2e5d86acd267ca39a9c15c456e1be0 /tmp/test_print.pdf
34d755aa81d72f525a5e691e98bed283 test.pdf
尺寸也不同
-rw-rw---- 1 user1 DomainUsers 46444 Июн 8 17:11 /tmp/test_print.pdf
-rw-r--r-- 1 user1 DomainUsers 46448 Июн 11 15:40 test.pdf
我做错了什么?我的错误在哪里?
附: test.pdf 开头多余 4 个字节 (6c,b5,00,00)
[user1@pandora6 /tmp]$ hexdump -C test.pdf | head -5
00000000 6c b5 00 00 25 50 44 46 2d 31 2e 34 0a 25 c7 ec |l...%PDF-1.4.%..|
00000010 8f a2 0a 34 20 30 20 6f 62 6a 0a 3c 3c 2f 4c 69 |...4 0 obj.<</Li|
00000020 6e 65 61 72 69 7a 65 64 20 31 2f 4c 20 34 36 34 |nearized 1/L 464|
00000030 34 34 2f 48 5b 20 34 33 39 36 38 20 31 34 32 5d |44/H[ 43968 142]|
00000040 2f 4f 20 36 2f 45 20 34 33 39 36 38 2f 4e 20 31 |/O 6/E 43968/N 1|
[user1@pandora6 /tmp]$ hexdump -C /tmp/test_print.pdf | head -5
00000000 25 50 44 46 2d 31 2e 34 0a 25 c7 ec 8f a2 0a 34 |%PDF-1.4.%.....4|
00000010 20 30 20 6f 62 6a 0a 3c 3c 2f 4c 69 6e 65 61 72 | 0 obj.<</Linear|
00000020 69 7a 65 64 20 31 2f 4c 20 34 36 34 34 34 2f 48 |ized 1/L 46444/H|
00000030 5b 20 34 33 39 36 38 20 31 34 32 5d 2f 4f 20 36 |[ 43968 142]/O 6|
00000040 2f 45 20 34 33 39 36 38 2f 4e 20 31 2f 54 20 34 |/E 43968/N 1/T 4|
最佳答案
嗯...十六进制 00 00 B5 6C(反向的额外字节)等于 46444。所以我的猜测是 TFileStream 或 SendStream 在实际数据之前发送它想要发送的字节数。
查看Synapse的代码有这样的函数:
procedure TBlockSocket.InternalSendStream(const Stream: TStream; WithSize, Indy: boolean);
SendStream 像这样调用它:
InternalSendStream(Stream, true, false);
因此 WithSize
为 true,并且流的大小在实际数据之前发送。
如果您使用SendStreamRaw,则所有内容都会发送,前面不带大小。
procedure TForm1.SpeedButton3Click(Sender: TObject);
var Client:TTCPBlockSocket;
FS: TFileStream;
begin
Client:=TTCPBlockSocket.Create;
Client.RaiseExcept:=True;
Client.Connect('192.168.1.95','9999');
FS:=TFileStream.Create('/tmp/test_print.pdf',fmOpenRead);
FS.Position:=0;
Client.SendStreamRAW(FS);
FS.Free;
Client.CloseSocket;
Client.Free;
end;
关于delphi - Lazarus/Free Pascal、Synapse 将文件发送到 TCPBlock Socket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30778703/
说我有两个文件,characters.pas和ogre.pas。食人魔是一个角色,但为了干净起见,我试图将两个文件分开。在characters.pas中,我有 unit Characters; {$m
我想要一个编程代码来打印范围之间的奇数来教学生。这里我取的范围是 1 到 10。所以我想打印 1 到 10 之间的奇数。 我写了这个代码来打印 1 到 10 之间的奇数 program printOd
关闭。这个问题是opinion-based .它目前不接受答案。 想改进这个问题?更新问题,以便 editing this post 可以用事实和引用来回答它. 4年前关闭。 Improve this
我创建了一个函数,其中包含 2 个具有相同数据类型的参数,对此我没有问题。 但是我在处理不同的数据类型时遇到了问题 这是我的代码: uses crt; function inputscore(name
我只是想知道如何在 pascal 中进行类型检查?我已经搜索了几个小时,但我找不到任何有用的东西。 例子: var number: Integer; begin write('Enter a nu
我正在实现 an assemblinker for the 16-bit DCPU来自游戏 0x10c。 有人向我建议的一种技术是使用“覆盖,就像过去在 Turbo Pascal 中一样”,以便在运行
Q1:这是什么意思:WriteLn (#$0b) ? $0b应该是十六进制,如 0x0b ,但是 # 呢?标志? 问题 2: x:=readkey; if ( x = #5) do... 是否#5意思
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 7年前关闭。 Improve t
对于在 Pascal 中返回值的函数,赋值 FunctionName := SomeVal;用来。我认为它不会像 return 那样在那个确切的地方停止函数执行在 C 中。有没有类似C的东西retur
我正在尝试在 Pascal 中创建一个类,我对声明和语法有点困惑。主要的事情是一个错误,我收到“前向声明未解决 Tetromino.Rotate(LongInt)”,我读到我需要在实现部分声明我的过程
我正在开展我的学校项目,我想使用动态(而不是静态)数组。我使用 ObjectPascal,所以我习惯了一些语法。但现在我在旧的 TurboPascal 中编程(我使用的是 Windows 版 Turb
对于这项任务,我有一个不太好的解决方案,但有人可以告诉我如何使用标准库或更优雅的方法。当前的解决方案基于这样的事实:对对象的过程的引用在内存中存储两个指针,一个指向过程代码的指针和一个指向对象的指针。
我正在运行一个 Fenuc Karel 机器人进行类作业,它使用 Pascal 的变体,但我们的机器人是在 1991-1993 年添加 random() 之前的。有谁知道如何在 Pascal 的旧 d
我正在尝试在 Pascal 中创建一个类,我对声明和语法有点困惑。主要的事情是一个错误,我收到“前向声明未解决 Tetromino.Rotate(LongInt)”,我读到我需要在实现部分声明我的过程
我认为展示问题的最简单方法是举个例子。编码: PROGRAM CONSTANTSTRING(OUTPUT); CONST C_MaxLength = 30; VAR small_str
我在 Windows 上运行 Lazarus。我真的很想制作“Beep”程序。看来你可以在 Pascal 中使用: windows.beep(300,500); 但不是在拉撒路!我可以使用另一个命令吗
我正在对一个 18 岁的 pascal 程序进行维护。为了帮助我理解一切是如何组合在一起的,我想绘制一个调用图。但是我找不到任何可以为 pascal 源绘制调用图的软件。我目前正在使用 Turbo P
我正在使用帕斯卡。我在处理读取文件时遇到问题。 我有一个带有整数的文件。我读取文件的 pascal 是: read(input, arr[i]); 如果我的文件内容是 1 2 3那么它很好,但如果它是
当分配运算符 := 时会发生什么?在 Object Pascal 中重载?我主要是指首先评估什么,更重要的是如何(如果可能)更改此顺序。这是一个让我烦恼的例子: 我声明TMyClass因此: TMyC
如何使用 writeln 在 Pascal 中打印撇号符号功能? 例子: writeln('My brother's book'); 无法工作,因为 s book没有“写”函数,所以编译器返回一个错误
我是一名优秀的程序员,十分优秀!