基于UDP协议的socket编程实例

与上一篇文章类似,在本文中,将以打电话的例子生动活泼的解释基于UDP协议的socket编程。

在基于UDPsocket编程中。首先介绍基本的步骤:

对于服务器端的步骤如下:

1.       加载套接字库(买手机);//WSAStartup()函数

2.       绑定到本地主机和特定的端口(与某人绑定并且要让想给你打电话的人知道)//bind()

3.       接收数据(接收电话);//recvfrom()

对于客户端的步骤:

1.       加载套接字库(买手机);//WSAStartup()

2.       发送数据(不用让别人知道你的号码,就可以给特定的人打电话)给服务器//sendto()

同样一下是一个实例://另外要注意的是要加载动态链接库Ws2_32.lib.

1.       服务器端的代码:

   #include <iostream.h>

#include <WINSOCK2.H>

void main()

{

       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 sockSrv=socket(AF_INET,SOCK_DGRAM,0);

 

       char recvBuffer[100];

       int len=100;

       SOCKADDR_IN addrSrv;

       addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);

       addrSrv.sin_family=AF_INET;

       addrSrv.sin_port=htons(6000);

 

       bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));

 

       recvfrom(sockSrv,recvBuffer,len,0,(SOCKADDR*)&addrSrv,&len);

       cout<<recvBuffer<<endl;

       closesocket(sockSrv);

       WSACleanup();

}

2.       客户端的代码:

   #include <iostream.h>

#include <WINSOCK2.H>

void main()

{

       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);

 

       char sendBuffer[100];

 

       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);

      

       int len=sizeof(SOCKADDR_IN);

       sendto(sockClient,"hello",sizeof("hello"),0,(SOCKADDR*)&addrSrv,len);

       closesocket(sockClient);

       WSACleanup();

}

posted @ 2009-11-30 15:07  luck_net  阅读(886)  评论(3编辑  收藏  举报