C语言通过网络实现发送文件的一点记录
2013-04-01 23:00
591 查看
Code First.
Server.c代码分析。
1.引入一些头文件和dll.
2.服务器建立Socket套接字
View Code
Server.c代码分析。
1.引入一些头文件和dll.
#include <winsock2.h> #include <stdio.h> #include <sys/stat.h> #include <sys/types.h> #pragma comment(lib, "ws2_32.lib")
2.服务器建立Socket套接字
View Code
#include <stdio.h> #include <winSock2.h> #include <stdlib.h> #include <time.h> #include <sys/stat.h> #pragma comment(lib, "ws2_32.lib") /* 函数名:getFileSizeSystemCall(char * strFileName) 功能:获取指定文件的大小 参数: strFileName (char *):文件名 返回值: size (int):文件大小 */ int getFileSizeSystemCall(char * strFileName) { struct stat temp; stat(strFileName, &temp); return temp.st_size; } int getFileSize(char * strFileName){ FILE *fp; int size; if ((fp = fopen(strFileName,"rb")) == NULL) { printf("File open error\n"); return 0; } fseek(fp,0L,SEEK_END); size = ftell(fp); fclose(fp); return size; } void RecvFile(SOCKET sock,char *filename); void main(void) { WSADATA wsaData; SOCKET s; SOCKADDR_IN ServerAddr; int Port = 5151; // char msg1[128]; // char msg2[128]; WSAStartup(MAKEWORD(2,2), &wsaData); // 创建一个新的Socket来连接服务器 s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); // 填写客户端地址信息 // 端口为5150 // 服务器IP地址为"136.149.3.29",注意使用inet_addr将IP地址转换为网络格式 ServerAddr.sin_family = AF_INET; ServerAddr.sin_port = htons(Port); ServerAddr.sin_addr.s_addr = inet_addr("10.160.17.141");//192.168.1.103 // 向服务器发出连接请求 if ( connect(s, (SOCKADDR *) &ServerAddr, sizeof(ServerAddr)) == SOCKET_ERROR) { printf("Connection Error....\n"); return ; } printf("Connectd....\n"); // recv(s,msg1,sizeof(msg1),0); // recv(s,msg2,sizeof(msg2),0); // printf("msg = %s\n",msg1); // printf("msg = %s\n",msg2); RecvFile(s,"G:\\test.rmvb"); // 新的连接建立后,就可以互相通信了,在这个简单的例子中,我们直接关闭连接, // 并关闭监听Socket,然后退出应用程序 closesocket(s); // 释放Windows Socket DLL的相关资源 WSACleanup(); getchar(); } void RecvFile(SOCKET sock,char *filename){ FILE *fp;//文件指针 char buf[8192];//缓冲区 int filesize ; int blocks; int i; int res; int count ; printf("开始接收文件..\n"); //接收文件大小 recv(sock,(char *)&filesize,sizeof(filesize),0); printf("接收文件大小: %d\n",filesize); fp = fopen(filename,"wb+"); if (fp == NULL) { printf("Client...文件打开错误..\n"); exit(1); } //接收数据 blocks = filesize / sizeof(buf) + 1; printf("块大小: %d\n",blocks); for (i=0; i<blocks;++i) { //清空缓冲区 memset(buf,0,sizeof(buf)); //接收数据 res = recv(sock,buf,sizeof(buf),0); //写入数据 count = fwrite(buf,sizeof(buf),1,fp); printf("第 %d 次是否写入: %d\n",i+1,count); printf("第 %d 次接收: %d\n", i+1,res); } //关闭文件 fclose(fp); }
相关文章推荐
- c语言实现socket服务端/客户端通过tcp传送文件
- 通过配置文件(web.config)实现邮件发送
- c语言 实现按行读取文件。把内容按照第三种内存模型打包数据传出,把行数通过函数参数传出
- windows7如何不产生本地文件浏览记录(通过注册表实现)
- 通过脚本实现从日志文件中提取时间最近的几条记录
- 【ios学习记录】- 通过nib文件实现自定义表视图单元
- MFC Socket实现Server和Client发送文件学习记录
- 如何使用btsync通过网络实现计算机间的文件共享
- windows8下如何设置不保存本地文件浏览记录(通过注册表实现)
- 使用C#实现通过网络发送和播放麦克风的声音
- 通过ANT实现jmeter批量执行脚本、生成报告、发送邮件全套build.xml文件
- Linux下通过socket通信实现客户端向服务器发送文件
- 通过ANT实现jmeter批量执行脚本、生成报告、发送邮件全套build.xml文件
- Windows Mobile下通过蓝牙(Bluetooth)发送大文件的实现
- VMware虚拟机的三种网络连接方式以及主机向虚拟机发送文件的实现
- c语言实现在文件中记录20条最新的log记录
- Android开发入门之网络通信(通过HTTP协议实现文件上传)
- 通过jcifs实现java访问网络共享文件
- linux中用C语言实现的自动在文件末尾不断添加记录的完整代码
- Windows Mobile下通过蓝牙(Bluetooth)发送大文件的实现