国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Linux系統(tǒng)編程,使用C語言實現(xiàn)簡單的FTP(服務器/客戶端)

這篇具有很好參考價值的文章主要介紹了Linux系統(tǒng)編程,使用C語言實現(xiàn)簡單的FTP(服務器/客戶端)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前言

跟著上官社長 陳哥花了一個月的時間終于把Linux系統(tǒng)編程學的差不多了,這一個月真的是頭疼啊,各種bug,調(diào)的真心心累,不過好在問題都解決掉了,在此也感謝一下答疑老師,給我提供了很多的思路,本文章是對前段時間學習Linux,做一個小小的總結(jié),才疏學淺,只學到這個地步,下來繼續(xù)努力,加油!。

一.基本功能

  1. get + xxx 從服務器獲取某個文件到客戶端。

  1. put + xxx 把客戶端的某個文件上傳到服務器。

  1. cd + 路徑 切換目錄

  1. lls 列出本地文件列表

  1. ls 列出服務端文件列表

  1. lcd +路徑 切換本地目錄

二.實現(xiàn)思路

1.使用socket先把服務器和客戶端建立連接。

c語言實現(xiàn)ftp客戶端,linux,服務器,c語言,Powered by 金山文檔

2.建立連接后開始信息的交互

客戶端輸入指令服務器處理指令

三.具體代碼如下

先建立socket連接,如下是服務器的代碼。

int main(int argc,char**argv)
{
? ? if(argc !=3 )//判斷參數(shù)是否輸入正確
? ? {
? ? ? ? printf("input errror\n");? ? 
? ? ? ? exit(-1);
? ? }
? ? int s_fd = socket(AF_INET,SOCK_STREAM,0);//創(chuàng)建網(wǎng)絡套接字

? ? struct sockaddr_in addr;
? ? struct sockaddr_in addr2;
? ? 
 ? ? memset(&addr,0,sizeof(struct sockaddr_in));
? ? ?memset(&addr2,0,sizeof(struct sockaddr_in));
? ? int n_read;
? ? addr.sin_family = AF_INET;//地址協(xié)議族
? ? addr.sin_prot = htons(atoi(argv[2]));//端口號,先使用atoi函數(shù)把參數(shù)轉(zhuǎn)換成整型,在使用htons轉(zhuǎn)為網(wǎng)絡字節(jié)序。
? ? inet_aton(argv[1], &s_addr.sin_addr);//IP地址,使用inet_aton函數(shù)把點分十進制的IP地址,轉(zhuǎn)換為網(wǎng)絡字節(jié)序。例如,192.168.147.155.
? ? bind(s_fd,(struct sockaddr*)&addr,sizeof(struct sockaddr_in));

? ? listen(s_fd,10);//監(jiān)聽

? ? int sz = sizeof(struct sockaddr_in);
? ? while(1)//循環(huán)卡住不讓退出去。
? ? {
? ? ? ? int c_fd = accept(s_fd,(struct sockaddr *)&addr2,&sz);//嘗試連接
? ? ? ? if(c_fd == -1)
? ? ? ? {
? ? ? ? ? ? perror("accept");
? ? ? ? ? ? exit(-1);? ? 
? ? ? ? }
? ? ? ? printf("get connect : %s\n",inet_nota(addr2.sin_addr));//連接成功打印對方的IP地址。
? ? ? 
? ? }
? ? ? ? return 0;
? ? }

客服端代碼,如下

int main(int argc,char **argv)
{
    int c_fd;
    struct Msg msg;

    struct sockaddr_in c_addr;
    memset(&c_addr,0,sizeof(struct sockaddr));

    // 1. socket
    c_fd = socket(AF_INET,SOCK_STREAM,0);
    if(c_fd==-1)
    {
        perror("socket:");
        exit(-1);
    }
    c_addr.sin_family = AF_INET;
    c_addr.sin_port =htons(atoi(argv[2]));
    inet_aton(argv[1], &c_addr.sin_addr);
    connect(c_fd,(struct sockaddr*)&c_addr,sizeof(struct sockaddr_in));//請求連接
    printf("get connect:%s\n",inet_ntoa(c_addr.sin_addr));//連接成功打印IP
? ? while(1)
? ? {
? ? }
? ? return 0;
}

