📄 client.c
字号:
/************************************* * SOCKET 连接:客户端程序 * * 短连接方式 * ************************************/#include <stdio.h>#include <sys/types.h>#include <sys/socket.h>#include <fcntl.h>#include <netinet/in.h>#include <arpa/inet.h>#include <netdb.h>#include <string.h>#include <stdlib.h>#define DATALEN 500int main(int argc, char *argv[]){ struct sockaddr_in sin; struct protoent *pProtoent; FILE *fp; char cDataBuf[DATALEN+1],cFile[50]; int sid,iType,iReadLen,iSendLen,iFirst,iFileSize; if(argc!=4) { printf("Usage: %s IP地址 端口号 协议类型[1-UDP 0-TCP]\n",argv[0]); exit(-1); } /* 参数配置 */ memset(&sin,0,sizeof(sin)); sin.sin_family=AF_INET; if((sin.sin_addr.s_addr=inet_addr(argv[1]))==INADDR_NONE) { printf(" IP格式转换错误 \n"); exit(-1); } if((sin.sin_port=htons((u_short)atoi(argv[2])))==0) { printf(" 端口格式转换错误 \n"); exit(-1); } if (atoi(argv[3])) { if ((pProtoent=getprotobyname("udp"))==0) { printf(" udp协议处理错误 \n"); exit(-1); } iType=SOCK_DGRAM; } else { if ((pProtoent=getprotobyname("tcp"))==0) { printf(" tcp协议处理错误 \n"); exit(-1); } iType=SOCK_STREAM; } if((sid=socket(AF_INET,iType,pProtoent->p_proto)) < 0) { printf(" socket 建立错误,请确定服务端进程已启动!\n"); exit(-1); } printf(" socket 建立成功! \n" ); /* 下面开始处理和服务端的消息传递 */ if(connect(sid,(struct sockaddr *)&sin,sizeof(sin))<0) { printf(" 连接失败 !\n"); exit(-1); } /* 发送数据报文 */ sprintf(cFile,"%s/dbase/test.txt",getenv("HOME")); if(( fp=fopen(cFile,"r"))==NULL ) { printf(" 打开文件:%s 失败\n",cFile); exit(-1); } fseek(fp,0,SEEK_END); iFileSize = ftell(fp); fseek(fp,0,SEEK_SET); iFirst = iReadLen =0; while(iFileSize>0) { memset(cDataBuf,0x0,sizeof(cDataBuf)); if(iFirst==0) { /* 第一个包说明文件长度*/ sprintf(cDataBuf,"%08ld",iFileSize); iSendLen = 8; iFirst = 1; } else { iReadLen=fread(cDataBuf,1,1024,fp); iSendLen = iReadLen; } if(send(sid,cDataBuf,iSendLen,0)<0) { printf(" 数据报文发送失败 !\n"); break; } iFileSize -=iSendLen; } fclose(fp); printf("发送成功,等待接收.....\n"); /* 接收报文 */ memset(cDataBuf,0x0,sizeof(cDataBuf)); if(recv(sid,cDataBuf,DATALEN,0) <0) { printf(" 数据报文接收失败 !\n"); exit(-1); } printf("收到的报文: %s\n",cDataBuf); shutdown(sid,0); close(sid); exit(0);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -