0

TCP ソケット経由でバイナリ ファイルを送信しようとしています。ファイルの長さは 5Mo ですが、受信したファイルは 1Mo しかありません。受信したファイルには多くの欠落部分が含まれています。理由がわかりません。バイナリ ファイルを分割しようとしました。 1Mo の 5 つの部分に分割し、最初の部分 (1 Mo) を送信しました。受信したファイルはわずか 255 です!!! 誰かが理由を説明できますか?このタイプのファイルを送信する効率的な方法はありますか?

これは私が使用しているコードです。バイナリファイルを参照する/ファイルを送信するためのソケットを開く/ファイルを送信するという3つの部分が含まれています。

private void senduimage_Click(object sender, EventArgs e)

{
string inpath = "C:\\Documents and Settings\\Bureau\\uImage";
 FileStream fs = new FileStream(inpath, FileMode.Open, FileAccess.Read);  
if (!user.clientSocket_NewSocket.Connected)
{

Socket clientSocket_NewSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
 user.clientSocket_NewSocket = clientSocket_NewSocket;
 try
  {
    System.IAsyncResult _NewSocket = user.clientSocket_NewSocket.BeginConnect(ip_address, NewSocket.Transceiver_TCP_Port, null, null);
    bool successNewSocket = _NewSocket.AsyncWaitHandle.WaitOne(2000, true);
  }
 byte[] buff = null;
 BinaryReader br = new BinaryReader(fs);
 string inpath = "C:\\Documents and Settings\\Bureau\\uImage"
 long numbytes = new FileInfo(inpath).Length;
 buff = br.ReadBytes((int)numbytes);
 user.clientSocket_NewSocket.Send(buff);
}

}

どんな助けでも大歓迎です、ありがとう:)


あなたが私に提案したファイルへの送信を試みましたが、接続されていないソケットではこの操作を実行できないという例外が表示されました。これは私が使用したコードです:

01  private void senduimage_Click(object sender, EventArgs e)
02          {
03              
06             
07              if (!user.clientSocket_NewSocket.Connected)
08              {
09   
10                  Socket clientSocket_NewSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
11                  user.clientSocket_NewSocket = clientSocket_NewSocket;
12                   
13              }
14               
15              System.IAsyncResult _NewSocket = user.clientSocket_NewSocket.BeginConnect(ip_address, NewSocket.Transceiver_TCP_Port, null, null);
16              bool successNewSocket = _NewSocket.AsyncWaitHandle.WaitOne(2000, true);
17              if (successNewSocket)
18              {
19                  string fileName = "C:\\Documents and Settings\\Bureau\\uImage";
20                  user.clientSocket_NewSocket.SendFile(fileName);
21                  user.clientSocket_NewSocket.Shutdown(SocketShutdown.Both);
22                  user.clientSocket_NewSocket.Close();
23              }

何か提案はありますか?

4

1 に答える 1

0

ソケットの SendFile() メソッドを使用するか、while ループでデータを送信してみてください。while ループでは、1KB などのデータを送信します。

于 2012-11-08T13:02:41.857 に答える