資源簡介
利用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個文件信息
評論
共有 條評論