UDP为何不能传送大文件

yj375553137 2010-09-19 11:06:43
发送端
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();
}
}
...全文
195 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
xu_2007 2010-09-19
  • 打赏
  • 举报
回复
你可以自己定义协议,控制发送和接收端,如果丢包则重发,这样的话应该没问题!
铛铛 2010-09-19
  • 打赏
  • 举报
回复
因为UDP只管发,不管对方有没有收到
byshome 2010-09-19
  • 打赏
  • 举报
回复
为何说不能发,有一个UDP写的可靠性传送协议,很好的,速度很快.
laj0600310219 2010-09-19
  • 打赏
  • 举报
回复
应该可以吧。我之前都有做过。你要的话,我可以给你参考下。

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