面向UDP的無連接的C++網絡編程

面向無連接的UDP網路編程與TCP相比不用listen監聽,不需要accp接受客戶端請求

(1)服務器端程序

#include<WinSock2.h>
#include<stdio.h>
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//客戶端程序,向服務器端發送請求//
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void main()
{
    WORD wVersionRequested;
    WSADATA wsaData;
    int err;
    wVersionRequested=MAKEWORD(1,1);
    err=WSAStartup(wVersionRequested,&wsaData);
    if(err!=0)
    {
        return;
    }
    if(LOBYTE(wsaData.wVersion)!=1||HIBYTE(wsaData.wVersion)!=1)
    {
        WSACleanup();
        return;
    }
//以上部分是初始化部分,打開SOCKET庫
    SOCKET socketClient=socket(AF_INET,SOCK_STREAM,0);
    SOCKADDR_IN addrSrv;
    addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
    addrSrv.sin_family=AF_INET;
    addrSrv.sin_port=htons(6000);//設置要請求的服務器的地址及端口號
connect(socketClient,(sockaddr*)&addrSrv,sizeof(SOCKADDR));//建立連接請求
    char recvBuf[100];
    recv(socketClient,recvBuf,100,0);//接收服務器的信息
    printf("%s\n",recvBuf);
    send(socketClient,"this is zhangsan",strlen("this is zhangsan")+1,0);//像服務器發送信息
    closesocket(socketClient);//關閉套接字
    WSACleanup();//關閉WSA
}

(2)客戶端程序

#include<winsock2.h>
#include<stdio.h>
////////////////////////////////////////////////////////////////////////////////////////////////////
//基於UDP的面向無連接的客戶端程序//
///////////////////////////////////////////////////////////////////////////////////////////////////
void main()
{
/*用WSASTARTUP來啓動有關socket的動態鏈接庫*/
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 2, 2 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
return;
}
if ( LOBYTE( wsaData.wVersion ) != 2 ||
        HIBYTE( wsaData.wVersion ) != 2 ) {
  WSACleanup( );
  return;
}
SOCKET sockClient=socket(AF_INET,SOCK_DGRAM,0);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000);//設置要請求的服務器的 IP地址及端口信息
sendto(sockClient,"HELLO WORLD",sizeof("HELLO WORLD")+1,0,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
closesocket(sockClient);//關閉套接字
WSACleanup();//關係WSA
}

關於具體的UDP和TCP的區別讀者可以結合上一篇文章自己總結

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