udp不建立连接怎么通信(UDP需要建立连接吗)

      最后更新:2023-12-14 05:04

      java 中,udp 里面的datagramsocket需不需要connect之后才能通信?

      不需要,udp是无连接的协议,在通信前不需要建立连接,这个函数基本上用不到。
      java 中,udp 里面的datagramsocket需不需要connect之后才能通信?

      为什么UDP提供一种无连接服务

      UDP的特点: UDP协议使用IP层提供的服务把从应用层得到的数据从一台主机的某个应用程序传给网络上另一台主机上的某一个应用程序。UDP协议有如下的特点:1、UDP传送数据前并不与对方建立连接,即UDP是无连接的,在传输数据前,发送方和接收方相互交换信息使双方同步。2、UDP不对收到的数据进行排序,在UDP报文的首部中并没有关于数据顺序的信息(如TCP所采用的序号),而且报文不一定按顺序到达的,所以接收端无从排起。3、UDP对接收到的数据报不发送确认信号,发送端不知道数据是否被正确接收,也不会重发数据。4、UDP传送数据较TCP快速,系统开销也少。######################################举个例子,有连接的服务是这样的,我要发个东西给你,我先喊你一声,然后你听到了,然后回答我,说我听到了,传过来吧,然后我把东西传过去无连接的是:我直接把东西传过去你问的不大好。我觉得你可以问,为什么它是不可靠的,因为它是无连接的##################没有为什么是无连接的服务,这个是其特性,没有为什么。所谓连接,是数据传送前的通信,如TCP/ip的三次握手一样 不知说了这么多,你明白了没有 ?
      为什么UDP提供一种无连接服务

      udp是否不连接就不能通数据?数据不会发在网络上

      建议你这样理解: TCP就像电话,首先要拨号来建立连接,需要等对方接通以后,才能通话。--所以TCP需要和对端把连接建立起来,才允许发送数据给对方。UDP就像邮寄,并不管对方的地址是否有效,是否有人在家,直接把信放到邮筒就行了。 --所以UDP是没有连接的,发送方根本不管对端的情况,就直接发送了。
      udp是否不连接就不能通数据?数据不会发在网络上

      如何利用CAsyncSocket类实现UDP通信

      UDP通信通常被称为无连接通信,这是因为它不需要建立连接,发送端向网络抛送带有地址信息的数据包,数据包在网络中经过一定的路由规则到达接收段,被接收端接收。UDP也可以用来实现网络组播和广播。在MFC中,类CAsyncSocket对winsock中的函数进行了最简单的封装,但使得建立UDP通信的过程变得更为直观和方便。 CAsyncSocket类的主要函数如下: BOOL CAsyncSocket::Create( UINT nSocketPort = 0, int nSocketType = SOCK_STREAM, long lEvent = FD_READ | FD_WRITE | FD_OOB | FD_ACCEPT | FD_CONNECT | FD_CLOSE, LPCTSTR lpszSocketAddress = NULL );用于创建一个本地套接口,其中nSocketPort为使用的端口号,为零则表示由系统自动选择,通常在客户端都使用这个选择。nSocketType为使用的协议族,SOCK_STREAM表明使用有连接的服务,SOCK_DGRAM表明使用无连接的数据报服务。lpszSocketAddress为本地的IP地址,可以使用点分法表示如10.1.1.3。eg:Create(myPort,SOCK_DGRAM,NULL)BOOL CAsyncSocket::Bind( UINT nSocketPort, LPCTSTR lpszSocketAddress = NULL )作为等待连接方时产生一个网络半关联,或者是使用UDP协议时产生一个网络半关联。eg:Bind(myPort,myAddr)void CAsyncSocket::Close( );关闭套接口。int CAsyncSocket::SendTo( const void* lpBuf, int nBufLen, UINT nHostPort, LPCTSTR lpszHostAddress = NULL, int nFlags = 0 )int CAsyncSocket::ReceiveFrom( void* lpBuf, int nBufLen, CString& rSocketAddress, UINT& rSocketPort, int nFlags = 0 );对于无连接通信发送和接收数据,需要指明对方的IP地址和端口号,nFlags为标记位,双方需要指明相同的标记。eg:iSend=m_sockSend.SendTo(buff,BLOCKLENGTH,5801,m_Addr,0)其返回值表示成功发送或接收的字节数,若返回值<0,可以用GetLastErr()察看错误种类。利用这几个函数就可以方便的利用网络发送和接收UDP包了。在有选项IEvent为FD_READ时,如果有数据到来,程序自动调用OnReceive(int nErrorCode),所以也可以通过重载OnReceive(),在其中使用ReceiveFrom()来接收数据,并添加一些用户定义的对数据的操作。 CSocket类是对CAsyncSocket类的继承,与后者的使用方法类似,比较大的不同在于CSocket是同步执行的,即如果前面的操作没有完成的话,后面的操作不会进行下去,所以它有自己的堵塞策略和处理函数,而CAsyncSocket是异步执行的,每调用一次接受或发送函数都会执行一次,而不关心前面的数据是否已经到达。
      如何利用CAsyncSocket类实现UDP通信

      用UDP进行通信要连接网络吗?

      当然需要!UDP面向不连接是说,在数据传输过程中,不建立固定的端到端连接,而是数据包在传输过程中随机选择可用网络线路进行传输,以到达目的地,实现通信过程!不连接网络是无法进行数据传输的,也就无法通信。
      用UDP进行通信要连接网络吗?

      本文由 在线网速测试 整理编辑,转载请注明出处。

          热门文章

          文章分类