基于UDP协议的网络程序

来源:互联网 发布:高级linux书籍 编辑:程序博客网 时间:2024/05/29 14:17


服务器

#include <stdio.h> #include <string.h> #include <netinet/in.h>  #define MAXLINE 80 #define SERV_PORT 4101  int main(void) {struct sockaddr_in servaddr, cliaddr;socklen_t cliaddr_len;int sockfd;char buf[MAXLINE];char str[INET_ADDRSTRLEN];int i, n;sockfd = socket(AF_INET, SOCK_DGRAM, 0);bzero(&servaddr, sizeof(servaddr));servaddr.sin_family = AF_INET;servaddr.sin_addr.s_addr = htonl(INADDR_ANY);/* INADDR_ANY就是指定地址为0.0.0.0的地址,表示不确定地址,或“所有地址”、“任意地址”。*/servaddr.sin_port = htons(SERV_PORT);bind(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr));printf("Accepting connections ...\n");while (1) {cliaddr_len = sizeof(cliaddr);n = recvfrom(sockfd, buf, MAXLINE, 0, (struct scockaddr *)&cliaddr, &cliaddr_len);if (n == -1)perror("recvfrom error");printf("received from %s at PORT %d\n", inet_ntop(AF_INET, &cliaddr.sin_addr, str, sizeof(str)), ntohs(cliaddr.sin_port));for (i = 0; i < n; i++)buf[i] = toupper(buf[i]);n = sendto(sockfd, buf, n, 0, (struct sockaddr *)&cliaddr, sizeof(cliaddr));if (n == -1)perror("sendto error");} return 0;}

客户端

#include <stdio.h> #include <string.h> #include <unistd.h> #include <netinet/in.h> #define MAXLINE 80 #define SERV_PORT 4101  int main(int argc, char *argv[]) {struct sockaddr_in servaddr;int sockfd, n;char buf[MAXLINE];socklen_t servaddr_len;sockfd = socket(AF_INET, SOCK_DGRAM, 0); bzero(&servaddr, sizeof(servaddr));servaddr.sin_family = AF_INET;inet_pton(AF_INET, "192.168.3.36", &servaddr.sin_addr);servaddr.sin_port = htons(SERV_PORT);while (fgets(buf, MAXLINE, stdin) != NULL) {servaddr_len = sizeof(servaddr);n = sendto(sockfd, buf, strlen(buf), 0, (struct sockaddr *)&servaddr, sizeof(servaddr));if (n == -1)perror("sendto error"); n = recvfrom(sockfd, buf, MAXLINE, 0, (struct sockaddr *)&servaddr, &servaddr_len);if (n == -1)perror("recvfrom error");write(STDOUT_FILENO, buf, n);} close(sockfd);return 0;} 



原创粉丝点击