0

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

$test を Base64 でエンコードしようとすると、適合し、データを送信しようとさえしません。

編集:

以下の作品。サーバーを recv の代わりに gets に変更したので、すべてをプルして、クライアントがソケットを閉じるのを待ちます。

クライアント

$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
4

2 に答える 2

1

クライアント

$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
于 2013-08-26T21:04:18.360 に答える
0

推測しかできませんが、サーバーコードに関連している可能性があります?!

 recv_length = 1024

編集:

ストリームのクローズを試すことができますが、それが問題なのでしょうか?!

$stream.write($test,0,$test.Length);
$stream.close();
$writer.flush();
于 2013-08-23T07:09:45.957 に答える