unp实现回射服务器

来源:互联网 发布:考勤机采集数据超时 编辑:程序博客网 时间:2024/05/17 23:41

linux下的udp套接字实现的回射服务器,也就是客户发送一段,服务器把这段返回给客户。

客户端

#include <iostream>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#define SERV_PORT 5566#define MAX_MESG_SIZE 1024using namespace std;int main(){        int sockfd;        struct sockaddr_in servaddr;        bzero(&servaddr, sizeof(servaddr));        servaddr.sin_family = AF_INET;        servaddr.sin_port = htons(SERV_PORT);        inet_aton("127.0.0.1", &servaddr.sin_addr);        if((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0)        {                printf("socket error!\n");                return -1;        }        char buf[MAX_MESG_SIZE];        int n;        while(fgets(buf, MAX_MESG_SIZE, stdin) != NULL)        {                if((sendto(sockfd, buf, strlen(buf), 0, (struct sockaddr *)&servaddr, sizeof(servaddr))) < 0)                {                        printf("sendto error\n");                        return -1;                }                n = recvfrom(sockfd, buf, MAX_MESG_SIZE, 0, NULL, NULL);                buf[n] = 0;                fputs(buf, stdout);        }        return 0;}


服务端:

#include <iostream>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#define SERV_PORT 5566#define MAX_MESG_SIZE 1024using namespace std;void my_echo(int sockfd){        struct sockaddr_in clientaddr;        socklen_t clientlen = sizeof(clientaddr);        int n;        char mesg[MAX_MESG_SIZE];        while(1)        {                n = recvfrom(sockfd, mesg, MAX_MESG_SIZE, 0, (struct sockaddr *)&clientaddr, &clientlen);                sendto(sockfd, mesg, n, 0, (struct sockaddr *)&clientaddr, clientlen);        }}int main(){        int sockfd;        struct sockaddr_in servaddr;        if((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0)        {                printf("socket error!\n");                return -1;        }        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))) < 0)        {                printf("bind error!\n");                return -1;        }        my_echo(sockfd);        return 0;}


 

原创粉丝点击