实现功能:客户端向指定的服务端(单播/广播)发消息,服务端返回相应的内容并在客户端显示.

linux下无连接udp通信-服务端:

#include

#include

#include

#include

#include

#define MAXLINE 80

#define SERV_PORT 8888

#include

#include

#include

#include

#include

#include

#define MAXLINE 80

#define SERV_PORT 8888

void do_echo(int sockfd, struct sockaddr *pcliaddr, socklen_t

clilen)

{

int n;

socklen_t len;

char mesg[MAXLINE];

for(;;)

{

len = clilen;

n = recvfrom(sockfd, mesg, MAXLINE, 0, pcliaddr,

&len);

sendto(sockfd, mesg, n, 0, pcliaddr, len);

}

}

int main(void)

{

int sockfd;

struct sockaddr_in servaddr, cliaddr;

sockfd = socket(AF_INET, SOCK_DGRAM, 0);

bzero(&servaddr, sizeof(servaddr));

servaddr.sin_family = AF_INET;

servaddr.sin_addr.s_addr = htonl(INADDR_ANY);

servaddr.sin_port = htons(SERV_PORT);

if(bind(sockfd, (struct sockaddr *)&servaddr,

sizeof(servaddr)) == -1)

{

perror("bind error");

exit(1);

}

do_echo(sockfd, (struct sockaddr *)&cliaddr,

sizeof(cliaddr));

return 0;

}

linux下无连接udp通信-客户端(单播):

#include

#include

#include

#include

#include

#include

#include

#include

#define MAXLINE 80

#define SERV_PORT 8888

void do_cli(FILE *fp, int sockfd, struct sockaddr *pservaddr,

socklen_t servlen)

{

int n;

char sendline[MAXLINE], recvline[MAXLINE +

1];

if(connect(sockfd, (struct sockaddr *)pservaddr,

servlen) == -1)

{

perror("connect error");

exit(1);

}

while(fgets(sendline, MAXLINE, fp) != NULL)

{

write(sockfd, sendline,

strlen(sendline));

n = read(sockfd, recvline,

MAXLINE);

if(n == -1)

{

perror("read

error");

exit(1);

}

recvline[n] = 0;

fputs(recvline, stdout);

}

}

int main(int argc, char **argv)

{

int sockfd;

struct sockaddr_in servaddr;

if(argc != 2)

{

printf("usage: udpclient

\n");

exit(1);

}

bzero(&servaddr,

sizeof(servaddr));

servaddr.sin_family = AF_INET;

servaddr.sin_port = htons(SERV_PORT);

if(inet_pton(AF_INET, argv[1],

&servaddr.sin_addr) <= 0)

{

printf("[%s] is not a valid

IPaddress\n", argv[1]);

exit(1);

}

sockfd = socket(AF_INET, SOCK_DGRAM, 0);

int yes = 1;

setsockopt(sockfd , SOL_SOCKET, SO_BROADCAST,

&yes, sizeof(yes));

do_cli(stdin, sockfd, (struct sockaddr

*)&servaddr, sizeof(servaddr));

return 0;

}

linux下无连接udp通信-客户端(广播):

#include

#include

#include

#include

#include

#include

#include

#include

#define MAXLINE 80

#define SERV_PORT 8888

void do_cli(FILE *fp, int sockfd, struct sockaddr *pservaddr,

socklen_t servlen)

{

int n;

char sendline[MAXLINE], recvline[MAXLINE +

1];

while(fgets(sendline, MAXLINE, fp) != NULL)

{

n=sendto(sockfd,

sendline, strlen(sendline),0,(struct sockaddr *)pservaddr,

servlen);

struct sockaddr *psource_addr;

socklen_t servsource_len;

recvfrom(sockfd, recvline,

MAXLINE,0,psource_addr,&servsource_len);

if(servsource_len == -1)

{

perror("read

error");

exit(1);

}

recvline[n] = 0;

fputs(recvline, stdout);

}

}

int main(int argc, char **argv)

{

int sockfd;

struct sockaddr_in servaddr;

if(argc != 2)

{

printf("usage: udpclient

\n");

exit(1);

}

bzero(&servaddr,

sizeof(servaddr));

servaddr.sin_family = AF_INET;

servaddr.sin_port = htons(SERV_PORT);

if(inet_pton(AF_INET, argv[1],

&servaddr.sin_addr) <= 0)

{

printf("[%s] is not a valid

IPaddress\n", argv[1]);

exit(1);

}

sockfd = socket(AF_INET, SOCK_DGRAM, 0);

int yes = 1;

setsockopt(sockfd , SOL_SOCKET, SO_BROADCAST,

&yes, sizeof(yes));

do_cli(stdin, sockfd, (struct sockaddr

*)&servaddr, sizeof(servaddr));

return 0;

}

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