如下的设置为何广播数据接受不到呢,采用CSOCKET

babyQ 2007-02-13 05:28:11
void CYtServerDlg::OnBtn()
{
CServerSocket* m_SendSocket;
char *tmp;
tmp=_T("测试运行中!");

m_SendSocket=new CServerSocket(this);
m_SendSocket->Create(2331,SOCK_DGRAM);

int iValue=1;
int iLen=sizeof(iValue);
m_SendSocket->SetSockOpt(SO_BROADCAST, (char*)&iValue,iLen);
//m_SendSocket->SendTo( tmp,30,50001,"127.0.0.1");
m_SendSocket->SendTo( tmp,30,50001,"255.255.255.255");
m_SendSocket->Close();

}
...全文
471 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
iec 2007-02-25
  • 打赏
  • 举报
回复
mk
xuwedo2003 2007-02-16
  • 打赏
  • 举报
回复
不知道为什么,学习一下。
双杯献酒 2007-02-14
  • 打赏
  • 举报
回复
估计发送方不能new,发送后立刻Close (对了,没看见你delete)
我尝试把m_send放到发送函数做成局部变量,就无法收到数据
双杯献酒 2007-02-14
  • 打赏
  • 举报
回复
我刚刚做了个.
对话框程序.

(1)在StdAfx.h添加
#include <Afxsock.h>

(2)在CxxxApp::InitInstance()添加
if(!AfxSocketInit())
{
AfxMessageBox("初始化SOCKET库失败",MB_OK| MB_ICONSTOP);
}

(3)重载接受SOCKET的OnRecieve()
void CRecvSocket::OnReceive(int nErrorCode)
{
BYTE buf[1024];
int nBufLen = 1024;
CString addr;
UINT nPort = 0;
ReceiveFrom(buf,nBufLen,addr,nPort);
CSocket::OnReceive(nErrorCode);
}

(4)在CxxDlg定义发送和接受Socket
CSocket m_send;
CRecvSocket m_recv;

(5)在CxxxDlg::OnInitDialog()初始化
BYTE bB = TRUE;
m_send.Create(0,SOCK_DGRAM);
m_send.SetSockOpt(SO_BROADCAST,&bB,sizeof(bB));
m_recv.Create(3456,SOCK_DGRAM);
m_recv.SetSockOpt(SO_BROADCAST,&bB,sizeof(bB));

(6)发送
char buf[128] = "Hello";
m_send.SendTo(buf,strlen(buf)+1,3456,"255.255.255.255");

(7)在CRecvSocket::OnReceive(int nErrorCode)自动被调用,
接受到数据.
babyQ 2007-02-14
  • 打赏
  • 举报
回复
也可以,发来看看吧,应该是类似的,我参考下.谢谢你了.
ouyh12345 2007-02-14
  • 打赏
  • 举报
回复
呵呵,有多播的例子,要不?
babyQ 2007-02-14
  • 打赏
  • 举报
回复
musz@163.com
babyQ 2007-02-14
  • 打赏
  • 举报
回复
to :ouyh12345()
你能发个MFC下用CAsyncSocket类广播的例子吗?
在这先谢过了.
babyQ 2007-02-14
  • 打赏
  • 举报
回复
收的是用另一个SOCKET
双杯献酒 2007-02-14
  • 打赏
  • 举报
回复
我前两天也做了这个,接受端也要
SetSockOpt(SO_BROADCAST, (char*)&iValue,iLen);
只不过我用的是
BYTE iValue=1;
BYTE iLen=sizeof(iValue);
ouyh12345 2007-02-14
  • 打赏
  • 举报
回复
收的时候用的是m_SendSocket吗?
如果是的话,当然不能关了.
babyQ 2007-02-14
  • 打赏
  • 举报
回复
发送端 由m_SendSocket->SendTo( tmp,30,50001,"255.255.255.255");
改为
m_SendSocket->SendTo( tmp,30,50001,"127.0.0.1");
接收端是可以收到的,但是按上面设置广播方式后就不可以了.
babyQ 2007-02-14
  • 打赏
  • 举报
回复
我用的UDP,所以发完就关了.难道这里有问题?
ouyh12345 2007-02-14
  • 打赏
  • 举报
回复
为什么要在sendto后
m_SendSocket->Close();
babyQ 2007-02-14
  • 打赏
  • 举报
回复
to:iicup(双杯献酒)
1:这步我改过了
2:接收端如上
3:发送端每步返回值都正确.

fishly_0 2007-02-14
  • 打赏
  • 举报
回复
你用getsockopt看看 ,设置SO_BROADCAST成功了没有
babyQ 2007-02-14
  • 打赏
  • 举报
回复
void CServerSocket::OnReceive(int nErrorCode)
{
char buff[256];
int ret=0;
ret=Receive(buff,256);
if(ret==ERROR)
{
TRACE("ERROR!");
}
else
{
m_pDlg->SetList(buff);
}

class CAsyncSocket::OnReceive(nErrorCode);
}

这是我的接受端函数
babyQ 2007-02-14
  • 打赏
  • 举报
回复
m_SendSocket->SetSockOpt(SO_BROADCAST, (char*)&iValue,iLen);

这个,我设置了.
subtop 2007-02-14
  • 打赏
  • 举报
回复
没有设置soket选项?好像是setsockoption之类的函数
双杯献酒 2007-02-13
  • 打赏
  • 举报
回复
(1)对SendSocket,
不要用
m_SendSocket->Create(2331,SOCK_DGRAM);
而要用
m_SendSocket->Create(0,SOCK_DGRAM);
(2)你的接收端怎么做的?会不会有问题?
(3)你最好没步都检查下返回值,看有无出错,
如果出错,可以用GetLastError取错误代码
加载更多回复(1)

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