资源简介
利用tcp套接字编程实现,均已Debug,代码有中文注释
代码片段和文件信息
#include “include.h“ // 引用列表
#include “string.h“
#include “command.h“ // 标准命令
// 读取Socket上的信息并且保存到缓存区
int readBuffer(int socket char *buffer int size int singleLine) {
clearStr(buffer);
int result = read(socket buffer size);
if (result == -1) {
return -1;
}
if (singleLine) {
firstLine(buffer);
return strlen(buffer);
}
cutStr(buffer result);
return result;
}
// 进入被动模式并且返回数据Socket号
int passive(int serverSocket struct sockaddr_in data) {
char cmd[STR_MAX_LENGTH];
char buffer[STR_MAX_LENGTH];
int result;
//strcpy(cmd “TYPE I\r\n“); // 进入二进制模式传递信息
//result = send(serverSocket cmd strlen(cmd) 0);
//result = recv(serverSocket buffer sizeof(buffer)0);
//printf(“%s“ buffer);
strcpy(cmd “PASV\r\n“); // 被动模式命令
result = send(serverSocket cmd strlen(cmd) 0);
if (result < 0) {
printf(“Error: Sending on stream socket.\n“);
return -1;
} else {
readBuffer(serverSocket buffer sizeof(buffer) 1); // 接受服务器消息
if (getCommandNo(buffer) != 227) {
return -1;
}
int temp[6]; // 解析服务器消息
getNumbersAfter(buffer ‘(‘ temp 6);
int portNo = temp[4] * 256 + temp[5]; // 获取端口号
printf(“%d\r\n“ portNo);
char serverIP[STR_MAX_LENGTH];
clearStr(serverIP); // 解析IP地址
concatInt(serverIP temp[0]);
concatStr(serverIP “.“);
concatInt(serverIP temp[1]);
concatStr(serverIP “.“);
concatInt(serverIP temp[2]);
concatStr(serverIP “.“);
concatInt(serverIP temp[3]);
inet_pton(AF_INET serverIP &data.sin_addr);
int dataSocket = socket(AF_INET SOCK_STREAM 0);
if (dataSocket < 0) {
printf(“Error: Failed to initial socket! Program will exit.\n“);
return -1;
}
data.sin_family = AF_INET; // 准备数据连接
data.sin_port = htons(portNo);
result = connect(dataSocket (struct sockaddr *) &data sizeof(data));
if (result < 0) {
printf(“Error: Failed to connect socket! Program will exit.\n“);
return -1;
}
printf(“%s\n“ buffer);
return dataSocket; // 返回数据Socket号
}
}
// 主函数
int main() {
printf(“\n“);
printf(“Welcome to FTP client.\n“);
printf(“Type \“?\“ for more information.\n“);
printf(“\n“);
int serverSocket = socket(AF_INET SOCK_STREAM 0); // 初始化信息Socket
if (serverSocket < 0) {
printf(“Error: Failed to initial socket! Program will exit.\n“);
return -1;
}
int connecting = 0;
int result;
struct sockaddr_in server;
struct sockaddr_in data;
char ftpcmd[STR_MAX_LENGTH];
char buffer[STR_MAX_LENGTH];
while (1) { // 无限循环等待用户输入
char cmd[STR_MAX_LENGTH];
printf(“>“);
readline(cmd);
if (sameStr(cmd “open“)) { // 连接服务器命令
if (connecting == 1) {
printf(
“Error: A server connect already exists please disconnect first.\n“);
} else {
printf(“Please input the server IP address: “);
char serverIP[STR_MAX_LENGTH];
readline(serverIP); // 获取IP
printf(“Please input the port N
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 30522 2010-05-15 19:47 Client\.cproject
文件 2384 2010-05-15 19:47 Client\.project
文件 17644 2010-05-20 15:09 Client\client
文件 12399 2010-06-13 10:53 Client\client.c
文件 12957 2010-05-20 15:09 Client\client.c~
文件 1704 2010-06-13 11:11 Client\command.h
文件 90449 2010-05-18 09:17 Client\Debug\Client
文件 113 2010-05-18 09:17 Client\Debug\client.d
文件 88560 2010-05-18 09:17 Client\Debug\client.o
文件 953 2010-05-18 09:17 Client\Debug\makefile
文件 230 2010-05-18 09:17 Client\Debug\ob
文件 390 2010-05-18 09:17 Client\Debug\sources.mk
文件 649 2010-05-18 09:17 Client\Debug\subdir.mk
文件 386 2010-05-16 19:19 Client\include.h
文件 4070 2010-05-19 11:43 Client\string.h
文件 59622 2010-05-15 19:47 Server\.cproject
文件 2384 2010-05-15 19:47 Server\.project
文件 1704 2010-06-13 11:11 Server\command.h
文件 953 2010-05-16 19:18 Server\Debug\makefile
文件 230 2010-05-16 19:18 Server\Debug\ob
文件 97100 2010-05-16 19:18 Server\Debug\Server
文件 113 2010-05-16 19:18 Server\Debug\server.d
文件 93096 2010-05-16 19:18 Server\Debug\server.o
文件 390 2010-05-16 19:18 Server\Debug\sources.mk
文件 649 2010-05-16 19:18 Server\Debug\subdir.mk
文件 407 2010-05-16 19:17 Server\include.h
文件 22500 2010-05-19 12:10 Server\server
文件 15554 2010-12-06 10:57 Server\server.c
文件 4119 2010-05-16 19:17 Server\string.h
目录 0 2010-05-30 17:31 Client\Debug
............此处省略6个文件信息
相关资源
- c语言程序设计案例教程 廖湖声 第二
- 用C语言实现八数码问题的宽度优先搜
- 数据结构表达式求值,c语言版,能计
- c语言井字棋源码
- C语言课程设计_学生选修课系统
- C语言版的职工管理系统课设
- Linux操作系统C语言编程入门pd
- c语言银行管理系统
- c语言实现的对任意长度的字符串加解
- 《C语言程序设计实验指导》颜晖,张
- c语言拓扑排序算法
- 人机对战智能五子棋 C语言版
- 严蔚敏.吴伟民等《数据结构(c语言版
- c语言 bmp图片显示
- 几种控制方法的C语言编程.
- FFT的C语言实现代码
- 常用的100个经典C语言程序
- 用C语言读写SGY格式的地震数据文件
- C语言多层一维小波分解
- C语言编写赛车游戏
- 奇偶校验C语言原码
- c语言简单的银行系统
- C语言课程设计C语言课程设计.
- c语言jpeg压缩库
- C语言获取鼠标点击的位置坐标
- c语言课程设计迷宫求解.zip
- linux下c语言实现多线程web服务器
- C语言的读取GPS源码
- VC++(MFC)实现FTP功能(源代码)
- linux 上用C++实现的网络嗅探器
评论
共有 条评论