#include "windows.h"
#include "winsock.h"
#include "iostream"
using namespace std;
#pragma comment(lib, "ws2_32.lib")
DWORD WINAPI Recv(LPVOID lParam)
{
SOCKET * sock = (SOCKET *)lParam;
char buff[512];
int len;
DWORD IP = GetIP();
SOCKADDR_IN addr;
len = sizeof(SOCKADDR);
while(1)
{
ZeroMemory(buff, 512);
recvfrom(*sock, buff, 512, 0, (SOCKADDR*)&addr, &len);
if (addr.sin_addr.S_un.S_addr != IP)
{
if(len >= 0)
cout<<buff<<endl;
}
}
return 0;
}
int main()
{
WSAData wsadata;
WORD Vesion;
char name[20];
bool nBuflen = true;
int optlen = sizeof(nBuflen);
Vesion = MAKEWORD(2, 2);
if(WSAStartup(Vesion, &wsadata))
return 1;
SOCKET sock = socket(AF_INET, SOCK_DGRAM, 0);
setsockopt(sock, SOL_SOCKET, SO_BROADCAST, (char*)&nBuflen, optlen); //设置为广播socket
SOCKADDR_IN addr;
addr.sin_addr.S_un.S_addr = INADDR_ANY;
addr.sin_family = AF_INET;
addr.sin_port = 7800;
SOCKADDR_IN addrto;
addrto.sin_addr.S_un.S_addr = INADDR_BROADCAST; // inet_addr("172.1.31.1");
addrto.sin_port = 7800;
addrto.sin_family = AF_INET;
if(SOCKET_ERROR == bind(sock, (SOCKADDR*)&addr, sizeof(SOCKADDR_IN)))
cout<<"Error!"<<endl;
HANDLE hRecv = CreateThread(NULL, 0, Recv, &sock, 0, NULL);
CloseHandle(hRecv);
cout<<"请输入您的真实姓名:"<<endl;
cin>>name;
system("cls");
fflush(stdin);
char temp[1024];
char buff[512];
while(1)
{
ZeroMemory(buff, 512);
cin.getline(buff, 512);
sprintf(temp, "%s:%s", name, buff);
if(strcmp(buff, "exit") == 0)
break;
sendto(sock, temp, 1024, 0, (SOCKADDR*)&addrto, sizeof(SOCKADDR));
}
return 0;
}
局域网聊天(UDP)
最新推荐文章于 2022-01-11 11:44:21 发布