UDP套接字编程

   与面向连接的协议相比,面向无连接协议极为不同。其中一个重要的不同点就是客户端与服务器之间不必建立连接。

    对于UDP套接字编程而言,服务器创建套接字后,调用bind()函数将套接字与准备接收数据的接口绑定在一起。和TCP编程不同的是,应用程序不必调用listen()和accept()函数等待客户端的连接。而只需要等待接收数据了。开发UDP套接字应用程序,有两个重要的函数sendto()和recvfrom()。服务器采用recvfrom()来接收来自客户端的数据报,并获得客户端的端地址,之后向客户端发送数据时,采用sendto()函数。

    以下是一个服务器从客户端接收消息,并回送一个消息的算法过程,实现如下:

    #include <stdio.h>
    #include <winsock.h>

    #define CPORT 1520
    #define VERSIONRE MAKEWORD(2, 2)

    int main()
   {
        int s;  //define two sockets
        int nError;
        WSADATA wsadata;
        struct sockaddr_in sin, clientaddr;  //define an address
        int retVal;
        char buf[64];
        int addrLen;

        addrLen = sizeof(clientaddr);
        memset(buf,64,0);
        nError = WSAStartup(VERSIONRE, &wsadata);
        if (nError != 0)
       {
           printf("None avaliable DLL!\n");
           return -1;
       }
 
       sin.sin_family = AF_INET;
       sin.sin_port = htons((unsigned short)CPORT);
       sin.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
 
       s = socket(AF_INET,SOCK_DGRAM,0);//make a socket
       if (s == INVALID_SOCKET)
       {
            printf("socket failed!\n");
            closesocket(s);
            WSACleanup();
            return -1;
       }
 
       retVal = bind(s, (struct sockaddr*)(&sin), sizeof(sin));//bind socket to address
       if (retVal == SOCKET_ERROR)
       {
            printf("bind failed!\n");
            closesocket(s);
            WSACleanup();
            return -1;
       }

        retVal = recvfrom(s, buf, 64, 0, (struct sockaddr*)(&clientaddr),&addrLen);
        if (retVal == SOCKET_ERROR)
       {
             printf("recv failed!\n");
             closesocket(s);
             WSACleanup();
             return -1;
       }
       buf[retVal] = 0;
       printf("%s\n",buf);

       memset(buf, 64, 0);
       strcpy(buf,"Hello!\n");
       retVal = sendto(s, buf, 64, 0, (struct sockaddr*)(&clientaddr),sizeof(clientaddr));
       if (retVal == SOCKET_ERROR)
       {
            printf("send failed!\n");
            closesocket(s);
            WSACleanup();
            return -1;
      }
 

      closesocket(s);//close socket
 
      WSACleanup();
      return 0;
 }

 

    对于客户端来说,创建套接字后不必与服务器建立连接,而是直接向服务器发送数据。

    #include <stdio.h>
    #include <winsock.h>

    #define CPORT 1520
    #define VERSIONRE MAKEWORD(2, 2)

    int main()
   {
        int s;  //define a socket
        int nError;
        WSADATA wsadata;
        struct sockaddr_in sin;  //define an address
        int  sendval;
        char buf[64];
        int addrLen;

        addrLen = sizeof(sin);
        memset(buf, 64, 0);
        strcpy(buf, "MyUDP");
        nError = WSAStartup(VERSIONRE, &wsadata);
        if (nError != 0)
        {
             printf("wsastartup failed!\n");
             return -1;
        }

        sin.sin_family = AF_INET;
        sin.sin_port = htons((unsigned short)CPORT);
        sin.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");

        s = socket(AF_INET,SOCK_DGRAM,0);//make a socket
        if (s == INVALID_SOCKET)
       {
            printf("socket failed!\n");
            WSACleanup();
            return -1;
       }

       sendval = sendto(s, buf, strlen(buf), 0, (struct sockaddr *)(&sin), sizeof(sin));

       if (sendval == SOCKET_ERROR)
       {
           printf("send failed!\n");
           closesocket(s);
           WSACleanup();
           return -1;
      }

      sendval = recvfrom(s, buf, 64, 0, (struct sockaddr*)(&sin),&addrLen);
     if (sendval == SOCKET_ERROR)
     {
           printf("recv failed!\n");
           closesocket(s);
           WSACleanup();
           return -1;
     }
      printf("%s\n",buf);

      closesocket(s);//close socket
      WSACleanup();
      return 0;
  }

   

(1)普通用户端(全平台) 音乐播放核心体验: 个性化首页:基于 “听歌历史 + 收藏偏好” 展示 “推荐歌单(每日 30 首)、新歌速递、相似曲风推荐”,支持按 “场景(通勤 / 学习 / 运动)” 切换推荐维度。 播放页功能:支持 “无损音质切换、倍速播放(0.5x-2.0x)、定时关闭、歌词逐句滚动”,提供 “沉浸式全屏模式”(隐藏冗余控件,突出歌词与专辑封面)。 多端同步:自动同步 “播放进度、收藏列表、歌单” 至所有登录设备(如手机暂停后,电脑端打开可继续播放)。 音乐发现与管理: 智能搜索:支持 “歌曲名 / 歌手 / 歌词片段” 搜索,提供 “模糊匹配(如输入‘晴天’联想‘周杰伦 - 晴天’)、热门搜索词推荐”,结果按 “热度 / 匹配度” 排序。 歌单管理:创建 “公开 / 私有 / 加密” 歌单,支持 “批量添加歌曲、拖拽排序、一键分享到社交平台”,系统自动生成 “歌单封面(基于歌曲风格配色)”。 音乐分类浏览:按 “曲风(流行 / 摇滚 / 古典)、语言(国语 / 英语 / 日语)、年代(80 后经典 / 2023 新歌)” 分层浏览,每个分类页展示 “TOP50 榜单”。 社交互动功能: 动态广场:查看 “关注的用户 / 音乐人发布的动态(如‘分享新歌感受’)、好友正在听的歌曲”,支持 “点赞 / 评论 / 转发”,可直接点击动态中的歌曲播放。 听歌排行:个人页展示 “本周听歌 TOP10、累计听歌时长”,平台定期生成 “全球 / 好友榜”(如 “好友中你本周听歌时长排名第 3”)。 音乐圈:加入 “特定曲风圈子(如‘古典音乐爱好者’)”,参与 “话题讨论(如‘你心中最经典的钢琴曲’)、线上歌单共创”。 (2)音乐人端(创作者中心) 作品管理: 音乐上传:支持 “无损音频(FLAC/WAV)+ 歌词文件(LRC)+ 专辑封面” 上传,填写 “歌曲信息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值