现在的位置: 首页 > 综合 > 正文

VC中的socket通讯例程(UDP协议)

2013年02月01日 ⁄ 综合 ⁄ 共 2195字 ⁄ 字号 评论关闭
 

UDP的服务器端:(UdpSrv.cpp)
 
#include <Winsock2.h>
#include <stdio.h>
#pragma comment(lib, "ws2_32.lib") 
 
void main()
{
 //初始化socket库
 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 sockSrv = socket( AF_INET , SOCK_DGRAM , 0 ) ;
 
 SOCKADDR_IN addrSrv ;
 addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY) ;
 addrSrv.sin_family = AF_INET ;
 addrSrv.sin_port = htons(4000) ;
 
 bind( sockSrv , (SOCKADDR*)&addrSrv , sizeof(SOCKADDR) ) ;
 
 char sendBuf[100] ;
 char recvBuf[100] ;
 char tempBuf[200] ;
 
 SOCKADDR_IN addrClient ;
 int len = sizeof(SOCKADDR) ;
 
 while (1)
 {
 recvfrom(sockSrv,recvBuf,100,0,(SOCKADDR*)&addrClient,&len) ;
 if ( 'q' == recvBuf[0] )
 {
   sendto(sockSrv,"q",strlen("q")+1,0,(SOCKADDR*)&addrClient,len) ;
   printf("chat end!/n") ;
   break ;
 }
 
 sprintf(tempBuf,"%s say : %s",inet_ntoa(addrClient.sin_addr),recvBuf) ;
 printf( "%s/n" , tempBuf ) ;
 printf( "Please input data:/n" ) ;
 gets( sendBuf ) ;
 sendto(sockSrv,sendBuf,strlen(sendBuf)+1,0,(SOCKADDR*)&addrClient,len) ;
 }
 
 closesocket( sockSrv ) ;
 WSACleanup() ;
}
UDP的客户端:(UdpClient.cpp)
 
#include <Winsock2.h>
#include <stdio.h>
#pragma comment(lib, "ws2_32.lib") 
 
void main()
{
 //³õʼ»¯socket¿â
 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 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(4000) ;
 
 char sendBuf[100] ;
 char recvBuf[100] ;
 char tempBuf[200] ;
 
 int len = sizeof(SOCKADDR) ;
 
 while (1)
 {
 printf("Please input data:/n");
 gets( sendBuf ) ;
 sendto( sockClient , sendBuf , strlen(sendBuf) , 0 ,
    (SOCKADDR*)&addrSrv , len ) ;
 
 recvfrom( sockClient , recvBuf , 100 , 0 , (SOCKADDR*)&addrSrv , &len ) ;
 if ( 'q' == recvBuf[0] )
 {
   sendto(sockClient , "q" , strlen("q")+1 , 0 , (SOCKADDR*)&addrSrv , len) ;
   printf("chat end!") ;
   break ;
 }
 sprintf( tempBuf , "%s say: %s/n" , inet_ntoa(addrSrv.sin_addr) , recvBuf ) ;
 printf( tempBuf ) ;
 }
 
 closesocket(sockClient) ;
 WSACleanup() ;
}
 

 

抱歉!评论已关闭.