记录下来,供自己学习!

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)的更多相关文章

  1. Windows phone 8 学习笔记(2) 数据文件操作

    原文:Windows phone 8 学习笔记(2) 数据文件操作 Windows phone 8 应用用于数据文件存储访问的位置仅仅限于安装文件夹.本地文件夹(独立存储空间).媒体库和SD卡四个地方 ...

  2. java之jvm学习笔记三(Class文件检验器)

    java之jvm学习笔记三(Class文件检验器) 前面的学习我们知道了class文件被类装载器所装载,但是在装载class文件之前或之后,class文件实际上还需要被校验,这就是今天的学习主题,cl ...

  3. thinkphp学习笔记2—入口文件

    原文:thinkphp学习笔记2-入口文件 在thinkphp中有两个入口文件,一个是项目的入口文件,是index.php在主目录里面,还有一个是thinkphp框架的的入口文件,放在框架目录下面如: ...

  4. matlab学习笔记5--低级文件输入输出函数

    一起来学matlab-matlab学习笔记5 低级文件输入输出函数 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考书籍 <matlab 程序设计与综合应用>张德丰等著 感谢张 ...

  5. Windows phone 8 学习笔记(2) 数据文件操作(转)

    Windows phone 8 应用用于数据文件存储访问的位置仅仅限于安装文件夹.本地文件夹(独立存储空间).媒体库和SD卡四个地方.本节主要讲解它们的用法以及相关限制性.另外包括本地数据库的使用方式 ...

  6. [原创]java WEB学习笔记49:文件上传基础,基于表单的文件上传,使用fileuoload 组件

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  7. Socket 学习笔记 01 常用函数

    常用方法 创建套接字: socket()    绑定本机端口: bind()    建立连接: connect(),accept()    侦听端口: listen()    数据传输: send() ...

  8. Python学习笔记之从文件中读取数据

    10-1 Python 学习笔记:在文本编辑器中新建一个文件,写几句话来总结一下你至此学到的Python 知识,其中每一行都以“In Python you can”打头.将这个文件命名为learnin ...

  9. matlab学习笔记4--多媒体文件的保存和读取

    一起来学matlab-matlab学习笔记4 数据导入和导出_2 多媒体文件的保存和读取 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考书籍 <matlab 程序设计与综合应用&g ...

随机推荐

  1. HDU3507 print artical

    题目大意:有N个数字a[N],每输出连续的一串,它的费用是 “这行数字的平方加上一个常数M”.问如何输出使得总费用最小.(n<=500000) 分析:动态规划方程为:dp[i]=dp[j]+M+ ...

  2. c++随机数生成

    算机的随机数都是由伪随机数,即是由小M多项式序列生成的,其中产生每个小序列都有一个初始值,即随机种子.(注意: 小M多项式序列的周期是65535,即每次利用一个随机种子生成的随机数的周期是65535, ...

  3. PHP中的中文截取乱码问题_gb2312_utf-8

    一.字符串编码为gb2312,一个中文占俩字节 public static function chinesesubstr($str, $start, $len) { // $str指字符串,$star ...

  4. solr基于tomcat增加主界面登录权限

    tomcat-user.xml增加下面标签(用户名,密码,角色)<user username="admin" password="new-password" ...

  5. DBA_Oracle Archive Log的基本应用和启用(概念)

    2014-11-15 Created By BaoXinjian

  6. PLSQL_Oracle面试整理(汇总)

    2014-08-16 Created By BaoXinjian

  7. python 爬虫抓取心得

    quanwei9958 转自 python 爬虫抓取心得分享 urllib.quote('要编码的字符串') 如果你要在url请求里面放入中文,对相应的中文进行编码的话,可以用: urllib.quo ...

  8. pythomn

    等我学号数据结构,明年就去找三胖 前端,写js相关代码.了解前端架构 而非页面设计 主要使用的是脚本语言 了解http web相关技术等 知道页面调优 浏览器加载方式等

  9. 点击Listview弹出PopWindow的用法

    先来张截图: 如图点击listview中的Item在item的下方弹出一个框框,这个框框就是用的Popwindow.    用法很简单:首先写一个PopupWindow并自定义它的布局:       ...

  10. Eclipse中generate getter and setter对boolean的反应

    有点意思 , 如果变量是boolean类型的  ,就会生成isxxx开头的getter方法 , 但如果是Boolean对象的 , 就会生成getterxx开头的getter对象. 例如 Boolean ...