From 6463eea09ba3bd9008a87027e97670647cb196b5 Mon Sep 17 00:00:00 2001 From: ningling <2907616355@qq.com> Date: Tue, 9 May 2023 08:27:53 +0000 Subject: [PATCH] add 6/server.c. Signed-off-by: ningling <2907616355@qq.com> --- 6/server.c | 71 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 6/server.c diff --git a/6/server.c b/6/server.c new file mode 100644 index 0000000..5350de0 --- /dev/null +++ b/6/server.c @@ -0,0 +1,71 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#define MYPORT 8887 + + +#define ERR_EXIT(m) + do { + perror(m); + exit(EXIT_FAILURE); + } while (0) + +void echo_ser(int sock) +{ + char recvbuf[1024] = {0}; + struct sockaddr_in peeraddr; + socklen_t peerlen; + int n; + + while (1) + { + + peerlen = sizeof(peeraddr); + memset(recvbuf, 0, sizeof(recvbuf)); + n = recvfrom(sock, recvbuf, sizeof(recvbuf), 0, + (struct sockaddr *)&peeraddr, &peerlen); + if (n <= 0) + { + + if (errno == EINTR) + continue; + + ERR_EXIT("recvfrom error"); + } + else if(n > 0) + { + printf("接收到的数据:%s\n",recvbuf); + sendto(sock, recvbuf, n, 0, + (struct sockaddr *)&peeraddr, peerlen); + printf("回送的数据:%s\n",recvbuf); + } + } + close(sock); +} + +int main(void) +{ + int sock; + if ((sock = socket(PF_INET, SOCK_DGRAM, 0)) < 0) + ERR_EXIT("socket error"); + + struct sockaddr_in servaddr; + memset(&servaddr, 0, sizeof(servaddr)); + servaddr.sin_family = AF_INET; + servaddr.sin_port = htons(MYPORT); + servaddr.sin_addr.s_addr = htonl(INADDR_ANY); + + printf("监听%d端口\n",MYPORT); + if (bind(sock, (struct sockaddr *)&servaddr, sizeof(servaddr)) < 0) + ERR_EXIT("bind error"); + + echo_ser(sock); + + return 0; +} \ No newline at end of file -- Gitee