socket udp

//Server 端程序源代碼: 
#include <stdio.h> 
#include <Winsock2.h>
#pragma comment (lib, "ws2_32")  
#include <thread>  

struct sockaddr_in from; 
int fromlen =sizeof(from); 
void recvFunction(SOCKET& sockClient)  
{  
	while (true)  
	{  
		char buffer[1024]="\0"; 
		printf("waiting for message from others-------------\n"); 
		if (recvfrom(sockClient,buffer,sizeof(buffer),0,(struct sockaddr*)&from,&fromlen)!=SOCKET_ERROR) 
		{ 
			printf("Received datagram from %s--%s\n",inet_ntoa(from.sin_addr),buffer); 
			////給cilent發信息 
			sendto(sockClient,buffer,sizeof(buffer),0,(struct sockaddr*)&from,fromlen); 
		} 

	}  

}
void sendFuction(SOCKET &sockConn)  
{  
	while (true)  
	{  
	}  

} 

void main() 
{ 
	SOCKET socket1; 
	//InitWinsock(); 
	WSADATA wsaData; 
	int iErrorCode; 
	if (WSAStartup(MAKEWORD(2,1),&wsaData)) //調用Windows Sockets DLL 
	{ 
		printf("Winsock無法初始化!\n"); 
		WSACleanup(); 
		return; 
	} 
	printf("服務器開始創建SOCKET。\n"); 
	struct sockaddr_in local; 
	local.sin_family=AF_INET; 
	local.sin_port=htons(27015); ///監聽端口 
	local.sin_addr.s_addr=INADDR_ANY; ///本機 
	socket1=socket(AF_INET,SOCK_DGRAM,0); 
	bind(socket1,(struct sockaddr*)&local,sizeof(local)); 

	std::thread recvThread(recvFunction,socket1);  
	recvThread.detach();  

	std::thread sendThread(sendFuction,socket1);  
	sendThread.detach(); 

	while (1) 
	{ 
	} 
	closesocket(socket1);
	WSACleanup();    
} 

//Client端源代碼: 
#include <stdio.h> 
#include <Winsock2.h> 
#pragma comment (lib, "ws2_32")  
#include <thread>  
struct sockaddr_in server;
int len =sizeof(server); 
void recvFunction(SOCKET& sockClient)  
{  
	while (true)  
	{  
		char recvBuf[50];  
		if(recvfrom(sockClient,recvBuf,50,0,(struct sockaddr*)&server,&len) != SOCKET_ERROR)
		{
			printf("rece from server:%s\n",recvBuf); 
		}
		
	}  

}
void sendFuction(SOCKET &sockConn)  
{  
	while (true)  
	{  
		char buffer[1024]="\0"; 
		printf("input message\n"); 
		scanf("%s",buffer); 
		//     printf("%s",buffer); 
		if (strcmp(buffer,"bye")==0) 
		{ 
			printf("退出!\n"); 
			Sleep(100); 
			closesocket(sockConn); 
			break; 
		} 
		if (sendto(sockConn,buffer,sizeof(buffer),0,(struct sockaddr*)&server,len)!=SOCKET_ERROR) 
		{ 
			
		} 
	}  

} 
void main() 
{ 
	SOCKET socket1; 
	//InitWinsock(); 
	WSADATA wsaData; 
	int iErrorCode; 
	if (WSAStartup(MAKEWORD(2,1),&wsaData)) //調用Windows Sockets DLL 
	{ 
		printf("Winsock無法初始化!\n"); 
		WSACleanup(); 
		return; 
	} 
	printf("服務器開始創建SOCKET。\n"); 
	 
	
	server.sin_family=AF_INET; 
	server.sin_port=htons(27015); ///server的監聽端口 
	server.sin_addr.s_addr=inet_addr("192.168.0.148"); ///server的地址 
	socket1=socket(AF_INET,SOCK_DGRAM,0); 

	//多線程  
	std::thread recvThread(recvFunction,socket1);  
	recvThread.detach();  

	std::thread sendThread(sendFuction,socket1);  
	sendThread.detach();  

	while (1) 
	{ 
		
	} 
	closesocket(socket1);
	WSACleanup();   

}

發佈了215 篇原創文章 · 獲贊 8 · 訪問量 68萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章