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

📄 udp-server.c

📁 udp客户端和服务器端测试程序
💻 C
字号:
/*udp服务器(server)端程序,用于接收客户端发送来的数据,然后打印到屏幕*/
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<netdb.h>
#include<stdio.h>
#include<unistd.h> /*close()*/
#include<string.h>  /*memset()*/
#define LOCAL_SERVER_PORT 1500
#define MAX_MSG 100

int main(int argc,char *argv[])
	{
		int sd,rc,n,cliLen;
		struct sockaddr_in cliAddr,servAddr;
		char msg[MAX_MSG];
		
		/*socket creation*/
		sd=socket(AF_INET,SOCK_DGRAM,0);
		if(sd<0)
		{
			printf("%s: cannot open socket \n",argv[0]);
			exit(1);
		}
		
		/*bind local server port*/
		servAddr.sin_family=AF_INET;
		servAddr.sin_addr.s_addr=htonl(INADDR_ANY);
		servAddr.sin_port=htons(LOCAL_SERVER_PORT);
		rc=bind(sd,(struct sockaddr *)&servAddr,sizeof(servAddr));
		if(rc<0){
			printf("%s: cannot bind port number %d \n",argv[0],LOCAL_SERVER_PORT);
			exit(1);
		}
		printf("%s: waiting for data on port UDP %u\n",argv[0],LOCAL_SERVER_PORT);
		
		/*server infinite loop*/
		while(1){
			/*init buffer*/
			memset(msg,0X0,MAX_MSG);
			
			/*receive message*/
			cliLen=sizeof(cliAddr);
			n=recvfrom(sd,msg,MAX_MSG,0,(struct sockaddr*)&cliAddr,&cliLen);
			if(n<0){
				printf("%s:cannot receive data \n",argv[0]);
				continue;
				}
			
			/*print received message*/
			printf("%s: from %s: UDP%u: %s\n",argv[0],inet_ntoa(cliAddr.sin_addr),ntohs(cliAddr.sin_port),msg);
			}/*end of server infinite loop*/
			return 0;
	}

⌨️ 快捷键说明

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