⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 udpclient.cpp

📁 基于VC控制台下的UDP局域网聊天程序 多线程运行
💻 CPP
字号:
#include <stdio.h>
#include <winsock2.h>
#include <time.h>
#pragma comment(lib, "ws2_32.lib")
DWORD WINAPI ThreadProc(LPVOID lpParameter );
int sendthread();
char clientIP[20];

void main()
{
	
	printf("\t------欢迎使用LanMessage------\n\n");


	printf("\t1.按下a键发起新会话\n");
	printf("\t2.回车可直接回复对方发起的会话\n\n");

	printf("\t等待局域网用户接入......\n\t");

	WORD wVersionRequested;//winsock库版本
	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; 
	}
	DWORD dwthread;    
    ::CreateThread(NULL,0,ThreadProc,(LPVOID)0,1024,&dwthread);//生成一个线程 
	if(getchar()=='a')
	{	printf("\t请输入对方局域网IP (格式 192.168.1.1)\n\n\t");
		scanf("%s",clientIP);
		sendthread();
	}
	else sendthread();

}

int sendthread()
{
	//创建套接字 UDP协议
	SOCKET sockClient=socket(AF_INET,SOCK_DGRAM,0);

	
	SOCKADDR_IN addrSrv;
	addrSrv.sin_addr.S_un.S_addr=inet_addr(clientIP);
	addrSrv.sin_family=AF_INET;
	addrSrv.sin_port=htons(6000);//端口为6000 可自由修改
	
	//绑定端口
	
	char sendBuf[100];	
	int len=sizeof(SOCKADDR);
	
	while(1)
	{	
		printf("\n\t发送消息:\n\t");
		scanf("%s",sendBuf);
		time_t timep; 
		time (&timep); 
		printf("\t%s",asctime(localtime(&timep))); 
		sendto(sockClient,sendBuf,strlen(sendBuf)+1,0,(SOCKADDR*)&addrSrv,len);
		Sleep(500);
	}
	closesocket(sockClient);
	WSACleanup();
	return 0;
}


DWORD WINAPI ThreadProc(  LPVOID lpParameter )    
{   
  
	//创建套接字 UDP协议
	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(6000); //端口为6000 可自由修改
	//绑定端口
	bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
	
	char recvBuf1[100];
	char tempBuf1[200];
	
	SOCKADDR_IN addrClient;
	int len=sizeof(SOCKADDR);
	
	//等待接受数据
	while(1)
	{	
		recvfrom(sockSrv,recvBuf1,100,0,(SOCKADDR*)&addrClient,&len);
		printf("\n\n\n------------------------------------\n");
		time_t timep1; 
		time (&timep1); 
		printf("\t%s",asctime(localtime(&timep1))); 
		sprintf(tempBuf1,"\t用户%s说:\n\t%s",inet_ntoa(addrClient.sin_addr),recvBuf1);
		memcpy(clientIP,inet_ntoa(addrClient.sin_addr),20);
		printf("%s\n",tempBuf1);
		printf("------------------------------------\n\n");
		
	}
	//关闭套接字
	closesocket(sockSrv);
	WSACleanup();

}   

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -