UDP为何不能传送大文件
发送端
private void Func_SendFile(OpenFileDialog file_Sendfile)
{
string ipadds = "";
if (lsb_iplist.Text.Equals(ipaddstr) || lsb_iplist.Text.Equals(""))
{
ipadds = ipaddstr;
}
else
{
ipadds = lsb_iplist.Text;
}
IPEndPoint sender = new IPEndPoint(IPAddress.Parse(ipadds), 9051);//定义要发送的计算机的地址
Socket newsock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);//定义一个Socke
EndPoint Remote = (EndPoint)(sender);
FileStream filestr = new FileStream(file_Sendfile.FileName, FileMode.Open,FileAccess.Read);
byte[] buffer = new byte[size];
int hasRead = 0;
long lostlen = filestr.Length;
while (lostlen > 0)
{
if (lostlen < size)
{
buffer = new byte[lostlen];
hasRead = filestr.Read(buffer, 0, buffer.Length);
}
else
{
buffer = new byte[size];
hasRead = filestr.Read(buffer, 0, buffer.Length);
}
newsock.SendTo(buffer, buffer.Length, SocketFlags.None, Remote);
lostlen -= hasRead;
}
filestr.Flush();
filestr.Close();
}
接受端
public void func_RecvFileInfo()
{
IPHostEntry ihe = Dns.GetHostEntry(Dns.GetHostName());
ipaddstr = ihe.AddressList[0].ToString();
Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
IPEndPoint sender = new IPEndPoint(ihe.AddressList[0], 9051);
EndPoint Remote = (EndPoint)sender;
server.Bind(Remote);
byte[] data = new byte[size];
while (true)//读取数据
{
int recv = server.ReceiveFrom(data, ref Remote);//从Remote接受数据
string strFlieinfo = Encoding.Default.GetString(data, 0, recv);
long filesize = long.Parse(strFlieinfo.Split(',')[1]);
FileStream filestr = new FileStream("D:\\" + strFlieinfo.Split(',')[0], FileMode.Create);
int hasRead = 0;
long leg = filesize;
while (leg > 0)
{
if (leg < size)
{
data = new byte[leg];
hasRead = server.ReceiveFrom(data, ref Remote);
}
else
{
data = new byte[size];
hasRead = server.ReceiveFrom(data, ref Remote);//从Remote接受数据
}
filestr.Write(data, 0, data.Length);
leg -= hasRead;
}
filestr.Flush();
filestr.Close();
}
}