socket学习笔记——实现收发文件(Windows)

记录下来,供自己学习!

server.c

 1 #define _CRT_SECURE_NO_DEPRECATE
 2 #include <stdio.h>
 3 #include <stdlib.h>
 4 #include <string.h>
 5 #include <WinSock2.h>
 6 #define BUF_SIZE 1024
 7 char buf[BUF_SIZE], message[BUF_SIZE], file_name[BUF_SIZE];
 8 void error_handling(char* message);
 9 int main(int argc, char* argv[])
10 {
11     WSADATA wsadata;
12     if (WSAStartup(MAKEWORD(2, 2), &wsadata) != 0)
13         error_handling("WSAStartup error");
14
15     SOCKET hServSock, hClntSock;
16     SOCKADDR_IN servAddr, clntAddr;
17     int clntAdrSize, length;
18
19     if (argc != 2)
20     {
21         printf("usage:%s <ip> <port>\n", argv[1]);
22         exit(1);
23     }
24
25     hServSock = socket(PF_INET, SOCK_STREAM, 0);
26     if (hServSock == INVALID_SOCKET)
27         error_handling("socket error");
28
29     memset(&servAddr, 0, sizeof(servAddr));
30     servAddr.sin_family = AF_INET;
31     servAddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
32     servAddr.sin_port = htons(atoi(argv[1]));
33
34     if (bind(hServSock, (SOCKADDR*)&servAddr, sizeof(servAddr)) == SOCKET_ERROR)
35         error_handling("bind error");
36     if (listen(hServSock, 3) == SOCKET_ERROR)
37         error_handling("listen error");
38     while (1)
39     {
40         clntAdrSize = sizeof(clntAddr);
41         hClntSock = accept(hServSock, (struct sockaddr*)&clntAddr, &clntAdrSize);
42         if (hClntSock == SOCKET_ERROR)
43             error_handling("accept() error");
44         else
45             printf("connecting client......\n");
46
47         if (recv(hClntSock, message, sizeof(message), 0) < 0)
48             error_handling("recv error");
49
50         strncpy(file_name, message, strlen(message));
51
52         FILE  *fp;
53         fp = fopen(file_name, "r");
54         if (fp == NULL)
55         {
56             printf("fopen %s error\n", file_name);
57             exit(1);
58         }
59         else
60         {
61             while ((length = fread(buf, sizeof(char), 1024, fp)) > 0)
62             {
63                 if (send(hClntSock, buf, length, 0) < 0)
64                     error_handling("send error");
65                 else
66                     printf("send %s successful\n", file_name);
67                 memset(message, 0,sizeof(message));
68                 memset(file_name, 0, sizeof(file_name));
69             }
70             fclose(fp);
71         }
72         closesocket(hClntSock);
73     }
74     closesocket(hServSock);
75     WSACleanup();
76     return 0;
77 }
78
79 void error_handling(char* message)
80 {
81     fputs(message, stderr);
82     fputc(‘\n‘, stderr);
83     exit(1);
84 }

client.c

 1 #define _WINSOCK_DEPRECATED_NO_WARNINGS
 2 #define _CRT_SECURE_NO_WARNINGS
 3 #include <stdio.h>
 4 #include <stdlib.h>
 5 #include <WinSock2.h>
 6 void error_handling(char* message);
 7 #define BUF_SIZE 1024
 8 int main(int argc, char* argv[])
 9 {
10     WSADATA wsadata;
11     if (WSAStartup(MAKEWORD(2, 2), &wsadata) != 0)
12         error_handling("WSADTA error\n");
13
14     SOCKADDR_IN servAddr;
15     SOCKET hSocket;
16     char buf[BUF_SIZE];
17     char message[BUF_SIZE];
18     int length;
19     FILE* fp;
20     if (argc != 3)
21     {
22         printf("usage:%s <ip><port>", argv[1]);
23         exit(1);
24     }
25
26     hSocket = socket(PF_INET, SOCK_STREAM, 0);
27     if (hSocket == SOCKET_ERROR)
28         error_handling("socket error");
29
30     memset(&servAddr, 0, sizeof(servAddr));
31     servAddr.sin_family = AF_INET;
32     servAddr.sin_addr.S_un.S_addr = inet_addr(argv[1]);
33     servAddr.sin_port = htons(atoi(argv[2]));
34
35     if (connect(hSocket, (SOCKADDR*)&servAddr, sizeof(servAddr)) == SOCKET_ERROR)
36         error_handling("connect error");
37     else
38         printf("connecting......\n");
39
40     fp = fopen("F:\\2.txt", "w");
41     if (NULL == fp)
42     {
43         error_handling("fopen error");
44     }
45
46     printf("enter file‘s name: ");
47     scanf("%s", message);
48     send(hSocket, message, sizeof(message), 0);
49     while ((length = recv(hSocket, buf, BUF_SIZE, 0)) > 0)
50     {
51         printf("%d", length);
52         if (fwrite(buf, sizeof(char), length, fp) < length)
53         {
54             printf("fwrite error");
55             exit(1);
56         }
57         else
58         {
59             printf("receve successful\n");
60         }
61     }
62     fclose(fp);
63     closesocket(hSocket);
64     WSACleanup();
65     return 0;
66 }
67 void error_handling(char* message)
68 {
69     fputs(message, stderr);
70     fputc(‘\n‘, stderr);
71     exit(1);
72 }
时间: 2024-11-09 00:31:41

