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

📄 serv_udp.c

📁 基于uclinux采用udp通讯协议实现图象等网络规范文件的传输.采用c/s模式,服务器端实现并发而响应多个客户的请求.经过测试,代码能在linux主机之间,arm与arm之间以及pc与arm之间进行
💻 C
字号:
#include"unixnet.h"#define BUFFER_SIZE 1024#define MAXPACKET   28000int main(int argc,char **argv){  int listen_fd,conn_fd;  int udp_fd;  pid_t chld_pid;  socklen_t cli_len;  struct sockaddr_in cli_addr,serv_addr;  int re_use_addr=1;  int fd;  int ret;  int numbytes,read_bytes;  char *ptr;  char send_buf[MAXPACKET];  int send_bytes=0;    ptr=send_buf;  listen_fd=socket(AF_INET,SOCK_STREAM,0);  if(listen_fd==-1)    {      perror("create listen fd");      exit(1);    }     bzero(&serv_addr,sizeof(serv_addr));  serv_addr.sin_family=AF_INET;  serv_addr.sin_port=htons(SERVER_PORT);  serv_addr.sin_addr.s_addr=htonl(INADDR_ANY);  setsockopt(listen_fd,SOL_SOCKET,SO_REUSEADDR,(void*)&re_use_addr,sizeof(int));  ret=bind(listen_fd,(struct sockaddr *)&serv_addr,sizeof(serv_addr));  if(ret<0)    {      perror("bind server port");      exit(1);    }   listen(listen_fd,LISTENQ);   while(1)     {        cli_len=sizeof(cli_addr);        printf("The server is waiting for accepting new connection\n");        conn_fd=accept(listen_fd,(struct sockaddr *)&cli_addr,&cli_len);               if(conn_fd<0&&errno==EINTR) continue;        else if(conn_fd<0)          {            perror("accept socket error");            exit(1);          }        else printf("The server create a new connection.\n");        if((chld_pid=fork())==0)          {            close(listen_fd);            close(conn_fd);            cli_addr.sin_port=htons(SERVER_PORT);            udp_fd=socket(AF_INET,SOCK_DGRAM,0);            ret=connect(udp_fd,(struct sockaddr *)&cli_addr,cli_len);            if(ret<0)              {                perror("connect error in server side.\n");                exit(1);              }            else              {              fd=open("dd.jpg",O_RDWR);        //       fd=open("dd.bmp",O_RDWR);         //        fd=open("/usr/src/dd.tar.gz",O_RDWR);               if(fd<0)                {                 perror("open dd.jpg");                 exit(1);                }               while(1)                 {                   read_bytes=read(fd,ptr,MAXPACKET);                                      printf("read_bytes:%d\n",read_bytes);                   if((read_bytes==-1)&&(errno!=EINTR)) break;                   else if(read_bytes==0)                     {                       if((numbytes=send(udp_fd,ptr,read_bytes,0))==-1)                        {                          perror("sendto");                          exit(1);                        }                       close(fd);                       close(udp_fd);                       exit(0);                      }                   else if(read_bytes>0)                     {                       if((numbytes=send(udp_fd,ptr,read_bytes,0))==-1)                        {                          perror("sendto");                          exit(1);                         }                         printf("send_bytes:%d\n",numbytes);                        send_bytes+=numbytes;                        sleep(2);                     }                  }                 printf("real send bytes:%d\n",send_bytes);                }            close(udp_fd);            close(fd);              exit(0);          }         close(conn_fd);        }}                

⌨️ 快捷键说明

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