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

📄 win32_udp_svr.c

📁 linux下的多个网络通讯的例子 可多参考下
💻 C
字号:
#include <stdio.h>                                                            		
#include <stdlib.h>                                                               
                                                             
#include <string.h>   
                                                            
#include "os_socket.h"

                                                        
                                                                              
#define MYPORT 4950    /* the port users will be sending to */                    
                                                                              
#define MAXBUFLEN 100                                                             
                                                                              
main()                                                                            
{                                                                                 
    SOCKET sockfd;                                                                   
    struct sockaddr_in my_addr;    /* my address information */                   
    struct sockaddr_in their_addr; /* connector's address information */          
    int addr_len, numbytes;                                                       
    char buf[MAXBUFLEN];   
    
    OS_SOCKET_INIT();                                                       
         
    /* 第一步:打开一个UDP socket ,AF_INET指IPV4,SOCK_DGRAM表示是UDP*/ 
    if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == INVALID_SOCKET) {                        
        PRINTERROR("socket");                                                         
        exit(1);                                                                  
    }                                                                             
   
   /* 第二步:设置需要本地绑定的端口*/                                                                           
    my_addr.sin_family = AF_INET;         /* host byte order ,AF_INET表示IpV4*/                   
    my_addr.sin_port = htons(MYPORT);     /* short, network byte order ,将端口转为网络序*/         
    my_addr.sin_addr.s_addr = INADDR_ANY; /* auto-fill with my IP ,INADDR_ANY表示所有IP均可接入*/              
    //bzero(&(my_addr.sin_zero), 8);        /* zero the rest of the struct */   
    memset(&(my_addr.sin_zero),0,8);
    
        
    /* 第三步,跟某个端口绑定 */                                                                          
    if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr))== SOCKET_ERROR) {       
        PRINTERROR("bind");                                                           
        exit(1);                                                                  
    }                                                                             
    
    /* 开始遁环接收数据 */
    while(1)
    {                                                                          
		    addr_len = sizeof(struct sockaddr);     
		    /* 用recvfrom阻塞接收数据 ,their_addr存放是远端的机器的IP和端口*/                                      
		    if ((numbytes=recvfrom(sockfd, buf, MAXBUFLEN, 0, (struct sockaddr *)&their_addr, &addr_len)) == SOCKET_ERROR) {       
		        PRINTERROR("recvfrom");                                                       
		        exit(1);                                                                  
		    }                                                                             
		                                                                              
		    printf("got packet from %s:%d\n",inet_ntoa(their_addr.sin_addr),ntohs(their_addr.sin_port));                
		    printf("packet is %d bytes long\n",numbytes);                                 
		    buf[numbytes] = '\0';                                                         
		    printf("packet contains \"%s\"\n",buf);   
		    
		    /* 按原样送回客户端*/
		    if ((numbytes=sendto(sockfd, buf, numbytes, 0, (struct sockaddr *)&their_addr, sizeof(struct sockaddr))) == SOCKET_ERROR) {  
		    PRINTERROR("sendto");                                                    
		    exit(1);                                                             
		   }                                                                        
  }                                 
   /* 关闭socket */                                                                           
    OS_SOCKET_CLOSE(sockfd); 
    
    OS_SOCKET_CLEAR() ;                                                               
	}                                                                               

⌨️ 快捷键说明

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