socket学习笔记——实现收发文件(Windows)
记录下来,供自己学习!
server.c
#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <WinSock2.h>
#define BUF_SIZE 1024
char buf[BUF_SIZE], message[BUF_SIZE], file_name[BUF_SIZE];
void error_handling(char* message);
int main(int argc, char* argv[])
{
WSADATA wsadata;
if (WSAStartup(MAKEWORD(, ), &wsadata) != )
error_handling("WSAStartup error"); SOCKET hServSock, hClntSock;
SOCKADDR_IN servAddr, clntAddr;
int clntAdrSize, length; if (argc != )
{
printf("usage:%s <ip> <port>\n", argv[]);
exit();
} hServSock = socket(PF_INET, SOCK_STREAM, );
if (hServSock == INVALID_SOCKET)
error_handling("socket error"); memset(&servAddr, , sizeof(servAddr));
servAddr.sin_family = AF_INET;
servAddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
servAddr.sin_port = htons(atoi(argv[])); if (bind(hServSock, (SOCKADDR*)&servAddr, sizeof(servAddr)) == SOCKET_ERROR)
error_handling("bind error");
if (listen(hServSock, ) == SOCKET_ERROR)
error_handling("listen error");
while ()
{
clntAdrSize = sizeof(clntAddr);
hClntSock = accept(hServSock, (struct sockaddr*)&clntAddr, &clntAdrSize);
if (hClntSock == SOCKET_ERROR)
error_handling("accept() error");
else
printf("connecting client......\n"); if (recv(hClntSock, message, sizeof(message), ) < )
error_handling("recv error"); strncpy(file_name, message, strlen(message)); FILE *fp;
fp = fopen(file_name, "r");
if (fp == NULL)
{
printf("fopen %s error\n", file_name);
exit();
}
else
{
while ((length = fread(buf, sizeof(char), , fp)) > )
{
if (send(hClntSock, buf, length, ) < )
error_handling("send error");
else
printf("send %s successful\n", file_name);
memset(message, ,sizeof(message));
memset(file_name, , sizeof(file_name));
}
fclose(fp);
}
closesocket(hClntSock);
}
closesocket(hServSock);
WSACleanup();
return ;
} void error_handling(char* message)
{
fputs(message, stderr);
fputc('\n', stderr);
exit();
}
client.c
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <WinSock2.h>
void error_handling(char* message);
#define BUF_SIZE 1024
int main(int argc, char* argv[])
{
WSADATA wsadata;
if (WSAStartup(MAKEWORD(, ), &wsadata) != )
error_handling("WSADTA error\n"); SOCKADDR_IN servAddr;
SOCKET hSocket;
char buf[BUF_SIZE];
char message[BUF_SIZE];
int length;
FILE* fp;
if (argc != )
{
printf("usage:%s <ip><port>", argv[]);
exit();
} hSocket = socket(PF_INET, SOCK_STREAM, );
if (hSocket == SOCKET_ERROR)
error_handling("socket error"); memset(&servAddr, , sizeof(servAddr));
servAddr.sin_family = AF_INET;
servAddr.sin_addr.S_un.S_addr = inet_addr(argv[]);
servAddr.sin_port = htons(atoi(argv[])); if (connect(hSocket, (SOCKADDR*)&servAddr, sizeof(servAddr)) == SOCKET_ERROR)
error_handling("connect error");
else
printf("connecting......\n"); fp = fopen("F:\\2.txt", "w");
if (NULL == fp)
{
error_handling("fopen error");
} printf("enter file's name: ");
scanf("%s", message);
send(hSocket, message, sizeof(message), );
while ((length = recv(hSocket, buf, BUF_SIZE, )) > )
{
printf("%d", length);
if (fwrite(buf, sizeof(char), length, fp) < length)
{
printf("fwrite error");
exit();
}
else
{
printf("receve successful\n");
}
}
fclose(fp);
closesocket(hSocket);
WSACleanup();
return ;
}
void error_handling(char* message)
{
fputs(message, stderr);
fputc('\n', stderr);
exit();
}
socket学习笔记——实现收发文件(Windows)的更多相关文章
- Windows phone 8 学习笔记(2) 数据文件操作
原文:Windows phone 8 学习笔记(2) 数据文件操作 Windows phone 8 应用用于数据文件存储访问的位置仅仅限于安装文件夹.本地文件夹(独立存储空间).媒体库和SD卡四个地方 ...
- java之jvm学习笔记三(Class文件检验器)
java之jvm学习笔记三(Class文件检验器) 前面的学习我们知道了class文件被类装载器所装载,但是在装载class文件之前或之后,class文件实际上还需要被校验,这就是今天的学习主题,cl ...
- thinkphp学习笔记2—入口文件
原文:thinkphp学习笔记2-入口文件 在thinkphp中有两个入口文件,一个是项目的入口文件,是index.php在主目录里面,还有一个是thinkphp框架的的入口文件,放在框架目录下面如: ...
- matlab学习笔记5--低级文件输入输出函数
一起来学matlab-matlab学习笔记5 低级文件输入输出函数 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考书籍 <matlab 程序设计与综合应用>张德丰等著 感谢张 ...
- Windows phone 8 学习笔记(2) 数据文件操作(转)
Windows phone 8 应用用于数据文件存储访问的位置仅仅限于安装文件夹.本地文件夹(独立存储空间).媒体库和SD卡四个地方.本节主要讲解它们的用法以及相关限制性.另外包括本地数据库的使用方式 ...
- [原创]java WEB学习笔记49:文件上传基础,基于表单的文件上传,使用fileuoload 组件
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- Socket 学习笔记 01 常用函数
常用方法 创建套接字: socket() 绑定本机端口: bind() 建立连接: connect(),accept() 侦听端口: listen() 数据传输: send() ...
- Python学习笔记之从文件中读取数据
10-1 Python 学习笔记:在文本编辑器中新建一个文件,写几句话来总结一下你至此学到的Python 知识,其中每一行都以“In Python you can”打头.将这个文件命名为learnin ...
- matlab学习笔记4--多媒体文件的保存和读取
一起来学matlab-matlab学习笔记4 数据导入和导出_2 多媒体文件的保存和读取 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考书籍 <matlab 程序设计与综合应用&g ...
随机推荐
- solace
最近做了一个关于solace的项目,有时间来总结一下 1>. solace 介绍 2>. solace 应用(C#)
- [实变函数]5.4 一般可测函数的 Lebesgue 积分
1定义 (1)$f$ 在 $E$ 上积分确定 $\lra$ $\dps{\int_Ef^+(x)\rd x<+\infty}$ 或 $\dps{\int_Ef^-(x)\rd x<+\in ...
- Java多线程之线程中断
该例子说明,Sleep可以被中断,但是I/O和synchronized不能被中断. package Thread.Interrupting; import java.io.IOException; i ...
- android 技术相关Blog
android 技术相关 LVXIANGAN的专栏 http://blog.csdn.net/LVXIANGAN/article/category/1101038 Android NFC 开发实例 h ...
- centos6.4搭建基于ftp的yum源让本地局域网服务器使用
1. 挂载centos6.4 DVD镜像[root@centos64 ~]# mount /dev/cdrom /mnt 2. 安装vsftp软件,启动vsftpd服务,拷贝centos6.4 DVD ...
- crmForm.SubmitCRMForm
其中函数功能及各参数意思. SubmitCRMForm( Mode, Validate, ForceSubmit, closeWindow) // we could use this f ...
- HTML readyState 属性 iframe onreadystatechange事件
-----------readyState--------------- 定义和用法 readyState 属性返回当前文档的状态(载入中……). 该属性返回以下值: uninitialized - ...
- 在MS CRM 4.0中引用JS文件
引用: http://blog.csdn.net/qzw4549689/article/details/6027987 1.编写好JS代码,在ISV目录下新建一个目录javascripts,将JS文件 ...
- poj 3026 Borg Maze 最小生成树 + 广搜
点击打开链接 Borg Maze Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7097 Accepted: 2389 ...
- POJ3352 Road Construction (双连通分量)
Road Construction Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Sub ...