上面只是服務器和客戶端,建立連接的代碼,還不攜帶參數(shù),下面開始客戶端和服務器進行通訊。

四.服務器/客戶端通訊

1.服務器和客戶端共有的文件

#include<stdio.h>
#include <sys/types.h>          
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include<stdlib.h>
#include<string.h>
#include <unistd.h>
#include <fcntl.h>

#define LS   0
#define PWD  1
#define GET  2
#define IFGO 3
#define CD   4
#define PUT  5
#define LLS  6
#define LCD  7
#define LPWD 8
#define QUIT 9
#define DOFILE 10

struct Msg
{
        int type;
        char data[1024];
        char buf[128];
};

2.客戶端


int get_cmd_type(char *cmd)
{
? ? ?//比較輸入的指令,找到對應的就返回相對應的指令。
? ?  if(!strcmp("ls",cmd))? ?   return LS;
 ? ? if(!strcmp("lls",cmd))     return LLS;
 ? ? if(!strcmp("pwd",cmd))     return PWD;
 ? ? if(!strcmp("quit",cmd))    return QUIE;
? ? ? //在輸入的指令字符串里面找,對應的指令
? ? ? if(strstr(cmd."cd"))? ? ? ?return CD;
      if(strstr(cmd,"get")) ? ?  return GET;
      if(strstr(cmd,"put")) ? ?  return PUT;

       return -1;//未找到返回錯誤
}




char *getdir(char *cms)//分割指令,來獲取參數(shù)
{
? ? char *p = NULL;
? ? ?p = strtok(cms," ");
? ? ?p = strtok(NULL," ");
? ? return p;
}



