ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:14.59KB ,
资源ID:13310905      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/13310905.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(利用流式套接字实现文件的传输文档格式.docx)为本站会员(b****2)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

利用流式套接字实现文件的传输文档格式.docx

1、客户端向服务器发送文件长度,4字节(定长数据)客户端向服务器文件容(变长数据)服务端接收完文件后,向客户端发送ok,以示成功接收客户端接收到OK后,关闭套接字服务器关闭套接字【实验环境】Dev c【实验作业】客户端:int tcp_client_fun_echo(FILE *fp,SOCKET s) int iResult; char sendlineMAXLINE,recvlineMAXLINE; char file20; char flong4; int i=0;/文件名发送控制 /初始化缓冲区 FILE *f;/写文件指针 char *buff;/读入文件容 uint32_t nFile

2、Len;/文件长度 printf(请输入文件名:n); scanf(%s,&file); f=fopen(file,rb if(f=NULL)打开文件失败或文件不存在! fseek(f,0,SEEK_END); nFileLen=ftell(f); rewind(f);/回到到文件头部 buff=(char *)malloc(nFileLen); iResult=fread(buff,1,nFileLen,f); if(iResult!=nFileLen) printf(读入文件错误! return 0; memset(sendline,0,MAXLINE); memset(recvline,

3、0,MAXLINE); while(i! recvlinei=*buff; i+; buff+; /文件名传输结束 sprintf(sendline,%s#%d%s,file,nFileLen,recvline); iResult=send(s,sendline,sizeof(sendline),0); if(iResult=SOCKET_ERROR) printf(send函数调用错误,错误号:%d,WSAGetLastError(); return -1; fclose(fp);文件发送完成! return iResult;服务器:int tcp_server_fun_echo(SOCKE

4、T s) FILE *fp; int iResult = 0; uint32_t nFileLen=1; char recvlineMAXLINE; char file10; memset(file,0,sizeof(file); memset(recvline,0,sizeof(recvline); for(;) iResult=recv(s,&filei,1,0);recv函数调用错误,错误号: if(filei=#) break; else filei=0 fp=fopen(file,w+ if(fp=NULL)文件打开失败! /接收文件长度 iResult=recv(s,flong,4

5、,0); sscanf(flong,nFileLen);iResult=recv(s,recvline,nFileLen,0); fputs(recvline,fp);文件接收成功!头文件(上次的实验报告中已经写过):#ifndef p_h/预处理指令,防止重复包含头文件 #includetime.hws2tcpip.hwinsock2.hwindows.h#pragma coment(lib,ws2_32.libusing namespace std;class CSocketFrame public: int start_up(); int clean_up(); int set_addr

6、ess(char *hname,char *sname,struct sockaddr_in *sap,char *protocol); int quit(SOCKET s); SOCKET tcp_server(ULONG uIP,USHORT uPort); SOCKET tcp_server(char *hname,char *sname); SOCKET tcp_client(char *hname,char *sname); SOCKET tcp_client(ULONG uIP,USHORT uPort);int CSocketFrame:start_up(void) WORD w

7、VersionRequested; WSADATA wsaData; wVersionRequested=MAKEWORD(2,2); iResult=WSAStartup(wVersionRequested,&wsaData);=0)WSAStartup 调用错误,错误号:%dn return -1; /* if(LOBYTE(wsaData.wVersion!=2|HIBYTE(wsaData.wVersion)!=2)无法找到可用的WSD版本n WSACleanup(); /告诉用户无法找到可用的WSD elseWS2.2初始化成功! */ return 0;clean_up(void)

8、 iResult=WSACleanup(); if(iResult=SOCKET_ERROR) /WSACleanup()调用失败 WSACleanup 调用错误,错误号:Winsocket dll释放成功!) ;set_address(char *hname,char *sname,struct sockaddr_in *sap,char *protocol) struct servent *sp; struct hostent *hp; char *endptr; unsigned short port; unsigned long ulAddr=INADDR_NONE; /将地址结构so

9、cketsddr_in初始化为0,并将地址族设为AF_INET memset(sap,0,sizeof(*sap); sap-sin_family=AF_INET; if(hname!=NULL) /如果hname不为空,转化地址格式 ulAddr=inet_addr(hname); if(ulAddr=INADDR_NONE|ulAddr=INADDR_ANY) /调用错误,调用gethostbyname获得主机地址 hp=gethostbyname(hname); if(hp=NULL) 未知的主机名,错误号: sap-sin_addr=*(struct in_addr *)hp-h_ad

10、dr;sin_addr.S_un.S_addr=ulAddr; /如果调用者没有指明一个主机名或地址,则设为通配地址 sap-sin_addr.s_addr=htonl(INADDR_ANY); /尝试转换sname为一个整数 port=(unsigned short)strtol(sname,&endptr,0); if(*endptr= /如果成功转化为网络字节序sin_port=htons(port); /如果失败,则假定是一个服务名称,通过getservbyname()函数获得端口号 sp=getservbyname(sname,protocol); if(sp=NULL)未知服务,错误号: sin_port=sp-s_port;quit(SOCKET s) int iResult=0; iResult=closesocket(s); printf(closesocket 调用

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1