📄 udpclient.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 + -