int cmd_handler(struct Msg msg,int fd)
{
? ? int ret;
? ? char buf[100];//臨時空間
? ? char *dir = NULL;
? ? int filefd; //文件表示符
? ? ret = get_cmd_type(msg.data);//輸入的指令轉(zhuǎn)換成整數(shù)
? ? switch(ret)//根據(jù)ret的值來選擇
? ? {
        case PWD:
? ? ? ? case LS:
? ? ? ? case CD:
? ?? ? ?  ? ? ? msg.type = 0;//標記符
? ? ? ? ? ? ? ? write(fd,msg.data,sizeof(msg));//發(fā)送命令
? ? ? ? ? ? ? ? break;
? ? ? ?
? ? ? ? case GET:
? ? ? ? ? ? ? ? msg.type = 2;
? ? ? ? ? ? ? ? write(fd,msg.data,sizeof(msg));//發(fā)送命令
? ? ? ? ? ? ? ? break;
? ? ? ? case PUT:
? ? ? ? ? ? ? ? strcpy(buf,msg.data);
? ? ? ? ? ? ? ? dir = getdir(buf);
? ? ? ? ? ? ? ? if(access(dir,F_OK) == -1)//判斷參數(shù)文件是否存在
? ? ? ? ? ? ? ? ?{? ? 
? ? ? ? ? ? ? ? ? ? ? ? printf("%s not exsit\n",dir);
? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? else//如果存在
? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? filefd = open(dir,O_RDWR);//打開這個文件
? ? ? ? ? ? ? ? ? ? ? ? read(filefd,msg.buf,sizeof(msg.buf));//讀取這個文件
? ? ? ? ? ? ? ? ? ? ? ? close(filefd);//關閉這個文件
? ? ? ? 
? ? ? ? ? ? ? ? ? ? ? ? write(fd,msg,data,sizeof(msg));//向服務器發(fā)送命令
? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ? 
? ? ? ?  case QUIT:
? ? ? ? ? ? ?  ?   strcpy(msg.data,"quit");
? ? ? ? ? ? ?  ?   write(fd,msg.data,sizeof(msg));
? ? ? ? ? ? ? ?    close(fd);//關閉文件
? ? ? ? ? ? ? ?    exit(-1);//退出程序
? ? ? ?  case LLS:
? ? ? ? ? ?  ? ? ? system("ls");
? ? ? ? ? ? ? ? ? ?break;
? ? ? ? ?case LCD:
? ? ? ? ? ? ? ? ?  ?dir = getdir(msg.data);
? ? ? ? ? ? ? ? ? ? chdir(dir);
? ? ? ? ? ? ? ? ? ? break;
? ? }
? ? return ret;
}


void hand_sever_message(int c_fd,struct Msg msg)
{
? ? struct Msg msgget;
? ? char *dir = NULL;
? ? int n_read;
? ? n_read = read(c_fd,&msgget,sizeof(msgget));//客戶端執(zhí)行到這里時,會阻塞在這,等待服務器寫入數(shù)據(jù)
? ? if(n_read == -1)
? ? {
? ? ? ? printf("server out \n");
? ? ? ? exit(-1);? ? 
? ? }
? ? else if(msg.type == DOFILE)
? ? ?{
? ? ? ? dir = getdir(msg.data);
? ? ? ? int filefd = open(dir,O_RDWR|O_CREAT,0666);
? ? ? ? ?write(filefd,msgget.data,strlen(msgget.data));
? ? ? ? putchar('>');
? ? ? ? fflush(stdout);
? ? ?}
    else
? ? {
? ? ? ? printf("============================\n");
? ? ? ? printf("\n%s\n",msgget.data);
? ? ? ? printf("=============================\n");
? ? ? ? putchar('>');
? ? ? ? fflush(stdout);
? ? }
}



int main(int argc,char **argv)
{
    int c_fd;
? ? int ret;
    struct Msg msg;//定義結(jié)構體
    struct sockaddr_in c_addr;
    memset(&c_addr,0,sizeof(struct sockaddr));//初始化結(jié)構體里的內(nèi)容

    
    c_fd = socket(AF_INET,SOCK_STREAM,0);//創(chuàng)建socket
    if(c_fd==-1)
    {
        perror("socket:");
        exit(-1);
    }
    c_addr.sin_family = AF_INET;
    c_addr.sin_port =htons(atoi(argv[2]));
    inet_aton(argv[1], &c_addr.sin_addr);

    connect(c_fd,(struct sockaddr*)&c_addr,sizeof(struct sockaddr_in));//請求連接
    printf("get connect:%s\n",inet_ntoa(c_addr.sin_addr));//連接成功打印IP
    while(1)
    {
? ? ? ? memset(msg.data,0,sizeof(msg.data));
? ? ? ? scanf("%[\n]",msg.data);//獲取客戶端指令
? ? ? ? if(strlen(msg.data) == 0)
? ? ? ? {
? ? ? ? ? ? if(mark == 1)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? printf(">");
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? ret = cmd_handler(msg,c_fd);//封裝一個函數(shù),處理指令
? ? ? ? 
? ?     if(ret >IFGO)
? ? ? ? {
? ? ? ? ? ? putchar('>');
? ? ? ? ? ? fflush(stdout);
? ? ? ? ? ? continue;
? ? ? ? }
? ? ? ? if(ret == -1)
? ? ? ? {
? ? ? ? ? ? printf("commend out\n");
? ? ? ? ? ? printf(">");
? ? ? ? ? ? fflush(stdout);
? ? ? ? }
? ? ?   handler_sever_message(c_fd,msg);//處理客戶端返回內(nèi)容 
    }
? ? close(c_fd);//關閉文件
    return 0;
}

3.服務器


int get_cmd_type(char *cmd)//把指令轉(zhuǎn)換成整型
{
    if(!strcmp("ls",cmd))  return LS;
    if(!strcmp("quit",cmd)) return QUIT;
    if(!strcmp("pwd",cmd))  return PWD;
    if(strstr(cmd,"cd")!=NULL)  return CD;
    if(strstr(cmd,"get")!=NULL) return GET;
    if(strstr(cmd,"put")!=NULL) return PUT;
? ? return -1;
}

char *getdir(char cmd)//分割指令,獲取第二個參數(shù)
{
? ? char *p = NULL;
? ? p = strtok(cmd," ");
? ? p = strtok(NULL," ");
? ? return p;
}


void msg_handler(struct Msg msg,int fd)
{
? ? int ret;
? ? ?char *dir;
? ? char *databuf[1024] = {0};//臨時空間
? ? int fdfile;//文件描述符
? ? ret = get_cmd_type(msg.data);

? ? switch(ret)
? ? ? ? ? ? case LS:
? ? ? ? ? ? case PWD:
? ? ? ? ? ? ? ? ? ? msg.type = 0
? ? ? ? ? ? ? ? ? ? FILE *r = popen(msg.data,"r");執(zhí)行該參數(shù),并讀取,返回讀取文件的指針
? ? ? ? ? ? ? ? ? ? fread(msg.data,sizeof(msg.data),1,r);讀取到data空間里面,讀取一次,讀取的文件是上面r指向的文件。
? ? ? ? ? ? ? ? ? ? write(fd,msg.data,sizeof(msg));讀取完成后寫入。
? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? case CD:
? ? ? ? ? ? ? ? ? ?dir = getdir(msg.data);//先把指令分割出來,獲取參數(shù)
? ? ? ? ? ? ? ? ? ? printf("dir :%s\n",dir);//打印參數(shù)
? ? ? ? ? ? ? ? ? ? chdir(dir); 將當前目錄改向參數(shù)指向的目錄。
? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? case GET:
? ? ? ? ? ? ? ? ? ? dir = getdir(msg.data);//獲取參數(shù)文件
? ? ? ? ? ? ? ? ? ? if(access(dir,F_OK)== -1)//判斷文件存在嗎
? ? ? ? ? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ? ? ? ? ? ? strcpy(msg.data,"NO this file");
? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? else//如果存在
? ? ? ? ? ? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ? ? ? ? ? ? msg.type = DOFILE; //標記
? ? ? ? ? ? ? ? ? ? ? ? ? ? fdfile = open(dir,O_RDWR);//打開此文件
? ? ? ? ? ? ? ? ? ? ? ? ? ? read(fdfile,databuf,sizeof(databuf));//讀取此文件到臨時空間databuf里面
? ? ? ? ? ? ? ? ? ? ? ? ? ? close(fdfile);//讀取完成,關閉此文件
? ? ? ? ? ? ? ? ? ? ? ? ? ? strcpy(msg.data,databuf);//將databuf拷貝
? ? ? ? ? ? ? ? ? ? ? ? ? ? write(fd,msg.data,sizeof(msg));//寫入
? ? ? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? case PUT:
? ? ? ? ? ? ? ? ? ? dir = getdir(msg.data);//分割獲取第二個參數(shù)
? ? ? ? ? ? ? ? ? ?fdfile =  open(dir,O_RDWR|O_CREAT,0666);//打開該參數(shù)的文件
? ? ? ? ? ? ? ? ? ? write(fd,msg.buf,strlen(msg.buf));//將客戶端讀取的內(nèi)容寫入服務器
? ? ? ? ? ? ? ? ? ? close(fdfile);//寫完關閉文件
? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? case QUIT:
? ? ? ? ? ? ? ? ? ? printf("client quit\n");//打印退出信心
? ? ? ? ? ? ? ? ? ? exit(-1);//退出程序

}
int main(int argc,char**argv)
{
    if(argc !=3 )//判斷參數(shù)是否輸入正確
    {
        printf("input errror\n");    
        exit(-1);
    }
    int s_fd = socket(AF_INET,SOCK_STREAM,0);//創(chuàng)建網(wǎng)絡套接字
? ? struct Msg msg;
    struct sockaddr_in addr;
    struct sockaddr_in addr2;
    
     memset(&addr,0,sizeof(struct sockaddr_in));
     memset(&addr2,0,sizeof(struct sockaddr_in));
    int n_read;
    addr.sin_family = AF_INET;//地址協(xié)議族
    addr.sin_prot = htons(atoi(argv[2]));//端口號,先使用atoi函數(shù)把參數(shù)轉(zhuǎn)換成整型,在使用htons轉(zhuǎn)為網(wǎng)絡字節(jié)序。
    inet_aton(argv[1], &s_addr.sin_addr);//IP地址,使用inet_aton函數(shù)把點分十進制的IP地址,轉(zhuǎn)換為網(wǎng)絡字節(jié)序。例如,192.168.147.155.
    bind(s_fd,(struct sockaddr*)&addr,sizeof(struct sockaddr_in));

    listen(s_fd,10);//監(jiān)聽

    int sz = sizeof(struct sockaddr_in);
    while(1)//循環(huán)卡住不讓退出去。
    {
        int c_fd = accept(s_fd,(struct sockaddr *)&addr2,&sz);//嘗試連接
        if(c_fd == -1)
        {
            perror("accept");
            exit(-1);    
        }
        printf("get connect : %s\n",inet_nota(addr2.sin_addr));//連接成功打印對方的IP地址。
? ? ? ? if(fork()== 0)//創(chuàng)建子進程來對接,進行通訊
? ? ? ? {
? ? ? ? ? ? ? ? memset(msg.data,0,sizeof(msg.date));
? ? ? ? ? ? ? ? n_read =read(c_fd,&msg,sizeof(msg));//讀取客戶端發(fā)過來的消息
? ? ? ? ? ? ? ? if(n_read == 0)//判斷讀取信息
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? printf("client out\n");
? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? }else (if n_read>0)//如果讀取到了
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? msg_hanfler(msg,c_fd);//處理函數(shù)
? ? ? ? ? ? ? ? }
? ? ? ? }
      
    }
        return 0;
}

