问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

udp socket 关于在一个程序里实现发送和接收

发布网友 发布时间:2022-04-27 07:06

我来回答

1个回答

热心网友 时间:2022-05-10 07:31

发送程序Sender.cpp:
#include
#include
#include
#include
using namespace std;
//创建新的套接字之前需要调用一个引入Ws2_32.dll库的函数,否则服务器和客户端连接不上
#pragma comment(lib,"ws2_32.lib")
struct test {
string str;
};
struct UdpHeartPack {
char UDPData[16] ;
};
int main(int argc, char* argv[])
{
struct UdpHeartPack udpPack;
static int UDP_PORT = 7001;
udpPack.UDPData[0] = 'h';
udpPack.UDPData[1] = 'e';
udpPack.UDPData[2] = 'l';
udpPack.UDPData[3] = 'l';
udpPack.UDPData[4] = 'o';
udpPack.UDPData[5] = ' ';
udpPack.UDPData[6] = 'w';
udpPack.UDPData[7] = 'o';
udpPack.UDPData[8] = 'r';
udpPack.UDPData[9] = 'l';
udpPack.UDPData[10] = 'd';
udpPack.UDPData[11] = '\0';
char *pPack = (char *) &udpPack;
WSADATA wsaData; //指向WinSocket信息结构的指针
SOCKET sockListener; //创建套接字
SOCKADDR_IN saUdpServ; //指向通信对象的结构体指针
BOOL fBroadcast = TRUE; //用于setsockopt(),表示允许
char sendBuff[800]; //缓冲区存放发送的数据
int ncount=0; //用于显示消息数目
//*************************** 第一步初始化Winsock *****************************//
if(WSAStartup(MAKEWORD( 1, 1 ), &wsaData )!=0) //进行WinSocket的初始化
{
printf("Can't initiates windows socket!Program stop.\n");//初始化失败返回-1
return -1;
}
//******************** 第二步建立一个数据报类型的UDP套接字 ******************//
sockListener=socket(PF_INET,SOCK_DGRAM,0);
// setsockopt函数用于设置套接口选项
// 采用广播形式须将第三个参数设置为SO_BROADCAST
setsockopt ( sockListener,SOL_SOCKET,SO_BROADCAST, (CHAR *)&fBroadcast, sizeof (BOOL) );
// 参数设置,注意要将IP地址设为INADDR_BROADCAST,表示发送广播UDP数据报
saUdpServ.sin_family = AF_INET;
saUdpServ.sin_addr.s_addr = htonl ( INADDR_BROADCAST );
saUdpServ.sin_port = htons (UDP_PORT); //发送用的端口,可以根据需要更改

while(1) //循环发送数据
{
Sleep(1000);
sprintf(sendBuff,"Message %d is: ok",ncount++); //将ncount的值放入字符串senBuff中
//********************** 第三步使用sendto函数进行通信 *************************//
sendto ( sockListener,/*sendBuff*/pPack, lstrlen (sendBuff)/*sizeof(udpPack)*/, 0, (SOCKADDR *) &saUdpServ, sizeof (SOCKADDR_IN));
printf("%s\n",sendBuff); //将要广播的数据串输出
}
//********************* 第四步关闭socket ***************************************//
closesocket(sockListener); //关闭监听socket
WSACleanup();
return 0;
}

const static int BUFFER_LENGTH = 12;

