通过套接字发送二进制文件

时间:2012-11-07 13:47:32

标签: c#-4.0

我一直在尝试通过TCP套接字发送二进制文件,我的文件长度是5Mo我收到的只有1Mo,收到的文件包含许多丢失的部分,我不明白为什么,我试图拆分二进制文件分为1Mo的5部分,我发送的第一部分(1 Mo)收到的文件只有255!请有人解释原因吗?是否有一种有效的方式来发送这种类型的文件?

这是我正在使用的代码,它包含三个部分:浏览二进制文件/打开套接字以发送文件/发送文件:

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              }

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

您可以使用套接字的SendFile()方法,也可以尝试在while循环中发送数据。在while循环中发送一些数据,如1KB或类似的东西。