以上就是我對這段時間學習Linux的理解,希望可以幫助到大家謝謝文章來源地址http://www.zghlxwxcb.cn/news/detail-524810.html

到了這里,關于Linux系統(tǒng)編程,使用C語言實現(xiàn)簡單的FTP(服務器/客戶端)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 如何在 Ubuntu Linux 中設置和使用 FTP 服務器?

    如何在 Ubuntu Linux 中設置和使用 FTP 服務器?

    注:本文假設您已在 Ubuntu Linux 系統(tǒng)上安裝并配置好了適當?shù)沫h(huán)境。 FTP(文件傳輸協(xié)議)是一種常用的網(wǎng)絡協(xié)議,用于在客戶端和服務器之間進行文件傳輸。在 Ubuntu Linux 中,您可以設置和使用 FTP 服務器,以便通過網(wǎng)絡與其他設備共享文件。本文將詳細介紹如何在 Ubuntu Lin

    2024年02月05日
    瀏覽(27)
  • 簡單FTP客戶端軟件開發(fā)——搭建FTP服務器

    簡單FTP客戶端軟件開發(fā)——搭建FTP服務器

    計網(wǎng)課程設計的要求是: 1) 該FTP客戶端程序具有以下基本功能: 2) 開發(fā)美觀易用的圖形界面 FTP使用客戶服務器方式,因為開發(fā)的是客戶端,所以需要一個FTP服務器,客戶端進行連接訪問,進行文件操作。 前面我們已經(jīng)安裝好了Linux虛擬機,在Linux搭建FTP服務器原參考博客

    2024年02月03日
    瀏覽(30)
  • Ubuntu系統(tǒng)下c語言的簡單編程

    Ubuntu系統(tǒng)下c語言的簡單編程

    本文主要講述關于在ubuntu系統(tǒng)下編程c語言的流程,包括網(wǎng)絡設置、apt源的更換、簡單的c語言在Linux和Windows下的對比以及用Makelife編寫上述程序。 準備一臺PC機并安裝好Vmware(筆者采用的是15.5版本),我們使用 NetworkManager 進行網(wǎng)絡配置。 1.將虛擬機網(wǎng)絡適配器調(diào)為橋接模式 選擇

    2023年04月12日
    瀏覽(19)
  • 《Linux操作系統(tǒng)編程》第九章 數(shù)據(jù)查找和篩選工具 : 了解流編輯器sed和報表生成器awk的簡單使用

    《Linux操作系統(tǒng)編程》第九章 數(shù)據(jù)查找和篩選工具 : 了解流編輯器sed和報表生成器awk的簡單使用

    ???? 博主 libin9iOak帶您 Go to New World.??? ?? 個人主頁——libin9iOak的博客?? ?? 《面試題大全》 文章圖文并茂??生動形象??簡單易學!歡迎大家來踩踩~?? ?? 《IDEA開發(fā)秘籍》學會IDEA常用操作,工作效率翻倍~?? ???? 希望本文能夠給您帶來一定的幫助??文章粗淺,敬

    2024年02月12日
    瀏覽(32)
  • 網(wǎng)絡編程套接字(二)之UDP服務器簡單實現(xiàn)

    網(wǎng)絡編程套接字(二)之UDP服務器簡單實現(xiàn)

    目錄 一、服務端UdpServer 1、udp_server.hpp 1、服務器的初始化 2、服務器的運行 2、udp_server.cc 二、客戶端UdpClient udp_client.cc 三、完整代碼 首先,我們在該文件中,將服務器封裝成一個類,而作為一款服務器,必須要有自己的端口號,同時網(wǎng)絡服務器需要有對應的IP地址,文件描述

    2024年04月16日
    瀏覽(20)
  • C#實現(xiàn)簡單TCP服務器和客戶端網(wǎng)絡編程

    C#實現(xiàn)簡單TCP服務器和客戶端網(wǎng)絡編程

    在C#中進行網(wǎng)絡編程涉及許多類和命名空間,用于創(chuàng)建和管理網(wǎng)絡連接、傳輸數(shù)據(jù)等。下面是一些主要涉及的類和命名空間: System.Net 命名空間: 這個命名空間提供了大部分網(wǎng)絡編程所需的類,包括: IPAddress :用于表示IP地址。 IPEndPoint :表示IP地址和端口號的組合。 Socke

    2024年02月11日
    瀏覽(37)
  • 【網(wǎng)絡編程】實現(xiàn)一個簡單多線程版本TCP服務器(附源碼)

    【網(wǎng)絡編程】實現(xiàn)一個簡單多線程版本TCP服務器(附源碼)

    accept 函數(shù)是在服務器端用于接受客戶端連接請求的函數(shù),它在監(jiān)聽套接字上等待客戶端的連接,并在有新的連接請求到來時創(chuàng)建一個新的套接字用于與該客戶端通信。 下面是 accept 函數(shù)的詳細介紹以及各個參數(shù)的意義: sockfd: 是服務器監(jiān)聽套接字的文件描述符,通常是使用

    2024年02月13日
    瀏覽(30)
  • 【手把手做ROS2機器人系統(tǒng)開發(fā)五】使用C++實現(xiàn)編寫簡單的服務器和客戶端

    【手把手做ROS2機器人系統(tǒng)開發(fā)五】使用C++實現(xiàn)編寫簡單的服務器和客戶端

    目錄 使用C++實現(xiàn)編寫簡單的服務器和客戶端 一、程序編寫 1、創(chuàng)建軟件包 ?2、編譯軟件包 3、軟件配置 4、服務器程序編寫 5、客戶端程序編寫 6、軟件包設置 7、設置編譯選項 二、程序測試 1、編譯程序 2、開啟節(jié)點測試運行 3、執(zhí)行效果展示 ???????? 上一講我們講解了如

    2024年02月10日
    瀏覽(20)
  • UDP數(shù)據(jù)報網(wǎng)絡編程(實現(xiàn)簡單的回顯服務器,客戶端)

    ? ? ? ?回顯服務器表示客戶端發(fā)的是啥,服務器就返回啥,主要是為了熟悉UDP數(shù)據(jù)報網(wǎng)絡編程的基本步驟 ????????對于程序的所有分析都寫到了代碼上 當我們用idea實現(xiàn)了上面的代碼后可以通過idea如何開啟多個客戶端(一個代碼開啟多個客戶端運行)來檢驗多個客戶端向

    2024年02月13日
    瀏覽(20)
  • 【Linux】FTP文件服務器

    FTP (File transfer protocol) 是TCP/IP 協(xié)議組中的協(xié)議之一。他最主要的功能是在服務器與客戶端之間進行文件的傳輸。FTP就是實現(xiàn)兩臺計算機之間的拷貝,從遠程計算機拷貝文件至自己的計算機上,稱之為“下載 (download)”文件。將文件從自己計算機中拷貝至遠程計算機上,則稱

    2024年02月10日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包