UDP网络编程例程1

    技术2026-09-24  11

    服务器端:server_udp.c

     

    #include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <errno.h>#include <string.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <netdb.h>

    #define SERVPORT 3333 //服务器监听端口号#define BACKLOG  10   //最大同时连接请求数

    /*//用于接收数据的线程//形参:argv为一个socked句柄void * threadFunc(void * argv) { int csocket; int ret; char buf[512];   int len = sizeof(adr_send); //用于保存adr_clnt大小

     csocket = *(int*)argv;

     while(1) {  //recv(csocket, buf, 512, 0);  ret = recvfrom(csocket, buf, sizeof(buf), 0, (struct sockaddr*)&adr_send, &len );; //接收客户端传来的数据  if(ret == -1){   perror("recvfrom failed/n");   exit(1);  }    buf[ret] = '/0'; //最后1位设置为结束符  printf("接收:%s", buf);   if( strncmp(buf, "stop", 4) == 0){ //若接收到stop,退出   printf("结束.../n");   break;  } }

     return NULL;}*/

    int main(){ pthread_t pid; //定义一个线程id int sockfd; //定义一个socked句柄 char buf[256];  //接收数据缓存区 struct sockaddr_in adr_inet; //本地socket信息 struct sockaddr_in adr_clnt; //客户端socket信息 int ret; //用于保存返回值  int len = sizeof(adr_clnt); //用于保存adr_clnt大小

     printf("等待客户端.../n");  //初始化本地socket信息 adr_inet.sin_family = AF_INET; //IPv4协议 adr_inet.sin_port = htons(SERVPORT); //端口号,使用htons函数转换 adr_inet.sin_addr.s_addr = INADDR_ANY; //IP地址为0.0.0.0 bzero(&(adr_inet.sin_zero), 8); //用bzero函数将sin_zero置零  sockfd = socket(AF_INET, SOCK_DGRAM, 0); //建立数据报socket(即UDP) if(sockfd == -1){  perror("socked failed/n");  exit(1); }

     ret = bind(sockfd, (struct sockaddr*)&adr_inet, sizeof(adr_inet)); //绑定socket if(ret == -1){  perror("bind failed/n");  exit(1); } 

    // pthread_create(&pid, NULL, threadFunc, (void *)&socket);

     while(1){  ret = recvfrom(sockfd, buf, sizeof(buf), 0, (struct sockaddr*)&adr_clnt, &len ); //接收客户端传来的数据  if(ret == -1){   perror("recvfrom failed/n");   exit(1);  }   buf[ret] = '/0'; //最后1位设置为结束符  printf("接收:%s", buf);   if( strncmp(buf, "stop", 4) == 0){ //若接收到stop,退出   printf("结束.../n");   break;  }

     }

     close(sockfd); //关闭socked

     return 0;}

     

    客户端:client_udp.c

    #include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <netdb.h>#include <string.h>

    #define SERVPORT 3333

    int main(){ int sockfd;  char buf[80]; struct sockaddr_in adr_serv; //服务器端socket信息 int ret;

     printf("连接服务器端.../n");  //初始化服务器socket信息 adr_serv.sin_family = AF_INET; adr_serv.sin_port = htons(SERVPORT); adr_serv.sin_addr.s_addr = INADDR_ANY; bzero(&(adr_serv.sin_zero), 8);  sockfd = socket(AF_INET, SOCK_DGRAM, 0); if(sockfd == -1){  perror("socket failed/n");  exit(1); }  printf("发送数据.../n");  while(1){  //scanf("%s", buf);   fgets(buf, 80, stdin);  ret = sendto(sockfd, buf, sizeof(buf), 0, (struct sockaddr*)&adr_serv, sizeof(adr_serv) ); //发送数据到服务器端  if(ret < 0){   perror("sendto failed/n");   exit(1);  }

      if(strncmp(buf, "stop", 4) == 0){   printf("结束发送.../n");   break;  } }  close(sockfd);  return 0;} 

     

     

     

    最新回复(0)