⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pong.c

📁 计算机网络编程
💻 C
字号:
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <errno.h>
#include <stdlib.h>
#include <net/if.h>

#define BUFMAX 100

int main(void)
{
    int pong_sockfd;
	struct sockaddr_in pong_addr, recv_addr;
	int recv_addr_len;
	char recv_buf[BUFMAX], *send_buf = "pres\n";
	int recv_len;
	char buf[BUFMAX];	
	if ((pong_sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
        perror("create socket error!");
	}
    //绑定到7000端口
    bzero((char *) &pong_addr, sizeof(pong_addr));
	pong_addr.sin_family = AF_INET;
	pong_addr.sin_addr.s_addr = htonl(INADDR_ANY);
	pong_addr.sin_port = htons(7000);

	if (bind(pong_sockfd, (struct sockaddr *)&pong_addr, sizeof(pong_addr)) < 0) {
        perror("bind service socket error!");
	}
	//一直监听
	for(;;) {
		printf("In pong service...\n");
        
        bzero((char *) &recv_addr, sizeof(recv_addr));
		recv_len = recvfrom(pong_sockfd, recv_buf, BUFMAX, 0, (struct sockaddr *) &recv_addr, &recv_addr_len);

        recv_buf[recv_len] = '\0';
        if (0 == strcmp(recv_buf, "ping\n")) {
            //just a test
            printf("recv buf : %s, recv_ip : %s, recv_port : %d\n", recv_buf, inet_ntoa(recv_addr.sin_addr), ntohs(recv_addr.sin_port));
            
            if (sendto(pong_sockfd, send_buf, strlen(send_buf), 0, (struct sockaddr *) &recv_addr, sizeof(recv_addr)) < 0) {
    			perror("sendto error");
    		}
        }        
	}
    return 0;
} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -