鱼C论坛

 找回密码
 立即注册
查看: 1735|回复: 6

[技术交流] UDP 广播

[复制链接]
发表于 2015-12-12 16:19:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

在bind 广播地址 会一直返回-1,忽略即可~

广播你懂的,局域网virus,通信必备。

服务器代码:
#include <stdio.h>
#include <windows.h>
#pragma comment(lib,"ws2_32.lib")
#define ServicPort 1447
void showerr(char * err,bool exit1)
{
        printf(err);
        if(exit1) 
        {
                getchar();
                exit(0);
        }
}
int main()
{
        WSAData wdata;
        WSAStartup(MAKEWORD(2,2),&wdata);
        SOCKET service;
        SOCKADDR_IN saddr={0};
        service = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
        int iaddrlen;
        if(service == INVALID_SOCKET)
        {
                showerr("不能创建套接字!\n",true);
                return 0;
        }
        saddr.sin_port = htons(ServicPort);
        saddr.sin_family = AF_INET;
        saddr.sin_addr.S_un.S_addr = INADDR_BROADCAST;
        iaddrlen = sizeof(SOCKADDR_IN);
        //设置该套接字为广播类型
        bool bOpt = true;
        setsockopt(service,SOL_SOCKET,SO_BROADCAST,(char *)&bOpt,sizeof(bOpt));
        int err = bind(service,(SOCKADDR * )&saddr,iaddrlen);
        while(true)
        {
                char * buffer = "Hello world!\n There is socket broadcast test !\n";

                int iret = 
                        sendto(service,buffer,strlen(buffer),0,(SOCKADDR * )&saddr,iaddrlen);

                if(iret ==  SOCKET_ERROR)
                        printf("Send failed!\n");
                else 
                        printf("Success \n");

                Sleep(500);
        }
        return 0;
}

接收器代码:
#include <stdio.h>
#include <windows.h>
#pragma comment(lib,"ws2_32.lib")
#define ServicPort 1447
void showerr(char * err,bool exit1)
{
        printf(err);
        if(exit1) 
        {
                getchar();
                exit(0);
        }
}

int main()
{
        WSAData wdata;
        WSAStartup(MAKEWORD(2,2),&wdata);
        SOCKET connect_sock;
        SOCKADDR_IN saddr={0};
        SOCKADDR_IN saddr_from={0};
        connect_sock = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
        int iaddrlen;
        if(connect_sock == INVALID_SOCKET)
        {
                showerr("不能创建套接字!\n",true);
                return 0;
        }
        saddr.sin_port = htons(ServicPort);
        saddr.sin_family = AF_INET;
        saddr.sin_addr.S_un.S_addr = 0;

        saddr_from.sin_port = htons(ServicPort);
        saddr_from.sin_family = AF_INET;
        saddr_from.sin_addr.S_un.S_addr = INADDR_BROADCAST;

        iaddrlen = sizeof(SOCKADDR_IN);
        //设置该套接字为广播类型
        bool bOpt = true;
        setsockopt(connect_sock,SOL_SOCKET,SO_BROADCAST,(char *)&bOpt,sizeof(bOpt));
        int err = bind(connect_sock,(SOCKADDR * )&saddr,iaddrlen);
        if(err != 0)
        {
                printf("%d %d\n",err,WSAGetLastError());
                showerr("绑定套接字失败!\n",true);
        }
        int count = 0;
        while(true)
        {
                char buffer[1024]={0};

                int nsize;
                nsize = recvfrom(connect_sock,buffer,1024,0,(SOCKADDR *)&saddr_from,&iaddrlen);
                if(nsize>0)
                        printf("%d : %s \n\n",count++,buffer);
                Sleep(2000);
        }
        return 0;
}

评分

参与人数 1荣誉 +10 鱼币 +10 贡献 +10 收起 理由
康小泡 + 10 + 10 + 10 热爱鱼C^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-12-12 16:34:35 | 显示全部楼层
挺好~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-12-12 16:35:52 | 显示全部楼层

因为bind一直返回-1,我以为哪里错了,调试了半个小时。。
Google后才知道,原来bind广播地址无论如何都返回-1.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-12-12 17:24:50 | 显示全部楼层
开始搞网络通信了?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-12-12 19:58:03 | 显示全部楼层

甲鱼哥,求你跟我说句话:hug:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-12-12 19:58:57 | 显示全部楼层
可是路由从不转发广播。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-12-12 20:31:38 | 显示全部楼层
Run_Feng 发表于 2015-12-12 19:58
可是路由从不转发广播。。

吓得我感觉去测试了一下,
可以的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-26 15:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表