您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > server和client简单例子
1.[代码]c代码server部分跳至[1][2][3][全屏预览]?12345678910111213141516171819202122232425262728293031323334353637383940server.c====================================================================#includenetinet/in.h//forsockaddr_in#includesys/types.h//forsocket#includesys/socket.h//forsocket#includestdio.h//forprintf#includestdlib.h//forexit#includestring.h//forbzero/*#includesys/types.h#includesys/stat.h#includefcntl.h#includeunistd.h*/#defineHELLO_WORLD_SERVER_PORT6666#defineLENGTH_OF_LISTEN_QUEUE20#defineBUFFER_SIZE1024#defineFILE_NAME_MAX_SIZE512intmain(intargc,char**argv){//设置一个socket地址结构server_addr,代表服务器internet地址,端口structsockaddr_inserver_addr;bzero(&server_addr,sizeof(server_addr));//把一段内存区的内容全部设置为0server_addr.sin_family=AF_INET;server_addr.sin_addr.s_addr=htons(INADDR_ANY);server_addr.sin_port=htons(HELLO_WORLD_SERVER_PORT);//创建用于internet的流协议(TCP)socket,用server_socket代表服务器socketintserver_socket=socket(PF_INET,SOCK_STREAM,0);if(server_socket0){printf(CreateSocketFailed!);exit(1);}{intopt=1;setsockopt(server_socket,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt));4142434445464748495051525354555657585960616263646566676869707172737475767778798081828384}//把socket和socket地址结构联系起来if(bind(server_socket,(structsockaddr*)&server_addr,sizeof(server_addr))){printf(ServerBindPort:%dFailed!,HELLO_WORLD_SERVER_PORT);exit(1);}//server_socket用于监听if(listen(server_socket,LENGTH_OF_LISTEN_QUEUE)){printf(ServerListenFailed!);exit(1);}while(1)//服务器端要一直运行{//定义客户端的socket地址结构client_addrstructsockaddr_inclient_addr;socklen_tlength=sizeof(client_addr);//接受一个到server_socket代表的socket的一个连接//如果没有连接请求,就等待到有连接请求--这是accept函数的特性//accept函数返回一个新的socket,这个socket(new_server_socket)用于同连接到的客户的通信//new_server_socket代表了服务器和客户端之间的一个通信通道//accept函数把连接到的客户端信息填写到客户端的socket地址结构client_addr中intnew_server_socket=accept(server_socket,(structsockaddr*)&client_addr,&length);if(new_server_socket0){printf(ServerAcceptFailed!\n);break;}charbuffer[BUFFER_SIZE];bzero(buffer,BUFFER_SIZE);length=recv(new_server_socket,buffer,BUFFER_SIZE,0);if(length0){printf(ServerRecieveDataFailed!\n);break;}charfile_name[FILE_NAME_MAX_SIZE+1];858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119bzero(file_name,FILE_NAME_MAX_SIZE+1);strncpy(file_name,buffer,strlen(buffer)FILE_NAME_MAX_SIZE?FILE_NAME_MAX_SIZE:strlen(buffer));//intfp=open(file_name,O_RDONLY);//if(fp0)printf(%s\n,file_name);FILE*fp=fopen(file_name,r);if(NULL==fp){printf(File:\t%sNotFound\n,file_name);}else{bzero(buffer,BUFFER_SIZE);intfile_block_length=0;//while((file_block_length=read(fp,buffer,BUFFER_SIZE))0)while((file_block_length=fread(buffer,sizeof(char),BUFFER_SIZE,fp))0){printf(file_block_length=%d\n,file_block_length);//发送buffer中的字符串到new_server_socket,实际是给客户端if(send(new_server_socket,buffer,file_block_length,0)0){printf(SendFile:\t%sFailed\n,file_name);break;}bzero(buffer,BUFFER_SIZE);}//close(fp);fclose(fp);printf(File:\t%sTransferFinished\n,file_name);}//关闭与客户端的连接close(new_server_socket);}//关闭监听用的socketclose(server_socket);return0;}2.[代码]c代码client部分?1client.c23456789101112131415161718192021222324252627282930313233343536373839404142434445#includenetinet/in.h//forsockaddr_in#includesys/types.h//forsocket#includesys/socket.h//forsocket#includestdio.h//forprintf#includestdlib.h//forexit#includestring.h//forbzero/*#includesys/types.h#includesys/stat.h#includefcntl.h#includeunistd.h*/#defineHELLO_WORLD_SERVER_PORT6666#defineBUFFER_SIZE1024#defineFILE_NAME_MAX_SIZE512intmain(intargc,char**argv){if(argc!=2){printf(Usage:./%sServerIPAddress\n,argv[0]);exit(1);}//设置一个socket地址结构client_addr,代表客户机internet地址,端口structsockaddr_inclient_addr;bzero(&client_addr,sizeof(client_addr));//把一段内存区的内容全部设置为0client_addr.sin_family=AF_INET;//internet协议族client_addr.sin_addr.s_addr=htons(INADDR_ANY);//INADDR_ANY表示自动获取本机地址client_addr.sin_port=htons(0);//0表示让系统自动分配一个空闲端口//创建用于internet的流协议(TCP)socket,用client_socket代表客户机socketintclient_socket=socket(AF_INET,SOCK_STREAM,0);if(client_socket0){printf(CreateSocketFailed!\n);exit(1);}//把客户机的socket和客户机的socket地址结构联系起来if(bind(client_socket,(structsockaddr*)&client_addr,sizeof(client_addr))){printf(ClientBindPortFailed!\n);4647484950515253545556575859606162636465666768697071727374757677787980818283848586878889exit(1);}//设置一个socket地址结构server_addr,代表服务器的internet地址,端口structsockaddr_inserver_addr;bzero(&server_addr,sizeof(server_addr));server_addr.sin_family=AF_INET;if(inet_aton(argv[1],&server_addr.sin_addr)==0)//服务器的IP地址来自程序的参数{printf(ServerIPAddressError!\n);exit(1);}server_addr.sin_port=htons(HELLO_WORLD_SERVER_PORT);socklen_tserver_addr_length=sizeof(server_addr);//向服务器发起连接,连接成功后client_socket代表了客户机和服务器的一个socket连接if(connect(client_socket,(structsockaddr*)&server_addr,server_addr_length)0){printf(CanNotConnectTo%s!\n,argv[1]);exit(1);}charfile_name[FILE_NAME_MAX_SIZE+1];bzero(file_name,FILE_NAME_MAX_SIZE+1);printf(PleaseInputFileNameOnServer:\t);scanf(%s,file_name);charbuffer[BUFFER_SIZE];bzero(buffer,BUFFER_SIZE);strncpy(buffer,fi
本文标题:server和client简单例子
链接地址:https://www.777doc.com/doc-4630595 .html