用TCP/IP模拟实现一个简单的网盘

本文介绍了网络通信的基础知识,包括协议的概念、OSI七层模型和TCP/IP四层模型,详细讲解了TCP与UDP的区别,以及IP地址、端口和套接字在通信中的作用。接着,通过示例展示了基于套接字的TCP通信流程,包括服务器的循环和并发服务模型。此外,文章还提供了一个简单的网盘功能实现,包括目录查询和文件上传下载的代码片段。最后,提到了在使用read函数时需要注意的网络通信问题。
摘要由CSDN通过智能技术生成

一、

1、协议:一组规则
​2、OSI七层协议模型:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层
​TCP/IP四层协议模型:
​应用层:http、ftp、nfs、ssh
​传输层:TCP、UDP
​网络层:IP
​物理与网络接口层:
​TCP:面向连接,确保消息传输准确无误
​UDP:无连接, 不能确保消息传输准确无误
3、IP地址
​IPV4: 32bit
​点分十进制
​二进制
​IPV6

4、port
​一个端口号对应一个进程
​取值范围 0 ~ 65535
​1 ~ 1023:系统端口
​1024 ~ 5000:一般应用程序接口
​5001 ~ 65535:用户自定义接口
5、套接字
​是一个特殊的文件描述符
6、基于套接字的TCP通信流程
服务器:socket-->bind-->listen --> accept --> read/write -->close
​客户端:socket --> connect -->read/write -->close
服务器模型:
​1、循环服务器
​2、并发服务器
​(1)多进程并发 -- 需要注意子进程资源的回收

二、

网盘基本功能:目录查询、文件的上传与下载
  1. 查询目录代码:

#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
void do_ls(char dirname[]);
int main(int argc, char *argv[])
{ 
    if(argc==1)
    {
        do_ls(".");
    }
    else
    {
        while(--argc)
        {
            printf("%s:\n",*(++argv));
        }
    }
    return 0;
} 

void do_ls(char dirname[])
{
    DIR *dir_ptr;
    struct dirent* direntp;
    if(NULL==(dir_ptr=opendir(dirname)))
    {
        fprintf(stderr,"ls1:cannot open %s\n",dirname);
    }
    else
    {
        while(NULL!=(direntp=readdir(dir_ptr)))
        {
            printf("%s\n",direntp->d_name);
        }
        closedir(dir_ptr);
    }
}
  1. 服务器主要代码:</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值