手头的任务是这样:
要求本机从网口接收数据,然后从另一网口发送出去,接收与发送都采用udp协议,我参考了tftp协议,做了这样的程序:
本机接收上位机部分:1.上位机A向本机B发出写请求,端口为69
2. B机向A机发出应答,块号为0,
3.此时连接建立,数据分成以定长512字节的数据包传输。数据包依次编号,B接收到数据包后向A发确认,A发出下一个数据包以前必须得到B对上一个数据包的确认。如果错误包丢失,则使用超时机制。如果数据包在传输过程中丢失,发出方会在超时后重新传输最后一个未被确认的数据包。
可是师兄说我的程序是tcp ip的,不合要求,要写udp 协议的,广播的?
我晕的很,我的程序中没有用connect(),listen()建立连接,难道不是面向无连接的么?到底什么样的才是udp协议啊?
我还看到这样的话:“TFTP(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,它基于UDP协议而实现”,TCP/IP协议族中的协议怎么能基于UDP实现呢?各位大师,帮帮我吧!
要求本机从网口接收数据,然后从另一网口发送出去,接收与发送都采用udp协议,我参考了tftp协议,做了这样的程序:
本机接收上位机部分:1.上位机A向本机B发出写请求,端口为69
2. B机向A机发出应答,块号为0,
3.此时连接建立,数据分成以定长512字节的数据包传输。数据包依次编号,B接收到数据包后向A发确认,A发出下一个数据包以前必须得到B对上一个数据包的确认。如果错误包丢失,则使用超时机制。如果数据包在传输过程中丢失,发出方会在超时后重新传输最后一个未被确认的数据包。
可是师兄说我的程序是tcp ip的,不合要求,要写udp 协议的,广播的?
我晕的很,我的程序中没有用connect(),listen()建立连接,难道不是面向无连接的么?到底什么样的才是udp协议啊?
我还看到这样的话:“TFTP(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,它基于UDP协议而实现”,TCP/IP协议族中的协议怎么能基于UDP实现呢?各位大师,帮帮我吧!
应该用socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)创建UDP的socket。
纠正一个概念,所谓的TCP/IP协议族,包括了IP/TCP/UDP等协议,不要把TCP/IP协议跟UDP分裂开来。
bind
sendto
recvfrom
close
调用这几种接口可以了,你应该怀疑你师兄的话的正确性,呵呵
我的程序是这样的: m_psocket->Create(2330, SOCK_DGRAM);
m_psocket->SendTo(sendbuf, len, port, ip);
ret = m_psocket->ReceiveFrom(recvbuf, 1024, ip, port);对吗?
另外是你师兄的意思是,让你发UDP广播包,不是点到点的UDP!我估计是你理解师兄意图有误!PS:晚上叫上师兄一块吃个饭,请教一下!
还有另外的一个问题,是关于tftp的,我再开另一帖请教吧。
1、UDP是无面向连接的,也就是发送时他是不会去理会接收方是否能够接收数据。而TCP是面向连接,是可靠的,也就是采取三次握手的方式来保证数据报的可靠传输。
2、分清楚了UDP和TCP都是传输层上的协议,那么,为了保证UDP在传输数据包时也能够可靠,就得靠应用层了,而你说的TFTP就是应用层的协议,而且是专门针对的是UDP传输数据时编写的协议。他是在应用层来保证传输数据的可靠性。那么只要是你在传输层使用的是UDP协议,那么他就是UDP传输,不会因为自应用层采取和TCP类似方式就变成了TCP,所以,你师兄理解有问题,把这话大胆的告诉你师兄,其实师兄说的不一定是对的,敢于怀疑