socket.docx
- 文档编号:30058796
- 上传时间:2023-08-04
- 格式:DOCX
- 页数:21
- 大小:17.85KB
socket.docx
《socket.docx》由会员分享,可在线阅读,更多相关《socket.docx(21页珍藏版)》请在冰豆网上搜索。
socket
基于Linux下的应用socket来实现上传和下载功能的应用:
Server端:
common.h文件内代码
/*Author:
cuizong007*/
/*Time:
2011-09-27*/
/*Version:
3.0*/
/*E-mail:
cuizong007@*/
#ifndefCOMMON_H_
#defineCOMMON_H_
#include
#include
#include
#include
#include
#include
#include
#include
#include
#defineMAXLINE1024
#defineSERVER_PORT8000
structsockaddr_inserver_addr,client_addr;
intserver_read_num,server_write_num;
charbuf[MAXLINE];
intserver_openfd;
interrno;
externintS_Up_or_Down(intconnectfd);
externintS_Mysocket_Upload(intconnectfd);
externintS_Mysocket_Download(intconnectfd);
#endif
s_main.c文件的代码
/*Author:
cuizong007*/
/*Date:
2011-09-27*/
/*Version:
3.0*/
/*E-mail:
cuizong007@*/
#include"common.h"
intmain(intargc,char*argv[])
{
structsockaddr_inserver_addr,client_addr;
intsocketfd,bindfd,listenfd,connfd;
socklen_tclient_addr_len;
socketfd=socket(AF_INET,SOCK_STREAM,0);
if(socketfd<0)
{
fprintf(stderr,"Createsocketfailed.\n");
exit
(1);
}
bzero(&server_addr,sizeof(server_addr));//zeroclearing
server_addr.sin_family=AF_INET;
server_addr.sin_addr.s_addr=htonl(INADDR_ANY);
server_addr.sin_port=htons(SERVER_PORT);
bindfd=bind(socketfd,(structsockaddr*)&server_addr,sizeof(server_addr));
if(bindfd<0)
{
fprintf(stderr,"bindaddessfailed:
%s\n",strerror(errno));
exit
(1);
}
listenfd=listen(socketfd,20);
if(listenfd<0)
{
fprintf(stderr,"listenfaild:
%s\n",strerror(errno));
exit
(1);
}
printf("Acceptingconnection...\n");
while
(1)
{
client_addr_len=sizeof(client_addr);
connfd=accept(socketfd,(structsockaddr*)&client_addr,
&client_addr_len);
if(connfd<0)
{
fprintf(stderr,"Acceptconnectionfailed.\n");
exit
(1);
}
//choiceupordown
S_Up_or_Down(connfd);
}
return0;
}
s_upanddown.c文件内的代码:
/*Author:
cuizong007*/
/*Date:
2011-09-26*/
/*Version:
3.0*/
/*E-mail:
cuizong007@*/
#include"common.h"
intS_Up_or_Down(intconnfd)
{
charch;
//Receiveupordownmark('u'or'U'->upload;'d'or'D'->download).
server_read_num=read(connfd,&ch,1);
if(server_read_num!
=1)
{
fprintf(stderr,"Server:
choiceUpdataorDownloadfailed.\n");
exit
(1);
}
if(ch=='u'||ch=='U')
{
printf("ClientchoiceUploadmodel.\n");
}
if(ch=='d'||ch=='D')
{
printf("ClientchoiceDownloadmodel.\n");
}
switch(ch)
{
//Upload
case'u':
case'U':
S_Mysocket_Upload(connfd);
break;
//Download
case'd':
case'D':
S_Mysocket_Download(connfd);
break;
defalut:
break;
}
return0;
}
s_upload.c文件内的代码:
/*Author:
cuizong007*/
/*Date:
2011-09-27*/
/*Version:
3.0*/
/*E-mail:
cuizong007@*/
#include"common.h"
intS_Mysocket_Upload(intconnfd)
{
charfilename[255],check[1];
inttotal;
//ReceiveUploadfilenamelength
server_read_num=read(connfd,check,1);
if(server_read_num==-1)
{
fprintf(stderr,"Server:
ReadUpload%sfilenamefailed:
%s.\n",
filename,strerror(errno));
exit
(1);
}
//ReceiveUploadfilename
server_read_num=read(connfd,filename,check[0]);
if(server_read_num!
=check[0])
{
fprintf(stderr,"Server:
ReadUpload%sfilenamelengthfailed:
%s.\n",
filename,strerror(errno));
exit
(1);
}
filename[check[0]]='\0';
printf("Uploadfilename:
%s.\n",filename);
server_openfd=open(filename,O_WRONLY|O_CREAT,0644);
if(server_openfd>0)
{
printf("Server:
Successfullyofopenanewfilename.\n");
}
else
{
fprintf(stderr,"Server:
OpenUpload%sfilenamefailed:
%s\n",
filename,strerror(errno));
exit
(1);
}
//Upload:
ReadandWritemodel
while
(1)
{
total=0;
server_read_num=read(connfd,buf,MAXLINE);
if(server_read_num<0)
{
printf("Upload%sfilenamefailed.\n",filename);
break;
}
if(server_read_num==0)
{
printf("Upload%sfilenamesuccessfully.\n",filename);
break;
}
if(total!
=server_read_num)
{
server_write_num=write(server_openfd,buf+total,
server_read_num-total);
total=total+server_write_num;
}
}
return0;
}
s_download.c文件内的代码:
/*Author:
cuizong007*/
/*Date:
2011-09-27*/
/*Version:
3.0*/
/*E-mail:
cuizong007@*/
#include"common.h"
intS_Mysocket_Download(intconnfd)
{
charfilename[255],check[1];
inttotal;
//ReceiveDownloadfilenamelength
server_read_num=read(connfd,check,1);
if(server_read_num!
=1)
{
fprintf(stderr,"Server:
ReadDownloadfilenamelength:
%s\n",
strerror(errno));
exit
(1);
}
server_read_num=read(connfd,filename,check[0]);
if(server_read_num { fprintf(stderr,"Server: ReadDownloadfilenamelengthfailed: %s\n", strerror(errno)); exit (1); } filename[check[0]]='\0'; printf("Downloadfilename: %s.\n",filename); server_openfd=open(filename,O_RDONLY); if(server_openfd>0) { printf("Open%ssuccessfully.\n",filename); printf("StartDownloading...\n"); } else { fprintf(stderr,"Server: Open%sfilefailed: %s\n", filename,strerror(errno)); exit (1); } //Download: ReadandWritemodel while (1) { total=0; server_read_num=read(server_openfd,buf,MAXLINE); if(server_read_num<0) { printf("YouDownload%sfilefailed.\n",filename); break; } if(server_read_num==0) { printf("Transfer%sfileover.\n",filename); printf("YouDownload%sfilesuccessfully.\n",filename); close(connfd); close(server_openfd); printf("\n"); break; } if(total! =server_read_num) { server_write_num=write(connfd,buf+total,server_read_num-total); total=server_write_num+total; } } return0; } Makefile文件内的代码: #Bycuizong007at2011-09-27 SRC=$(wildcard*.c) CC=$(CROSS_COMPILE)gcc CFLAGES=$(CROSS_COMPILE)-Wall-g LDFLAGES= OBJ=$(patsubst%.c,%.o,$(SRC)) TARGETS=main .PHONY: allclean all: $(TARGETS) $(TARGETS): $(OBJ) $(CC)-o$@$^$(LDFLAGES) %o: %.c $(CC)-o$@$<$(CFLAGS) clean: rm-rf$(OBJ) rm-rf*.o*~a.out$(TARGETS) Client端: common.h文件内的代码: /*client2.cAuthor: Cuizong007*/ /*Time: 2011-09-21*/ /*Version: 2.0*/ /*E-mail: cuizong007@*/ #ifndefCOMMON_H_ #defineCOMMON_H_ #include #include #include #include #include #include #include #include #include #include #defineMAXLINE1024 #defineSERVER_PORT8000 #defineFILENAM_MAX255 charbuf[MAXLINE]; externintC_Mysocket_Upload(intsocketfd); externintC_Mysocket_Download(intsocketfd); #endif c_main.c文件内的代码: /*Author: cuizong007*/ /*Date: 2011-09-27*/ /*Version: 3.0*/ /*E-mail: cuizong007@*/ #include"common.h" intmain(intargc,char*argv[]) { intsocketfd,connectfd,client_read_num,client_write_num; structsockaddr_inserver_addr; intfilename_len,total; charch; socketfd=socket(AF_INET,SOCK_STREAM,0); bzero(&server_addr,sizeof(server_addr));//zeroclearing server_addr.sin_family=AF_INET; inet_pton(AF_INET,"127.0.0.1",&server_addr.sin_addr); server_addr.sin_port=htons(SERVER_PORT); connectfd=connect(socketfd,(structsockaddr*)&server_addr,sizeof(server_addr)); if(connectfd<0) { fprintf(stderr,"Clientconnectfailed.\n"); exit (1); } fprintf(stderr,"Clientconnectsuccessfully.\n"); //TransferUporDownmodel printf("\tWelcometousecuizong007UpandDownsoftw\n"); //while (1) //{ printf("Pleasechoiceup(uorU)ordown(dorD).\n"); client_read_num=read(STDIN_FILENO,&ch,1); if(client_read_num<=0) { fprintf(stderr,"Client: ReadUporDownmodelfailed.\n"); exit (1); } client_write_num=write(socketfd,&ch,1); if(client_write_num<=0) { fprintf(stderr,"Client: Writecharacterfailed.\n"); exit (1); } switch(ch) { //Upload case'u': case'U': C_Mysocket_Upload(socketfd);//Uploadfunction break; //Download case'd': case'D': C_Mysocket_Download(socketfd);//Downloadfunction break; //Quitthisprogram case'q': case'Q': close(socketfd); printf("Thankyouusethissoftware.\n\tBye-Bye...\n"); exit(0); break; default: break; } //printf("Youinputawrongcharacter,pleaseagain! \n"); //} return0; } c_upload.c文件内的代码: /*Auther: cuizong007*/ /*Date: 2011-09-27*/ /*Version: 3.0*/ /*E-mail: cuizong007@*/ #include"common.h" intC_Mysocket_Upload(intsocketfd) { intclient_read_num,client_write_num,client_openfd; charfilename[255],check[1]; intfilename_len,total,i=0; //Transferfilename printf("PleaseinputyourwantUploadfilename.\n"); printf("Filename: "); scanf("%s",filename); printf("YouwanttoUploadfilenameis: %s.\n",filename); //Transferfilenamelength filename_len=strlen(filename)+1;//Without'\0' check[0]=filename_len; client_write_num=write(socketfd,check,1); printf("filenamelength: %d.\n",filename_len); client_write_num=write(socketfd,filename,filename_len); //OpenloalhostwillUploadfile client_openfd=open(filename,O_RDONLY); if(client_openfd<0) { fprintf(stderr,"Client: Open%sfilefailed.\n",filename); exit (1); } printf("Open%sfilesuccessfully.\n",filename); while (1) { total=0; client_read_num=read(client_openfd,buf,MAXLINE); if(client_read_num<0) { printf("Upload%sfilefailed.\n",filename); exit (1); } if(client_read_num==0) { printf("\nTransfer%sfileover.\n",filename); printf("YouUpload%sfilesuccessfully.\n",filename); close(socketfd); printf("Bye-Bye...\n"); exit(0); } if(total! =client_read_num) { client_write_n
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- socket