我一直在尝试通过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 }
有什么建议吗?
答案 0 :(得分:0)
您可以使用套接字的SendFile()方法,也可以尝试在while循环中发送数据。在while循环中发送一些数据,如1KB或类似的东西。