Powershell TCP发送整个文件
本文关键字:文件 TCP Powershell | 更新日期: 2023-09-27 18:28:40
我试图通过TCP套接字发送一个文件,但它只发送了前1024个字节,我试图查看c#代码,但无法解决。如果有帮助的话,这个文件是二进制格式的。有人能告诉我缺少什么吗?
客户端
$test=[io.file]::ReadAllBytes("c:'test");
$socket = New-Object net.sockets.tcpclient('192.168.1.202',8080);
$stream = $socket.GetStream();
$stream.write($test,0,$test.Length);
$writer.flush();
$socket.close()
服务器
#!/usr/bin/env ruby
require 'socket'
begin
server = TCPServer.open(8080)
client = server.accept
recv_length = 1024
out_put = ''
while (tmp = client.recv(recv_length))
out_put += tmp
break if tmp.length < recv_length
end
File.open("test.txt",'w') {|f| f.write(out_put)}
server.close
end
旁注:如果我尝试Base64编码$test,它是合适的,甚至没有尝试发送任何数据。
编辑:
以下有效。我把服务器改成了gets,而不是recv,现在它只是提取所有内容,等待客户端关闭套接字。
客户端
$test=[System.Convert]::ToBase64String([io.file]::ReadAllBytes("c:'test"));
$socket = New-Object net.sockets.tcpclient('172.26.4.26',8080);
$stream = $socket.GetStream();
$writer = new-object System.IO.StreamWriter($stream);
$buffer = new-object System.Byte[] 1024;
$writer.WriteLine($test);
$socket.close()
服务器
#!/usr/bin/env ruby
require 'socket'
require 'base64'
begin
server = TCPServer.open(8080)
client = server.accept
out_put = client.gets()
File.open("test","w") {|f| f.write(Base64.decode64(out_put))}
end
客户端
$test=[System.Convert]::ToBase64String([io.file]::ReadAllBytes("c:'test"));
$socket = New-Object net.sockets.tcpclient('172.26.4.26',8080);
$stream = $socket.GetStream();
$writer = new-object System.IO.StreamWriter($stream);
$buffer = new-object System.Byte[] 1024;
$writer.WriteLine($test);
$socket.close()
服务器
#!/usr/bin/env ruby
require 'socket'
require 'base64'
begin
server = TCPServer.open(8080)
client = server.accept
out_put = client.gets()
File.open("test","w") {|f| f.write(Base64.decode64(out_put))}
end
我只能猜测,但可能与服务器代码有关?!
recv_length = 1024
编辑:
你可以尝试关闭流,也许这就是问题所在?!
$stream.write($test,0,$test.Length);
$stream.close();
$writer.flush();