加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Winsock编程基础2(UDP流程)

发布时间:2020-12-14 04:20:25 所属栏目:大数据 来源:网络整理
导读:UDP用户数据报协议 服务器端 1 创建套接字(socket) 2 绑定IP地址和端口(bind) 3 收发数据(sendto,recvfrom) 4 关闭连接(closesocket) 客户端 1 创建套接字(socket) 2 收发数据(sendto,recvfrom) 3 关闭连接 (closesocket) int sendto( SOCKET s, // 用来发送
UDP用户数据报协议
服务器端
  <1 创建套接字(socket)
  <2 绑定IP地址和端口(bind)
  <3 收发数据(sendto,recvfrom)
  <4 关闭连接(closesocket)
客户端
  <1 创建套接字(socket)
  <2 收发数据(sendto,recvfrom)
  <3 关闭连接(closesocket)
int sendto(
    SOCKET s,//用来发送数据的套接字
    const char FAR *buf,//指向发送数据的缓冲区
    int len,//要发送数据长度
    int flags,//一般指定0
    const struct sockaddr *to,//指向一个包含目标地址和端口号的sockaddr_in结构
    int toLen    //结构大小
);
int recvfrom(SOCKET s,char *FAR buf,int len,int flags,struct sockaddr FAR *from,int FAR* fromLen)
简单实例
?   服务器端
#include <iostream>
#include <stdio.h>

#include "InitSock.h"

using namespace std;
int main(void)
{
    CInitSock initSock;
    //创建套接字
    SOCKET s = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
    if (s == INVALID_SOCKET)
    {
        cout << "Failed socke()" << endl;
        return 0;
    }

    sockaddr_in addr;
    addr.sin_family = AF_INET;
    addr.sin_port = htons(4567);
    addr.sin_addr.S_un.S_addr = INADDR_ANY;

    //绑定套接字到一个本地地址
    if (bind(s,(LPSOCKADDR)&addr,sizeof(addr)) == SOCKET_ERROR)
    {
        cout << "Failed bind()" << endl;
        return 0;
    }

    //接收数据
    char buf[1024];
    sockaddr_in clientAddr;
    int nLen = sizeof(addr);
    while (TRUE)
    {
        int nRecv = recvfrom(s,buf,1024,0,(sockaddr*)&clientAddr,&nLen);
        if (nRecv > 0)
        {
            buf[nRecv] = ;
            cout << "接收到数据" << inet_ntoa(clientAddr.sin_addr) << ": " << buf << endl;
        }
    }

    //关闭套接字
    closesocket(s);
    return 0;
}
?   客户端
#include <iostream>
#include <stdio.h>

#include "InitSock.h"

using namespace std;
int main(void)
{
    CInitSock initSock;
    //创建套接字
    SOCKET s = socket(AF_INET,IPPROTO_UDP);
    if (s == INVALID_SOCKET)
    {
        cout << "Failed socke()" << endl;
        return 0;
    }
    //创建套接字之后如果首先sendto可以不绑定
    //若首先recvfrom则需要绑定

    //填写远程地址信息
    sockaddr_in addr;
    addr.sin_family = AF_INET;
    addr.sin_port = htons(4567);
    addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");

    //发送数据
    char szText[] = "UDP Server Demorn";
    sendto(s,szText,strlen(szText),0,(sockaddr*)&addr,sizeof(addr));
    closesocket(s);

    cout << "数据已发送" << endl;
    getchar();
    return 0;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读