当前位置:  技术问答>linux和unix

关于udp传输

    来源: 互联网  发布时间:2015-04-19

    本文导语:  基于原来tcp的基础上要改成udp. 我修改的如下: 但是觉得有点问题,怎么判断一个文件已经传输结束,可以关闭并打开新文件了呢? 在server端的这句判断while (recv_len > 0)应该是有问题的,应该怎么判断,跳出连接呢...

基于原来tcp的基础上要改成udp.
我修改的如下:
但是觉得有点问题,怎么判断一个文件已经传输结束,可以关闭并打开新文件了呢?
在server端的这句判断while (recv_len > 0)应该是有问题的,应该怎么判断,跳出连接呢?

client端:
fp = fopen (argv [2], "rb");
if(fp == NULL)
{
fputs ("file not found!!rnn", stdout);
}
else
{
fputs ("file transmitting ...rn", stdout);
while (feof (fp) == 0)
{
len = fread (send_buf, 1, BLOCK_SIZE, fp);
sendto (s, send_buf, len, 0, (struct sockaddr *)&sin, sizeof(sin));
}
fclose(fp);
fputs ("file transmit ok!!rnn", stdout);
}
close (s);

server端:
i=0
printf("waiting for data on port UDP %un", SERVER_PORT);
{
i++;
sprintf (filename, "recv_%d", i);
fp = fopen (filename, "wb+");
recv_len = 1;

while (recv_len > 0)
{
recv_len = recvfrom (new_s, recv_buf, recv_len, 0, (struct sockaddr *)&cli_addr, sizeof(cli_addr)); 
fwrite (recv_buf, 1, recv_len, fp);
}

fclose (fp);
close (new_s);
}
fputs ("file received ok useing udp!!rnn", stdout);

|
在server端的这行代码fwrite (recv_buf, 1, recv_len, fp);
后面添加一句:
fflush(fp);
结果就正确了.

其实,你的server端程序的逻辑是有问题的,按你的意思看是想将接收到的文件以递增序号的形式命名,而实际上你的程序是办不到的.你再好好看一看:)

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Qt:UDP:如何划分接收到的UDP包的界限
  • http走的是tcp还是udp?ssh是tcp还是udp?
  • tcp和udp套接字有何不同?在什么情况下用tcp什么情况下用udp????
  • 50求教一个菜鸟级别的UDP套接字问题,关于UDP server端只能接收一次数据的问题?在线等,一直等............
  • udp方式抓取网页
  • python网络编程之UDP通信实例(含服务器端、客户端、UDP广播例子)
  • udp socket客户端和udp服务端程序示例分享
  • TCP与UDP通信问题!
  • 请问下怎么关闭SUSE 9.1下UDP的checksum?
  • 如何判断udp端口可达
  • 关于epoll&udp的问题?
  • UDP包怎么生成啊?用什么函数??简单问题,帮个忙哈
  • IP,UDP,TCP的校验和计算
  • UDP协议在实现时有没有在发送端或者接收端设置缓冲区?
  • 服务进程收到的第一个UDP包的远端地址不对?
  • udp问题
  • 关于udp sendto时候端口选定问题
  • jme 0000:07:00.5:eht0:udp checksum error
  • udp的暂时连接
  • udp连接问题


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3