建立UDP通信

    昨天晚上一時心起開始了假期這段時間學習的總結,沒有很系統的組織,只是想到一些有意義的,基礎性的東西想拿出來複習一下,這段時間每天都在寫代碼,提醒自己要注意每天的總結,卻還是落下了不少....慢慢來吧,幸好快開學了,時間相對多一些了。

    好了開始今天的總結:

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

首先從代碼開始:

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模型總結一下,一共五種,一次可能總結不完,慢慢來吧...

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章