www.pudn.com > udp.rar > udpSrv.cpp


#include  
#include "Winsock2.h" 
#pragma comment(lib,"ws2_32.Lib") 
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 sockSrv=socket(AF_INET,SOCK_DGRAM,0); 
 
		//Init Srv 
		SOCKADDR_IN addrSrv; 
		addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY); 
		addrSrv.sin_family=AF_INET; 
		addrSrv.sin_port=htons(6000); 
 
		//Binding 
		bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR)); 
 
		char recvBuf[100];//recv Buffere 
		char sendBuf[100];//send Buffere 
		char tempBuf[200];//temp Buffere 
 
		SOCKADDR_IN addrClient;//客户端地址信息 
		int len=sizeof(SOCKADDR); 
		printf("***********************************\n"); 
		printf("Welcome Using This Program!\n"); 
		printf("Note:\nYou Must Wating For Other Person\nResend Data After You Sent Data!\n"); 
		printf("You Can Sent 'q' To End This Program!\n"); 
		printf("***********************************\n"); 
		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("Disconnection!\nEnd Chat!\n"); 
				break; 
			} 
			 
			sprintf(tempBuf,"%s say: %s",inet_ntoa(addrClient.sin_addr),recvBuf); 
			printf("%s\n",tempBuf); 
 
			printf("please input data:\n"); 
			gets(sendBuf);//从键盘获取一行数据到sendBuf中 
			sendto(sockSrv,sendBuf,strlen(sendBuf)+1,0, 
				  (SOCKADDR*)&addrClient,len); 
		} 
		closesocket(sockSrv); 
		WSACleanup(); 
}