📄 serv_udp.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 + -