局域网聊天(UDP)

#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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值