局域网聊天(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;
}

### 回答1: QT局域网聊天UDP是一种使用QT编程语言开发的局域网聊天室,其通信协议采用UDP协议。 为了实现局域网聊天室的功能,首先需要建立一个服务器和多个客户端之间的通信连接。在QT中,可以使用QUdpSocket类实现UDP的网络通信功能。服务器端首先需要创建一个QUdpSocket对象来监听指定端口,以便接收来自客户端的消息。然后,服务器需要使用bind函数将QUdpSocket对象绑定到一个指定的IP地址和端口号上。 客户端在连接服务器之前,需要先创建一个QUdpSocket对象用于发送和接收消息。客户端可以使用writeDatagram函数将消息发送给服务器端,并使用bind函数将QUdpSocket对象绑定到一个指定的端口号上,以便接收来自服务器端的回复消息。 服务器端在接收到客户端发来的消息后,可以使用readDatagram函数获取消息内容,并在回复消息时使用writeDatagram函数将回复信息发送给客户端。 在QT局域网聊天UDP中,可以通过显示聊天内容的GUI界面来实现用户之间的实时聊天。用户可以通过输入框输入自己要发送的消息,点击发送按钮后,消息将通过 UDP 协议发送给服务器端,然后服务器转发给其他在线用户。同时,服务器端接收其他用户的消息并转发给当前用户,用户可以在GUI界面看到其他用户的消息内容。 总之,QT局域网聊天UDP通过使用UDP协议和QT编程语言的特性,实现了简单的局域网聊天功能。用户可以在局域网内实时交流信息,具有便捷、高效的特点。 ### 回答2: QT局域网聊天室是一种基于User Datagram Protocol(UDP)的网络聊天应用程序。UDP是一种无连接的协议,它带有较少的开销,使其成为实现快速通信的理想选择。 QT局域网聊天室通过创建一个UDP服务器来提供聊天服务。在局域网中的每台计算机上都可以运行一个客户端应用程序,与服务器进行通信。客户端应用程序可以发送和接收消息,实现用户之间的即时聊天。 在QT局域网聊天室中,用户可以输入要发送的消息,并且可以选择向特定的用户发送消息,也可以发送给所有在线用户。使用UDP协议的优点之一是可以轻松地广播消息给所有用户,提高了用户之间信息交流的效率。 UDP协议的主要特点之一是它的开销较低,并且不保证消息的可靠性。这意味着在传输过程中,消息可能会丢失或顺序混乱。但是,对于局域网聊天室这种要求快速通信的应用程序来说,这个问题并不重要。即使消息丢失或顺序不正确,用户还是能获取大部分信息,很少会对用户体验产生重大影响。 总结来说,QT局域网聊天室使用UDP协议提供了一种快速和高效的局域网通信方式。用户可以通过发送和接收消息进行实时聊天,并且可以广播给所有用户或特定用户。尽管UDP不保证消息的可靠性,但在这种应用程序中通常不会对用户造成重大影响。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值