資源簡介
基于Linux的C源代碼——一個簡單的從服務器上下載文件的程序
先啟動服務器端
再啟動客戶端,在啟動客戶端的時候需要同時填寫服務器的IP地址
如:./client 127.0.0.1
連接成功之后輸入要下載的文件的文件路徑名
回車后再輸入在本地機的存儲路徑及文件名

代碼片段和文件信息
#include?????//?for?sockaddr_in
#include?????//?for?socket
#include?????//?for?socket
#include?????????//?for?printf
#include?????????//?for?exit
#include?????????//?for?bzero
#include?
#include?
#include?
#include?
#include?
#include?
void?err_sys(const?char*?...);
static?void?err_doit(int?const?char?*va_list);
long?get_filesize(char?*filename);
#define?HELLO_WORLD_SERVER_PORT????6789?
#define?BUFFER_SIZE?1024
#define?FILE_NAME_MAX_SIZE?512
#define?MAXLINE?4069
fd_set???rdfds;
int
main(int?argc?char?**argv)
{
????if?(argc?!=?2)
????{
????????printf(“Usage:?./%s?ServerIPAddress\n“argv[0]);
????????exit(1);
????}
????//設置一個socket地址結構client_addr代表客戶機internet地址?端口
????struct?sockaddr_in?client_addr;
????bzero(&client_addrsizeof(client_addr));?//把一段內存區的內容全部設置為0
????client_addr.sin_family?=?AF_INET;????//internet協議族
????client_addr.sin_addr.s_addr?=?htons(INADDR_ANY);//INADDR_ANY表示自動獲取本機地址
????client_addr.sin_port?=?htons(0);????//0表示讓系統自動分配一個空閑端口
????//創建用于internet的流協議(TCP)socket用client_socket代表客戶機socket
????int?client_socket?=?socket(AF_INETSOCK_STREAM0);
????if(?client_socket?0)
????{
????????perror(“socket“);
exit(1);
????}
printf(“Socket?is?Createed!\n“);
????//把客戶機的socket和客戶機的socket地址結構聯系起來
????if(?-1?==?bind(client_socket(struct?sockaddr*)&client_addrsizeof(client_addr)))
????{
????????perror(“bind“);
exit(1);
????}
printf(“Bind?Success!\n“);
????//設置一個socket地址結構server_addr代表服務器的internet地址?端口
????struct?sockaddr_in?server_addr;
????bzero(&server_addrsizeof(server_addr));
????server_addr.sin_family?=?AF_INET;
????if(inet_aton(argv[1]&server_addr.sin_addr)?==?0)?//服務器的IP地址來自程序的參數
????{
????????
????????perror(“inet_aton“);
exit(1);
????}
printf(“Inet_aton?Success!\n“);
????server_addr.sin_port?=?htons(HELLO_WORLD_SERVER_PORT);
????socklen_t?server_addr_length?=?sizeof(server_addr);
????//向服務器發起連接連接成功后client_socket代表了客戶機和服務器的一個socket連接
????if(-1?==?connect(client_socket(struct?sockaddr*)&server_addr?server_addr_length))
????{
????????perror(“connect“);
// printf(“Can?Not?Connect?To?%s!\n“argv[1]);
????????exit(1);
????}
printf(“Connected!\n“);
????char?file_name[FILE_NAME_MAX_SIZE+1];
char?loc_file_name[FILE_NAME_MAX_SIZE+1];
????bzero(file_name?FILE_NAME_MAX_SIZE+1);
bzero(loc_file_nameFILE_NAME_MAX_SIZE+1);
????printf(“Please?Input?File?Name?On?Server:\t“);
????scanf(“%s“?file_name);
????
????char?buffer[BUFFER_SIZE];
????bzero(bufferBUFFER_SIZE);
????strncpy(buffer?file_name?strlen(file_name));
printf(“send?the?file?name?is?:%s\n“buffer);
????//向服務器發送buffer中的數據
????if(-1?==?send(client_socketbufferBUFFER_SIZE0))
{
perror(“send“);
exit(1);
}
printf(“Please?Input?File?Name?On?location:\t“);
????scanf(“%s“?loc_file_name);
FILE?*wstr
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????3945??2009-05-05?15:31??ftp——1.0\test_client.c
?????文件???????4807??2009-05-05?15:00??ftp——1.0\test_server.c
?????目錄??????????0??2009-05-05?15:34??ftp——1.0
?????文件???????8769??2009-05-07?11:26??test_client
?????文件??????10019??2009-05-06?14:44??test_server
?????文件????????183??2009-05-07?12:00??使用說明.txt
-----------?---------??----------?-----??----
????????????????27723????????????????????6
- 上一篇:RSA加密解密網絡課程設計
- 下一篇:人工神經網絡bp.m文件
評論
共有 條評論