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

📄 udp-client.c

📁 udp客户端和服务器端测试程序
💻 C
字号:
/*客户端程序代码:先建立一个UDP套接字,然后使用循环将命令行传进来的字符串通过UDP套接字依次传送给服务器*/
#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()*/
#include<sys/time.h> /*select()*/
#define REMOTE_SERVER_PORT 1500
#define MAX_MSG 100

int main(int argc,char *argv[]){
	int sd,rc,i;
	struct sockaddr_in cliAddr,remoteServAddr;
	struct hostent *h;
	
	/*check command line args*/
	if(argc<3){
		printf("usage:%s <server><data1>...<data N>\n",argv[0]);
		exit(1); 
		}
		
	/*get server IP address(no check if input is IP address or DNS name)*/
	h=gethostbyname(argv[1]);
	if(h==NULL){
		printf("%s:unkonwn host '%s'\n",argv[0],argv[1]);
		exit(1);
		}	
	printf("%s:sending data to '%s'(IP:%s)\n",argv[0],h->h_name,inet_ntoa(*(struct in_addr*)h->h_addr_list[0]));
	remoteServAddr.sin_family=h->h_addrtype;
	memcpy((char*)&remoteServAddr.sin_addr.s_addr,h->h_addr_list[0],h->h_length);
	remoteServAddr.sin_port=htos(REMOTE_SERVER_PORT);
	
	/*socket creation*/
	sd=socket(AF_INET,SOCK_DGRAM,0);
	if(sd<0){
		printf("%s:cannot open socket \n",argv[0]);
		exit(1);
		}
		
	/*bind any port*/
	cliAddr.sin_family=AF_INET;
	cliAddr.sin_addr.s_addr=htonl(INADDR_ANY);
	cliAddr.sin_port=htons(0);
	rc=bind(sd,(struct sockaddr*)&cliAddr,sizeof(cliAddr));
	if(rc<0){
		printf("%s:cannot bind port\n",argv[0]);
		exit(1);
		}
		
	/*send data*/
	for(i=2;i<argc;i++){
		rc=sendto(sd,argv[i],strlen(argv[i]+1),0,());
		}
	}

⌨️ 快捷键说明

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