xxxx18一60岁hd中国/日韩女同互慰一区二区/西西人体扒开双腿无遮挡/日韩欧美黄色一级片 - 色护士精品影院www

  • 大小: 4KB
    文件類型: .rar
    金幣: 2
    下載: 0 次
    發布日期: 2021-06-15
  • 語言: 其他
  • 標簽: 服務器??tcp??

資源簡介

在linux中,使用tcp實現一個簡單的文件服務器功能,可以查看、上傳、下載文件

資源截圖

代碼片段和文件信息

#include???//printf
#include???//inet_addr?htons
#include?
#include???//socket?bind?listen?accept?connect
#include???//sockaddr_in
#include???//exit
#include???//close
#include?
#include?
#include?
#include?

#define?N?128
#define?errlog(errmsg)?do{\
perror(errmsg);\
printf(“%s?-->?%s?-->?%d\n“?__FILE__?__func__?__LINE__);\
exit(1);\
?}while(0)

void?do_help()
{
printf(“*****************************************************\n“);
printf(“*****?????????輸入??/???功能??????????***************\n“);
printf(“*****?????????list??/???查看服務器所在目錄的文件*****\n“);
printf(“*****?get?filename??/???下載服務器所在目錄的文件*****\n“);
printf(“*****?put?filename??/???上傳文件到服務器*************\n“);
printf(“*****?????????quit??/???退出??????????***************\n“);
printf(“*****************************************************\n“);

return?;
}

void?do_list(int?sockfd)
{
char?buf[N]?=?{};

//告知服務器執行查看目錄文件名的功能
strcpy(buf?“L“);
send(sockfd?buf?N?0);

//接收數據并打印
while(1)
{
recv(sockfd?buf?N?0);

//結束標志
if(strncmp(buf?“OVER****“?8)?==?0)
{
break;
}

printf(“***?%s\n“?buf);
}

printf(“文件接收完畢\n“);

return?;
}

int?do_download(int?sockfd?char?*filename)
{
char?buf[N]?=?{};
int?fd;
ssize_t?bytes;

//發送指令以及文件名,告知服務器實現下載的功能
sprintf(buf?“G?%s“?filename);
send(sockfd?buf?N?0);

//接收數據判斷文件是否存在
recv(sockfd?buf?N?0);

//如果文件不存在,打印指令
if(strncmp(buf?“NO“?2)?==?0)
{
printf(“文件%s不存在,請重新輸入\n“?filename);
return?-1;
}

//如果文件存在,創建文件
if((fd?=?open(filename?O_CREAT?|?O_WRONLY?|?O_TRUNC?0664))? {
errlog(“fail?to?open“);
}

//接收數據并寫入文件
while((bytes?=?recv(sockfd?buf?N?0))?>?0)
{
if(strncmp(buf?“OVER****“?8)?==?0)
{
break;
}

write(fd?buf?bytes);
}

printf(“文件下載完畢\n“);

return?-1;
}

int?do_upload(int?sockfd?char?*filename)
{
char?buf[N]?=?{};
int?fd;
ssize_t?bytes;

//打開文件,判斷文件是否存在
if((fd?=?open(filename?O_RDONLY))? {
//如果文件不存在,則退出函數,重新輸入
if(errno?==?ENOENT)
{
printf(“文件%s不存在,請重新輸入\n“?filename);
return?-1;
}
else
{
errlog(“fail?to?open“);
}
}

//如果文件存在,告知服務器執行上傳的功能
sprintf(buf?“P?%s“?filename);
send(sockfd?buf?N?0);

//讀取文件內容并發送
while((bytes?=?read(fd?buf?N))?>?0)
{
send(sockfd?buf?bytes?0);
}

sleep(1);

strcpy(buf?“OVER****“);
send(sockfd?buf?N?0);

printf(“文件上傳完畢\n“);
return?0;
}

int?main(int?argc?const?char?*argv[])
{
int?sockfd;
struct?sockaddr_in?serveraddr;
socklen_t?addrlen?=?sizeof(serveraddr);
char?buf[N]?=?{};

if(argc? {
printf(“您輸入的參數太少了:?%s??\n“?argv[0]);
exit(1);
}

//第一步:創建套接字
if((sockfd?=?socket(AF_INET?SOCK_STREAM?0))? {
errlog(“fail?to?socket“);
}

//第二步:填充服務器網絡信息結構體
//inet_addr:將點分十進制ip地址轉化為網絡字節序的整型數據
//htons:將主機字節序轉化為網絡字節序
//atoi:將數字型字符串轉化為整型數據
serveraddr.sin_family?=?AF_INET;
serveraddr.sin_addr.s_addr?=?inet_addr(argv[1]);
server

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----

?????文件????????205??2017-10-28?09:29??1_tcp_ftp\99.txt

?????文件???????4611??2017-10-28?11:24??1_tcp_ftp\client.c

?????文件????????205??2017-10-28?11:24??1_tcp_ftp\Makefile

?????文件???????4175??2017-10-28?11:24??1_tcp_ftp\server.c

?????目錄??????????0??2017-10-28?11:25??1_tcp_ftp

-----------?---------??----------?-----??----

?????????????????9196????????????????????5


評論

共有 條評論