socket学习笔记——实现收发文件(Windows)的相关文章

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

Windows phone 8 应用用于数据文件存储访问的位置仅仅限于安装文件夹.本地文件夹(独立存储空间).媒体库和SD卡四个地方.本节主要讲解它们的用法以及相关限制性.另外包括本地数据库的使用方式. 快速导航:一.分析各类数据文件存储方式二.安装文件夹三.本地文件夹(独立存储空间)四.媒体库操作五.本地数据库 一.分析各类数据文件存储方式 1)安装文件夹 安装文件夹即应用安装以后的磁盘根文件夹,它提供只读的访问权限.它在手机中对应的路径为" C:\Data\Programs\{XXXXXXX

C++ Socket 学习笔记

Socket学习笔记 以下均为整理,做参考之用. IP Address IP地址是指互联网协议地址(英语:Internet Protocol Address,又译为网际协议地址),是IP Address的缩写.IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异. IP地址被用来给Internet上的电脑一个编号.大家日常见到的情况是每台联网的PC上都需要有IP地址,才能正常通信.我们可以把"个人电脑"比作"

NFC学习笔记——三(在windows操作系统上安装libnfc)

本篇翻译文章: 这篇文章主要是说明如何在windows操作系统上安装.配置和使用libnfc. 一.基本信息 1.操作系统: Windows Vista Home Premium SP 2 2.硬件信息: System: Dell Inspiron 1720 Processor: Intel Core 2 Duo CPU T9300 @ 2.5GHz 2.5GHz System type: 32-bit Operating System 3.所需软件: 在windows操作系统上安装软件需要下列

Linux 程序设计学习笔记----Linux下文件类型和属性管理

转载请注明出处:http://blog.csdn.net/suool/article/details/38318225 部分内容整理自网络,在此感谢各位大神. Linux文件类型和权限 数据表示 文件属性存储结构体Inode的成员变量i_mode存储着该文件的文件类型和权限信息.该变量为short int类型. 这个16位变量的各个位功能划分为: 第0-8位为权限位,为别对应拥有者(user),同组其他用户(group)和其他用户(other)的读R写W和执行X权限. 第9-11位是权限修饰位,

python基础教程_学习笔记21:文件和素材

文件和素材 打开文件 open函数用来打开文件,语法如下: open([name[,mode[,buffering]]) open函数使用一个文件名作为唯一的强制参数,然后返回一个文件对象.模式(mode)和缓冲(buffering)参数都是可选的. >>> f=open(r'D:\software(x86)\Python27\README.txt') 如果文件不存在,则出现错误: >>> f=open(r'D:\software(x86)\Python27\READM

Linux 程序设计学习笔记----ANSI C 文件I/O管理

转载请注明出处:http://blog.csdn.net/suool/article/details/38129201 问题引入 文件的种类 根据数据存储的方式不同,可以将文件分为文本文件和二进制文件.具体的区别和关系如下: 文本文件与二进制文件在计算机文件系统中的物理存储都是二进制的,也就是在物理存储方面没有区别都是01码,这个没有异议,他们的区别主要在逻辑存储上,也就是编码上. 文本文件格式存储时是将值作为字符然后存入其字符编码的二进制,文本文件用'字符'作为单位来表示和存储数据,比如对于1

python学习笔记2—python文件类型、变量、数值、字符串、元组、列表、字典

python学习笔记2--python文件类型.变量.数值.字符串.元组.列表.字典 一.Python文件类型 1.源代码 python源代码文件以.py为扩展名,由pyton程序解释,不需要编译 [[email protected] day01]# vim 1.py #!/usr/bin/python        print 'hello world!' [[email protected] day01]# python 1.py hello world! 2.字节代码 Python源码文件

JAVA学习笔记 -- 把资源文件打包到jar包

初学GUI,用Eclipse导出jar包,设定的最小化图标不能显示(hello.png文件放在项目的根目录下).代码如下: import javax.swing.JFrame; import java.awt.Toolkit; import java.awt.Image; import java.net.URL; public class GUITest { public static void main(String[] args) { JFrame frame = new JFrame();

JAVA Socket学习笔记20140618

2014-06-18  23.59 http://blog.csdn.net/kongxx/article/details/7288896 http://blog.csdn.net/wwww1988600/article/details/8923927 http://blog.csdn.net/xunianchong/article/details/16358077 http://blog.csdn.net/wwww1988600/article/details/8924081 http://w