?? 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 + -