接收端程序Receiver.cpp:
#include
#include
#include
//创建新的套接字之前需要调用一个引入Ws2_32.dll库的函数,否则服务器和客户端连接不上
#pragma comment(lib,"ws2_32.lib")
int main(int argc, char* argv[])
{
WSADATA wsaData; //指向WinSocket信息结构的指针
SOCKET sockListener;
SOCKADDR_IN sin,saClient; //设置两个地址,sin用来绑定
//saClient用来从广播地址接收消息
char cRecvBuff[800]; //定义接收缓冲区
int nSize,nbSize;
int iAddrLen=sizeof(saClient);
if(WSAStartup(MAKEWORD( 1, 1 ), &wsaData )!=0) //进行WinSocket的初始化
{
printf("Can't initiates windows socket!Program stop.\n");//初始化失败返回-1
return -1;
}
sockListener=socket(AF_INET, SOCK_DGRAM,0);
sin.sin_family = AF_INET;
sin.sin_port = htons(7001); //发送端使用的发送端口,可以根据需要更改
sin.sin_addr.s_addr = htonl(INADDR_ANY);
if(bind( sockListener, (SOCKADDR FAR *)&sin, sizeof(sin))!=0)
{
printf("Can't bind socket to local port!Program stop.\n");//初始化失败返回-1
return -1;
}
while(1)
{
nSize = sizeof ( SOCKADDR_IN );
if((nbSize=recvfrom (sockListener,cRecvBuff,800,0,
(SOCKADDR FAR *) &saClient,&nSize))==SOCKET_ERROR) //若接收失败则提示错误
{
printf("Recive Error");
break;
}
cRecvBuff[nbSize] = '\0'; //字符串终止
printf("%s\n",cRecvBuff); //显示所接收到的字符串

}
return 0;
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
ipad mini2怎么看小说 关于ipadmini的几点疑惑 苹果平板图书阅读软件推荐推荐一个苹果可以用的免费看小说app 风冷无霜为什么噪音大 华为matepad11多大尺寸的 applewatch可以发微信语音吗? 人类基因组组成 仅从染色体照片(黑白非显带的)能否区别X染色体和C组染色体? ...车子加速不上来是什么原因,节气门清洗过了也不行? 换了变数箱油洗了节气门 提速慢了 停下来起步根本没力气 c# udp socket 怎样向远程端口请求数据 socket UDP问题 UDP中将struct skb_buff作为缓存区 具体如何使用 非典在我国传播的根源? 2003年非典是别的国家传到中国的吗? 非典是怎么传入我国的 给宝贝(女孩)起名:因为我宝贝的来临,即给我们带来惊喜又带来好运。跪求高人给起个响亮的名字。 起名字,求大师给我闺女起个名字! 甘炜琪这个名字打多少分 梁炜琪这个名字怎么样 戴炜琪 ,这个名字好吗? 女孩取名为梁炜琪如何 梁炜琪的名字好吗? 江炜琪,女孩五行缺火,这个名字好吗? 潘炜琪名字打分是多少 杨炜琪名字好吗出生农历2015年2月15日11.30分左右 男孩子、2013年2月25日19:40出生的,名字谢炜琪,请打分!谢谢! 芳香化合物A、B互为同分异构体,B的结构简式为.A经①②两步反应得到C、D和E.B经①②两步反应得E、F和H AB=E,能说A,B互相是对方的逆矩阵吗??? E语言里面如何两个倒计时互不干扰!求大神 C语言 UDP socket 简单客户端 编程,急 c# socket(udp) 与一组芯片的通讯,发送指令(字符串过去就返回一组字符信息)。哪位大侠做过 游戏账号在哪个app上交易比较好? C# Socket UDP模式,Send方法一定能成功吗? 卖账号用哪个app好 如何用C++Builder控件实现UDP通信 关于c#的socket分包和组包的问题 MFC中UDP建立连接后收不到数据 《原神》账号出售平台哪个好? c#socket在使用TCP或UDP异步通信的时候SocketAsyncEventArgs和一般的Begin有何区别 docker影响socket性能 能交易传奇账号的APP叫什么 用udp来传送文件,发送端sendto加上了 sleep(100)。 接受端recvfrom 用for循环, 爱找游游戏交易网靠谱吗 c#之UDP协议的异步通信怎么做 delphi udp通讯怎么会refuse 什么叫源文件夹和 目标文件夹 目标文件夹和源文件夹相同 我的文档里的目标文件夹在哪 我的文档的目标文件夹是本地磁盘(D:)吗?