VC++编写的Socket udp通信程序

 
UDP的服务器端:(UdpSrv.cpp)
 
#i nclude "Winsock2.h"
#i nclude "stdio.h"
 
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)
 
#i nclude "Winsock2.h"
#i nclude "stdio.h"
 
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() ;
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值