资源简介
计算机网络试验,TCP文件传输的设计与实现,要传输的文件放在Debug文件夹下,cmd调用或者.exe文件使用
代码片段和文件信息
////////////////////////////////////////
// 文件传送客户端 小文件123.txt 编号2号客户端
////////////////////////////////////////
#include
#include
#include
// 定义发送缓冲区大小
#define MAX_DATA_BLOCK_SIZE 8192
void error_exit(const char * msg int val);
void send_file(const char * file_name const char * ip u_short port);
// 主函数
int main(int argc char ** argv) {
u_short port;
if (argc == 3) {
// 如果不指定服务器端口,那么默认为 8888
send_file(argv[1] argv[2] 8888);
print_socket_detail(argv[1]);
} else if (argc == 4) {
// 用户指定了服务器端口
port = (u_short) atoi(argv[1]);
if (port == 0) {
error_exit(“非法的服务器端口“ -1);
} else {
send_file(argv[1] argv[2] port);
}
} else {
error_exit(“参数错误“ -1);
}
return 0;
}
void print_socket_detail(SOCKET s){
struct sockaddr_in name;
int namelen;
namelen = sizeof(name);
memset(&name0namelen);
getsockname(s(struct sockaddr*)&name&namelen);
printf(“peer: %s:%d\n“inet_ntoa(name.sin_addr)ntohs(name.sin_port));
}
// 打印错误、使用说明并退出程序
void error_exit(const char * msg int val) {
if (msg) {
printf(“%s\n\n“ msg);
}
printf(“使用方法:ft_client <文件名> <服务器 IP 地址> [服务器端口]\n“);
printf(“服务器端口是可选参数,默认为 8888\n\n“);
exit(val);
}
// 发送文件到服务器
void send_file(const char * file_name const char * ip u_short port) {
WSADATA wsaData;
SOCKET s;
FILE * fp;
struct sockaddr_in server_addr;
char data[MAX_DATA_BLOCK_SIZE];
int i;
int ret;
fp = fopen(file_name “rb“);
if (fp == NULL) {
printf(“无法打开文件\n“);
return;
}
WSAStartup(0x202 &wsaData);
// 创建套接字
s = socket(AF_INET SOCK_STREAM 0);
// 填写服务器的地址结构
memset((void *)&server_addr 0 sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = inet_addr(ip);
server_addr.sin_port = htons(port);
// 连接到服务器,注意观察是如何处理连接失败的
if (connect(s (struct sockaddr *)&server_addrsizeof(server_addr)) == SOCKET_ERROR) {
printf(“连接服务器失败\n“);
fclose(fp);
closesocket(s);
WSACleanup();
return;
}
// 首先发送文件名以及标志文件名结束的\0
printf(“发送文件名...\n“);
send(s file_name strlen(file_name) 0);
send(s “\0“ 1 0);
// 然后发送文件内容
// 注意观察缓冲区 data 是如何使用的,以及 fread、send 函数的返回值是如何处理的
printf(“发送文件内容“);
for (;;) {
memset((void *)data 0 sizeof(data));
i = fread(data 1 sizeof(data) fp);
if (i == 0) {
printf(“\n 发送成功\n“);
break;
}
ret = send(s data i 0);
putchar(‘.‘);
if (ret == SOCKET_ERROR) {
printf(“\n 发送失败,文件可能不完整\n“);
break;
}
}
fclose(fp);
closesocket(s);
WSACleanup();
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2019-03-28 19:02 TCP文件传输的设计与实现\
目录 0 2019-03-28 19:01 TCP文件传输的设计与实现\11.26\
目录 0 2019-03-28 19:01 TCP文件传输的设计与实现\11.26\test\
目录 0 2019-03-28 19:01 TCP文件传输的设计与实现\11.26\test\client\
文件 0 2018-11-25 22:02 TCP文件传输的设计与实现\11.26\test\client\123.txt
目录 0 2019-03-28 19:01 TCP文件传输的设计与实现\11.26\test\client\bin\
目录 0 2019-03-28 19:01 TCP文件传输的设计与实现\11.26\test\client\bin\Debug\
文件 39038 2018-11-26 09:01 TCP文件传输的设计与实现\11.26\test\client\bin\Debug\client.exe
文件 0 2018-11-26 08:35 TCP文件传输的设计与实现\11.26\test\client\bin\Debug\ly.txt
文件 1212 2018-11-28 16:41 TCP文件传输的设计与实现\11.26\test\client\client.cbp
文件 267 2018-11-27 13:04 TCP文件传输的设计与实现\11.26\test\client\client.depend
文件 356 2018-11-28 16:41 TCP文件传输的设计与实现\11.26\test\client\client.layout
文件 3080 2018-11-27 13:04 TCP文件传输的设计与实现\11.26\test\client\main.c
目录 0 2019-03-28 19:01 TCP文件传输的设计与实现\11.26\test\client\obj\
目录 0 2019-03-28 19:01 TCP文件传输的设计与实现\11.26\test\client\obj\Debug\
文件 6223 2018-11-27 13:04 TCP文件传输的设计与实现\11.26\test\client\obj\Debug\main.o
目录 0 2019-03-28 19:01 TCP文件传输的设计与实现\11.26\test\server\
文件 0 2018-11-26 11:58 TCP文件传输的设计与实现\11.26\test\server\123.txt
目录 0 2019-03-28 19:01 TCP文件传输的设计与实现\11.26\test\server\bin\
目录 0 2019-03-28 19:01 TCP文件传输的设计与实现\11.26\test\server\bin\Debug\
文件 38076 2018-11-26 08:51 TCP文件传输的设计与实现\11.26\test\server\bin\Debug\server.exe
文件 4480 2018-11-27 20:54 TCP文件传输的设计与实现\11.26\test\server\main.c
目录 0 2019-03-28 19:01 TCP文件传输的设计与实现\11.26\test\server\obj\
目录 0 2019-03-28 19:01 TCP文件传输的设计与实现\11.26\test\server\obj\Debug\
文件 6749 2018-11-27 20:54 TCP文件传输的设计与实现\11.26\test\server\obj\Debug\main.o
文件 1161 2018-11-25 20:50 TCP文件传输的设计与实现\11.26\test\server\server.cbp
文件 361 2018-11-26 11:54 TCP文件传输的设计与实现\11.26\test\server\server.depend
文件 358 2018-11-27 20:58 TCP文件传输的设计与实现\11.26\test\server\server.layout
目录 0 2019-03-28 19:01 TCP文件传输的设计与实现\11.26\多线程\
目录 0 2019-03-28 19:01 TCP文件传输的设计与实现\11.26\多线程\client\
目录 0 2019-03-28 19:01 TCP文件传输的设计与实现\11.26\多线程\client\bin\
............此处省略36个文件信息
相关资源
- 计算机网络课程设计精品网络课程网
- 计算机网络作业一答案
- 计算机网络谢希仁第七版课后答案完
- 计算机网络课设——精品课程网站.
- 基于socket的聊天程序
- 西安电子科技大学计算机网络通信复
- cisco packet tracer静态路由与动态路由配
- 解析ip数据包附mstcpip.h
- 计算机网络 computer network英文第5版超
- 计算机网络(谢希仁第五版)课后答
- VLAN构建与配置 实验报告
- 计算机网络简明教程课后习题答案谢
- 《计算机网络自顶向下方法》教材课
- 山东科技大学计算机网络试题
- 计算机网络实验基于Socket编程
- 局域网广播-一个计算机网络的实际应
- IPv4协议收发实验报告含代码
- 哈工大计算机网络补考题.zip
- zw_上海交通大学《计算机网络》动画
- 计算机网络技术与实训第三版答案
- 计算机网络(谢希仁版)复习资料
- 操作系统+算法导论+计算机网络知识
- 东北大学软件学院计算机网络平时测
- 华中科技大学计算机网络实验
- 山东大学2011-2020软件学院软件工程专
- 计算机网络谢希仁第七版课后答案完
- 南开大学计算机网络第二次书面作业
- 计算机网络第6版实验pkt文件包谢希仁
- 计算机网络课程设计 校园网规划设计
- 计算机网络课程设计编写UDP客户/服务
评论
共有 条评论