注意事项
- UDP通信时,client要先给server发送消息,这样server才能知道client的信息
代码
#include <func.h>
#define BUFFSIZE 1024
int main()
{
int sfd = socket(AF_INET,SOCK_DGRAM,0);
if(sfd == -1){
perror("socket");
}
struct sockaddr_in serverAddr;
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(8080);
serverAddr.sin_addr.s_addr = inet_addr("192.168.44.128");
int ret = bind(sfd,(const struct sockaddr*)&serverAddr,sizeof(serverAddr));
if(ret == -1){
perror("bind");
}
char buffer[BUFFSIZE];
struct sockaddr_in clientAddr;
fd_set rdset;
int maxfd = STDIN_FILENO;
while(1){
FD_ZERO(&rdset);
FD_SET(sfd,&rdset);
FD_SET(STDIN_FILENO,&rdset);
if(sfd > maxfd) maxfd = sfd;
select(maxfd + 1,&rdset,NULL,NULL,NULL);
if(FD_ISSET(sfd,&rdset)){
memset(&clientAddr,0,sizeof(clientAddr));
memset(&buffer,0,sizeof(buffer));
socklen_t len = sizeof(clientAddr);
ret = recvfrom(sfd,&buffer,sizeof(buffer),0,(struct sockaddr*)&clientAddr,&len);
if(ret == 0) continue;
printf("%s:%d say %s\n",inet_ntoa(clientAddr.sin_addr),ntohs(clientAddr.sin_port),buffer);
}else if(FD_ISSET(STDIN_FILENO,&rdset)){
memset(&buffer,0,sizeof(buffer));
int num = read(STDIN_FILENO,&buffer,sizeof(buffer));
if(num == 0) break;
ret = sendto(sfd,&buffer,sizeof(buffer),0,(struct sockaddr*)&clientAddr,sizeof(clientAddr));
}
}
close(sfd);
return 0;
}
#include <func.h>
#define BUFFERSIZE 1024
int main()
{
int cfd = socket(AF_INET,SOCK_DGRAM,0);
if(cfd == -1){
perror("socker");
}
struct sockaddr_in serverAddr;
serverAddr.sin_addr.s_addr = inet_addr("192.168.44.128");
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(8080);
char buffer[BUFFERSIZE] = "hello server\n";
int ret = sendto(cfd,&buffer,sizeof(buffer),0,(struct sockaddr*)&serverAddr,sizeof(serverAddr));
if(ret == -1){
perror("sendto");
}
fd_set rdset;
int maxfd = STDIN_FILENO;
while(1){
FD_ZERO(&rdset);
FD_SET(cfd,&rdset);
FD_SET(STDIN_FILENO,&rdset);
if(cfd > maxfd) maxfd = cfd;
select(maxfd + 1,&rdset,NULL,NULL,NULL);
if(FD_ISSET(STDIN_FILENO,&rdset)){
memset(&buffer,0,sizeof(buffer));
int num = read(STDIN_FILENO,&buffer,sizeof(buffer));
if(num == 0) break;
ret = sendto(cfd,&buffer,sizeof(buffer),0,(struct sockaddr*)&serverAddr,sizeof(serverAddr));
if(ret == -1){
perror("sendto");
}
}
if(FD_ISSET(cfd,&rdset)){
socklen_t len = sizeof(serverAddr);
ret = recvfrom(cfd,&buffer,sizeof(buffer),0,(struct sockaddr*)&serverAddr,&len);
if(ret == 0){
break;
}
printf("server:%s\n",buffer);
}
}
close(cfd);
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY