社区
C++ 语言
帖子详情
Socket发送和接收广播
yuanpu10
2012-01-10 02:37:51
通过以下方法发送广播C#语言能够正常接收,JAVA也能正常接收,C++无法接收(C++接收C++可以正常接收),请各位大虾帮忙解决,小弟不胜感激,最好能提供C#发送广播C++接收的源码.谢谢!
...全文
674
14
打赏
收藏
Socket发送和接收广播
通过以下方法发送广播C#语言能够正常接收,JAVA也能正常接收,C++无法接收(C++接收C++可以正常接收),请各位大虾帮忙解决,小弟不胜感激,最好能提供C#发送广播C++接收的源码.谢谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
yuanpu10
2012-01-11
打赏
举报
回复
谢谢各位的支持 本问题已经解决确实是编码问题byte[] data = System.Text.Encoding.Unicode.GetBytes(stringData); 中Unicode改成UTF8搞定
yuanpu10
2012-01-11
打赏
举报
回复
[Quote=引用 10 楼 filwfqfe 的回复:]
先接受再初始化? 已经收到信息了你又清了,ret的返回值是0或者-1引用 9 楼 yuanpu10 的回复:
引用 8 楼 filwfqfe 的回复:
C/C++ code
receiveMessage() 中的 buf[ret] = '\0'; 什么意思?
代表初始化的意思啊,
[/Quote]
刚才DeBug结果中显示strVector 的结果是 a0b0c0通过编码后字符串C++获取有问题 不知道怎么解决
一叶之舟
2012-01-11
打赏
举报
回复
只要是UDP广播包,不管是什么语言都可以接收。
FILWFQFE
2012-01-11
打赏
举报
回复
先接受再初始化? 已经收到信息了你又清了,ret的返回值是0或者-1[Quote=引用 9 楼 yuanpu10 的回复:]
引用 8 楼 filwfqfe 的回复:
C/C++ code
receiveMessage() 中的 buf[ret] = '\0'; 什么意思?
代表初始化的意思啊,
[/Quote]
yuanpu10
2012-01-10
打赏
举报
回复
[Quote=引用 8 楼 filwfqfe 的回复:]
C/C++ code
receiveMessage() 中的 buf[ret] = '\0'; 什么意思?
[/Quote]
代表初始化的意思啊,
FILWFQFE
2012-01-10
打赏
举报
回复
receiveMessage() 中的 buf[ret] = '\0'; 什么意思?
Louistao
2012-01-10
打赏
举报
回复
java 和 C 解析字符顺序不同,是不是大端小端的问题?>
yuanpu10
2012-01-10
打赏
举报
回复
[Quote=引用 4 楼 priest334 的回复:]
估计是unicode和ansi编码的问题
[/Quote]
C++代码已贴出,请指点一下
yuanpu10
2012-01-10
打赏
举报
回复
#include "stdafx.h"
#include "Messaging.h"
#include "stdio.h"
#include "stdlib.h"
#include <atlstr.h> //解决CSString问题
#include <vector>
//#pragma comment(lib,"ws2_32.lib")//载入win32库
using namespace std;
void Messaging::buildSocket()
{
WORD wVersionRequested;
WSADATA wsaData;
// 注册socket api
wVersionRequested = MAKEWORD( 2, 2 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 )
{
printf("\"socket\" wrong version! error code is %d\n", err);
return;
}
if ( LOBYTE( wsaData.wVersion ) != 2 || HIBYTE( wsaData.wVersion ) != 2 )
{
WSACleanup( );
return;
}
// 创建socket
connect_socket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if(INVALID_SOCKET == connect_socket)
{
err = WSAGetLastError();
printf("\"socket\" error! error code is %d\n", err);
return;
}
socketAddrLen = sizeof(SOCKADDR);
sin.sin_family = AF_INET;
sin.sin_addr.s_addr = INADDR_BROADCAST;
sin.sin_port = htons(pubPort); //端口的设置
//设置该套接字为广播类型
bool bOpt = true;
setsockopt(connect_socket, SOL_SOCKET, SO_BROADCAST, (char*)&bOpt, sizeof(bOpt));
}
////绑定Socket
void Messaging::bindSocket()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 2, 2 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
return;
}
if ( LOBYTE( wsaData.wVersion ) != 2 ||
HIBYTE( wsaData.wVersion ) != 2 )
{
WSACleanup( );
return;
}
memset(&localaddr,0,sizeof(localaddr));
localaddr.sin_family = AF_INET;
localaddr.sin_addr.s_addr = 0;
localaddr.sin_port = htons(pubPort);
memset(&bcastaddr,0,sizeof(bcastaddr));
bcastaddr.sin_family = AF_INET;
bcastaddr.sin_addr.s_addr = INADDR_BROADCAST;
bcastaddr.sin_port = htons(pubPort);
sockfd = socket(AF_INET,SOCK_DGRAM,0);
bool opt = TRUE;
setsockopt(sockfd,SOL_SOCKET,SO_BROADCAST,(const char*)&opt,sizeof(opt));
bind(sockfd,(sockaddr *)&localaddr,sizeof(localaddr));
castAddrLen = sizeof(bcastaddr);
}
//发送消息
void Messaging::sendMessage(char * message)
{
int nSendSize = sendto(connect_socket, message, strlen(message), 0, (SOCKADDR*)&sin, socketAddrLen);
if(SOCKET_ERROR == nSendSize)
{
err = WSAGetLastError();
printf("\"sendto\" error!, error code is %d\n", err);
}
printf("\tsend data: %s\n", message);
return;
}
//接收消息
vector<string> Messaging::receiveMessage()
{
char buf[1024]="";
vector<string> strVector;
int ret;
//从广播地址接收消息,注意用来绑定的地址和接收消息的地址是不一样的
ret = recvfrom(sockfd,buf,1024,0,(struct sockaddr*)&localaddr,&castAddrLen);
buf[ret] = '\0';
// printf("\tpacket data: %s\n", buf);
strVector= list.splitEx(buf,"|");
return strVector;
}
CString Messaging::convert2nd(const string &date,const string &time)
{
CString sec;
sec.Format("%s",date.c_str());
vector<string> v=list.splitEx(time,":");
int hh=atoi(v[0].c_str());
int mm=atoi(v[1].c_str());
int ss=atoi(v[2].c_str());
int sum=hh*3600+mm*60+ss;
CString sumsec;
sumsec.Format("%d",sum);
sec.Append(sumsec);
return sec;
}
priest334
2012-01-10
打赏
举报
回复
估计是unicode和ansi编码的问题
yuanpu10
2012-01-10
打赏
举报
回复
忘记说了 C++也能接收 只是只能接受一个字符 例如stringData="abc"; 接收只能接受字符a
yuanpu10
2012-01-10
打赏
举报
回复
按理来说C#代码是没错的 这个代码很简单,
yuanpu10
2012-01-10
打赏
举报
回复
//Socket发送广播
public void Send()
{
Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); //只能用UDP协议发送广播,所以ProtocolType设置为UDP
IPEndPoint iep1 = new IPEndPoint(IPAddress.Broadcast, 5860);//255.255.255.255
IPEndPoint iep2 = new IPEndPoint(IPAddress.Parse("224.0.0.1"), 5860);
byte[] data = System.Text.Encoding.Unicode.GetBytes(stringData); //将发送内容转换为字节数组
sock.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1);
sock.SendTo(data, iep1);
sock.SendTo(data, iep2);
sock.Close();
}
C语言
socket
UDP
广播
的
发送
和
接收
示例
server.c通过UDP
广播
的形式向网段的指定端口
发送
广播
信息 client.c绑定到指定端口,并阻塞
接收
广播
内容然后打印出来 程序非常简单,不过有一点需要注意,那就是setsockopt()函数的使用。使用不当很可能会出问题。通过SO_REUSEADDR选项可以实现端口号的重用,SO_BROADCAST选项表示要
发送
的是
广播
信息,optval参数要给合理的初始值(这里是1),否则很可能会发
socket
UDP
广播
的
发送
和
接收
示例
网络通信基础 如果网络中两个主机上的应用程序要相互通信,其一要知道彼此的IP,其二要知道程序可监听的端口。因为同一主机上的程序使用网络是通过端口号来区分的。 UDP
Socket
的使用过程: 1. 初始化网络库 2. 创建SOCK_DGRAM类型的
Socket
。 3. 绑定套接字。 4.
发送
、
接收
数据。 5. 销毁套接字。...
iOS开发UPD
Socket
(
广播
发送
和
接收
)和TCP
Socket
2、填写相应的App Information,提交了等待审核;权限问题解决完毕,组播
广播
功能可以正常开发使用了。iOS14以后,使用组播
广播
功能需要申请权限。
SOCKET
实现
广播
(BoardCast)的
发送
和
接收
这两天很多人在问怎么样用
SOCKET
实现
广播
(BoardCast)正好我做过这方面的程序,这里用最简单的代码写一个
广播
发送
和接受的例子:////////
发送
端程序#include #include int main(int argc, char* argv[]){ WSADATA wsaData; //指向Win
Socket
信息结构的指针 SOCK
SOCKET
实现
广播
(BoardCast)的
发送
和
接收
(转)
SOCKET
实现
广播
(BoardCast)的
发送
和
接收
(转)[@more@]这两天很多人在问怎么样用
SOCKET
实现
广播
(BoardCast) 正好我做过这方面的程序,这里用最简单的代码写一个
广播
发送
和接受的例子: ///...
C++ 语言
65,212
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章