建立UDP通信

来源:互联网 发布:淘宝如何取消延长收货 编辑:程序博客网 时间:2024/06/07 04:13

    昨天晚上一时心起开始了假期这段时间学习的总结,没有很系统的组织,只是想到一些有意义的,基础性的东西想拿出来复习一下,这段时间每天都在写代码,提醒自己要注意每天的总结,却还是落下了不少....慢慢来吧,幸好快开学了,时间相对多一些了。

    好了开始今天的总结:

 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

首先从代码开始:

Server端:

  1. //初始化Socket版本Winsock2.2
  2. WSADATA wsaData;
  3. WORD wVersion = MAKEWORD(2,2);
  4. int err = WSAStartup(wVersion,&wsaData);
  5. if(err != 0)
  6.    return FALSE;
  7. //填充本地主机地址
  8. SOCKADDR_IN addrSer;
  9. memset(&addrSer,0,sizeof(addrSer));
  10. addrSer.sin_family = AF_INET;
  11. addrSer.sin_port = htons(m_nPort);
  12. addrSer.sin_addr.s_addr = inet_addr("10.1.17.212");
  13. //建立UDP套接字
  14. m_Listen =socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
  15. if (m_Listen == SOCKET_ERROR)
  16.    return ;
  17. //绑定本地地址
  18. if (bind(m_Listen,(SOCKADDR*)&addrSer,sizeof(SOCKADDR)) != 0)
  19.    return;

接下来建立循环等待用户发送信息:

  1. TCHAR szBuf[MAX_PATH] = {0};
  2. while(1)
  3. {
  4.    int nRecv = recvfrom(sock,(char*)szChat,
  5.                     MAX_PATH*sizeof(TCHAR),
  6.                     0,
  7.                     (SOCKADDR*)&m_addrClient,
  8.                     &len);
  9.    //SetWindowText显示到社会分配或控件...
  10. }

Client:      

  1. //..初始socket版本略
  2. SOCKADDR_IN addrSer,addrClient;
  3. //初始化Server地址
  4. memset(&addrSer,0,sizeof(addrSer));
  5. addrSer.sin_family = AF_INET;
  6. addrSer.sin_port = htons(m_sPort);
  7. addrSer.sin_addr.s_addr = inet_addr(addrArr);
  8. //建立UDP套接字
  9. SOCKET m_Client = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
  10. //由于UDP不需建立连接,只需知道对方地址就能通信(通信是不安全的),所以直接发送信息
  11. TCHAR szBuf[MAX_PATH] = {_T("Hello!")};
  12. while(1)
  13. {
  14.    //发送信息关键字为sendto,接收为recvfrom
  15.    sendto(m_Client,(char*)szBuf,
  16.          MAX_PATH*sizeof(TCHAR),
  17.          0,(SOCKADDR*)&addrSer,
  18.          sizeof(SOCKADDR));
  19.    //显示内容到窗体...
  20. }

      由于现在所写的程序都是阻塞的,所心建议在调试下一步一步地体会信息传送过程。事实上,调试程序教会了我很多书本上学不到的东西,有的过程得自己去摸索才能真正体会。

    总结一下:TCP和UDP的主要区别:

    1.建立套接字

       socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);      //TCP

       socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);      //UDP

    2.建立连接过程:

      TCP建立连接过程服务端需要把本地地址bind以后监听listen,然后是accept等待用户连接(accept是阻塞的),客房端则需要bind服务端地址,然后connect请求建立连接,建立好后双方就可以通信。

     而UDP建立连接过程则简单了许多,首先是服务端,仅需要与本地绑定,就可以等待接收信息。客户端则只需与服务端地址绑定,就可以向服务端发送信息。

     通过通信过程的建立可以看出,TCP稳定安全适合性能要求较高的连接通信,而UDP相对来说就没有安全保障,对于事件处理比TCP少了许多,不过在局域网内很多都是通过UDP来建立聊天功能的。它只管发向对方,而不在乎传送成功与否。而TCP则能保证信息发送到位,因此常用于文件传输。

     好了今天就写到这里,明天我想把常用的几种IO模型总结一下,一共五种,一次可能总结不完,慢慢来吧...