[摘抄-Socket-学习中]UDP通信基础代码-server端

本文介绍了一个使用C语言实现的UDP客户端与服务器通信的例子。通过该示例,读者可以了解到如何创建UDP套接字、绑定端口、发送及接收数据等基本操作。特别地,文章展示了如何从客户端向服务器发送信息,并在服务器端处理这些信息。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <unistd.h>

int port = 10005;

int SendInfo(char* ip, char* info)
{
int sockfd;
int len = 0;
struct sockaddr_in adr_srvr;
bzero(&adr_srvr, sizeof(adr_srvr));
adr_srvr.sin_family = AF_INET;
adr_srvr.sin_addr.s_addr = inet_addr(ip);
adr_srvr.sin_port = htons(port);
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if(sockfd == -1)
{
printf("连接失败,ip=%s,port=%d\n",ip,port);
return -1;
}
len = sendto(sockfd, info, strlen(info), 0, (struct sockaddr*)&adr_srvr, sizeof(adr_srvr));
if(len < 0)
{
printf("发送数据失败!\n");
return -1;
}
printf("回复成功!info=%s\n",info);
close(sockfd);
}


int test()
{
int sockfd;
int len;
int z;
char buf[256];
struct sockaddr_in adr_inet;
struct sockaddr_in adr_clnt;
printf("等待Client段传送数据....\n");
bzero(&adr_inet, sizeof(adr_inet));
adr_inet.sin_family = AF_INET;
//adr_inet.sin_addr.s_addr = inet_addr("218.244.145.161");
//adr_inet.sin_addr.s_addr = inet_addr("192.168.207.40");
adr_inet.sin_addr.s_addr = htonl(INADDR_ANY);
adr_inet.sin_port = htons(port);
len = sizeof(adr_clnt);
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if(sockfd == -1)
{
perror("socket error");
exit(1);
}
z = bind(sockfd, (struct sockaddr *)&adr_inet, sizeof(adr_inet));
if(z == -1)
{
perror("bind error");
exit(1);
}
printf("监听和绑定成功....\n");
while(1)
{
z = recvfrom(sockfd, buf, sizeof(buf), 0, (struct sockaddr *)&adr_clnt, (socklen_t *)&len);
if(z < 0)
{
perror("recvfrom error");
printf("recv error\n");
exit(1);
}
buf[z] = 0;
char* ip = inet_ntoa(adr_clnt.sin_addr);
printf("ip=%s,port=%d\n",ip, ntohs(adr_clnt.sin_port));
printf("接收数据:");
for(int i=0; i<z;i++)
{
printf("%02X ",buf[i]);
}
printf(" 数据长度:%d\n",z);
//取出本地IP地址
struct sockaddr_in serv;
char serv_ip[20];
int serv_len = sizeof(serv);
getsockname(sockfd, (struct sockaddr *)&serv,(socklen_t *) &serv_len);
inet_ntop(AF_INET, &serv.sin_addr, serv_ip, sizeof(serv_ip));
printf("本地地址:%s\n",serv_ip);
SendInfo(ip, buf);
}
close(sockfd);
}



int main(int argc, char *argv[])
{
test();

return 0;
}


编译:g++ main.c -o udp
【语音分离】基于平均谐波结构建模的无监督单声道音乐声源分离(Matlab代码实现)内容概要:本文介绍了基于平均谐波结构建模的无监督单声道音乐声源分离方法,并提供了相应的Matlab代码实现。该方法通过对音乐信号中的谐波结构进行建模,利用音源间的频率特征差异,实现对混合音频中不同乐器或人声成分的有效分离。整个过程无需标注数据,属于无监督学习范畴,适用于单通道录音场景下的语音与音乐分离任务。文中强调了算法的可复现性,并附带完整的仿真资源链接,便于读者学习与验证。; 适合人群:具备一定信号处理基础和Matlab编程能力的高校学生、科研人员及从事音频处理、语音识别等相关领域的工程师;尤其适合希望深入理解声源分离原理并进行算法仿真实践的研究者。; 使用场景及目标:①用于音乐音频中人声与伴奏的分离,或不同乐器之间的分离;②支持无监督条件下的语音处理研究,推动盲源分离技术的发展;③作为学术论文复现、课程项目开发或科研原型验证的技术参考。; 阅读建议:建议读者结合提供的Matlab代码与网盘资料同步运行调试,重点关注谐波建模与频谱分解的实现细节,同时可扩展学习盲源分离中的其他方法如独立成分分析(ICA)或非负矩阵分解(NMF),以加深对音频信号分离机制的理解。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lock颠颠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值