FTP 编写 2:客户端与服务端的连接

C#做MES中FTP代码怎么写?客户端,服务端如何安装测试? FTP服务器子目录文件夹 //没有子目录文件夹传"/"即可,有子目录文件夹传"/"+文件名+"/"/// FTP服务器子目录文件夹 阅读详情

FTP 编写 2:客户端与服务端的连接


    首先编写客户端与服务端能进行简单的连接,这个较为容易:

    服务端的编写流程是:启动 Winsock、建立套接字、绑定套接字、监听、接收连接、关闭连接、关闭套接字、关闭 Winsock

    客户端的编写流程是:启动 Winsock、建立套接字、连接、关闭连接和套接字、关闭 Winsock

    代码较为简单,具体如下:

服务端

#include <Winsock2.h>
#include <Ws2tcpip.h>
#include <iostream>
#pragma comment(lib,"ws2_32.lib")

void main()
{
    //定义相关的数据
    int iPort = 5050;//定义其端口
    WSADATA wsaData;//Winsock 的启动参数
    SOCKET sListen, sAccept;//套接口关键字,分别用于监听和接收连接
    int iLen;
    int iSend;
    char buf[] = "I am a server";
    struct sockaddr_in ser, cli;//网络地址

    std::cout << "----------------------------\n";
    std::cout << "Server waitting\n";
    std::cout << "----------------------------\n";

    //启动winSocket
    if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {
        std::cout << "Failed to load Winsock.\n";
        return;
    }

    //创建Socket
    sListen = socket(AF_INET, SOCK_STREAM, 0);
    if (sListen == INVALID_SOCKET) {
        std::cout << "socket() Failed:" << WSAGetLastError() <<"\n";
        return;
    }

    //绑定IP地址
    ser.sin_family = AF_INET;
    ser.sin_port = htons(iPort);
    ser.sin_addr.s_addr = htonl(INADDR_ANY);
    if (bind(sListen, (LPSOCKADDR)&ser, sizeof(ser)) == SOCKET_ERROR) {
        std::cout << "bind() Failed\n";
        return;
    }

    //监听
    if (listen(sListen, 5) == SOCKET_ERROR) {
        std::cout << "listen() Failed\n";
        return;
    }

    iLen = sizeof(cli);//获取客户端网络地址的长度

    //接受连接和发送欢迎信息
    //用循环使程序一直运行
    while (true) {
        //接收连接
        sAccept = accept(sListen, (struct sockaddr*)&cli, &iLen);
        if (sAccept == INVALID_SOCKET) {
            std::cout << "accept() Failed\n";
            break;
        }

        //显示客户端的 IP 信息
        char clibuf[20] = { '\0' };
        inet_ntop(AF_INET, (void*)&cli.sin_addr, clibuf, 16);
        std::cout << "Accept client IP:" << clibuf << ":" << ntohs(cli.sin_port) << std::endl;

        //发送信息给客户端
        iSend = send(sAccept, buf, sizeof(buf), 0);
        if (iSend == SOCKET_ERROR) {
            std::cout << "send() Failed\n";
            break;
        }
        else if (iSend == 0) {
            break;
        }
        else {
            std::cout << "Send byte:" << iSend << std::endl;
            std::cout << "----------------------------------\n";
        }

        //关闭连接
        closesocket(sAccept);
    }

    //关闭监听
    closesocket(sListen);
    //关闭 Winsock
    WSACleanup();
}

客户端

#include <Winsock2.h>
#include <WS2tcpip.h>
#include <iostream>
#pragma comment(lib,"ws2_32.lib")

void main()
{
    //定义相应的数据
    WSADATA wsaData;
    SOCKET sClient;
    int iPort = 5050;//对应的服务端的端口
    int iLen;
    char buf[1024];
    struct sockaddr_in ser;

    //启动 winSocket
    memset(buf, 0, sizeof(buf));
    if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {
        std::cout << "Failed to load Winsock\n";
        system("pause");
        return;
    }

    char addr[20] = { '\0' };
    std::cin >> addr;//输入服务端 IP 地址

    //创建Socket
    ser.sin_family = AF_INET;
    ser.sin_port = htons(iPort);
    inet_pton(AF_INET, addr, (void*)&ser.sin_addr.s_addr);
    sClient = socket(AF_INET, SOCK_STREAM, 0);
    if (sClient == INVALID_SOCKET) {
        std::cout << "socket() Failed\n";
        system("pause");
        return;
    }

    //连接并进行简单的操作
    if (connect(sClient, (struct sockaddr*)&ser, sizeof(ser)) == INVALID_SOCKET) {
        std::cout << "connect() Failed\n";
        system("pause");
        return;
    }
    else {
        //接收服务端发送的数据
        iLen = recv(sClient, buf, sizeof(buf), 0);
        if (iLen == 0) {
            system("pause");
            return;
        }
        else if (iLen == SOCKET_ERROR) {
            std::cout << "recv() Failed\n";
            system("pause");
            return;
        }
        std::cout << "recv() data from server:" << buf << std::endl;
    }

    //关闭连接并退出
    closesocket(sClient);
    //关闭 Winsock
    WSACleanup();

    system("pause");
}

启动运行

    需要注意的是在客户端输入的 IP 地址,这个地址需要输入本地电脑的 IP 地址,使用 cmd 调出 Windows 的 DOS 界面,输入 ipconfig 命令,找到 IPv4 地址,然后在 客户端进行填写即可

Linux下C语言编写基于命令行的FTP客户端与服务端 这是--Linux程序设计--的一个大实验,虽然平时听课还算认真,但一直没时间来具体实现这个小的FTP。不是说实践是检验真理的唯一标准嘛,这个周末刚好闲来无事,就把它实现了吧。 下面是要求: 基于客户/服务器交互模式,采用TCP/IP通信协议,实现以支持远程文件传输的客户/服务器软件,支持文件的上传和下载。其中客户端软件命名为myftp,服务器软件命名为ftpserver 服务器 启动方式 阅读详情

相关推荐

MFC实现FTP客户端

        因项目需要,利用MFC写了一个客户端,实现远程文件的上传,下载,删除等功能。        服务器用的是免费的Home Ftp Server。首先简单介绍一下CInternetSession类和CFtpConnection类,他们包含在afxinet.h头文件中,是MFC中对连接FTP服务器功能的一个封装。主界面:一.连接过程void CMFCApplication2Dlg::Co...

pzp201833的博客 6456

计算机网络课程设计(Winsock实现FTP)

老师的要求是:要用Winsock库,实现FTP,要求在自己的电脑上完成客户端和服务端,要有图形化界面。 由于Winsock我也是现学的,所以不一定用的很好,而且c/c++也不太会,所以可能会有很多不完美的地方,仅供大家写课设时参考,最后我会放上我自学的网站。 话不多说,先上源码 服务端 #define _WINSOCK_DEPRECATED_NO_WARNINGS #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <

赵啸天的博客 2527

自己动手实现的基础FTP客户端及服务端

文件传输协议(FTP)是互联网上用于文件传输的一套标准协议。FTP允许用户登录到远程计算机,实现文件的上传下载,是网络文件共享的基础。它的出现,解决了文件在网络中的传递问题,使得数据交换变得高效和标准化。Microsoft Foundation Classes(MFC)是一套由微软提供的、为简化Windows应用程序开发而设计的C++类库。MFC封装了Windows API,为开发者提供了一种面向对象的方式来创建Windows应用程序。

weixin_42174098的博客 1109

C/C++ 原生套接字抓取FTP数据包

网络通信在今天的信息时代中扮演着至关重要的角色,而对网络数据包进行捕获与分析则是网络管理、网络安全等领域中不可或缺的一项技术。本文将深入介绍基于原始套接字的网络数据包捕获与分析工具,通过实时监控网络流量,实现抓取流量包内的FTP通信数据,并深入了解数据传输的细节,捕捉潜在的网络问题以及进行安全性分析。

微软技术分享 1万+

Linux环境下FTP客户端与服务端完整安装配置指南

功能命令存储位置运行级别控制支持精细控制(如仅level 3)基于target抽象(如multi-user.target)实时反馈无提供enable/disable确认提示推荐程度已弃用,仅用于旧系统当前标准,强烈推荐✅ 最佳实践:无论使用哪种底层机制,最终都应通过验证结果。# 基础设置listen=YES# 匿名用户权限write_enable=NO # 匿名整体禁写# 虚拟用户支持# PAM认证指向虚拟库。

weixin_36064575的博客 1028

LWIP和FATFS 实现 FTP 服务端

LWIP 是一个开源的轻量级 TCP/IP 协议栈,它具有占用内存少、可裁剪性强等特点,非常适合在嵌入式系统中使用。LWIP 支持多种网络接口,包括以太网、Wi-Fi 等,可以方便地与各种硬件平台进行集成。本文介绍了如何使用 LWIP 实现一个简单的 FTP 服务端。通过本文的介绍,你可以了解到 LWIP 和 FTP 的基本概念,以及如何使用 LWIP 实现 FTP 服务端的步骤。在实际应用中,你可以根据自己的需求对 FTP 服务端进行扩展和优化,以满足不同的应用场景。

千千道的博客 3578

详解 ➾【FTP服务工作原理及连接模式】

🟢 该章详细介绍了FTP服务工作原理(发出连接请求、建立FTP会话连接、数据传输、自动释放动态分配的端口)及连接模式(主动模式&被动模式)。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 1万+

屏幕共享软件代码

以前使用C#编写的屏幕共享软件代码,大家可以下载下来玩玩,使用UDP广播方式实现,测试没问题,当然只是实现了屏幕共享,但是并没有考虑更多的细节。

FTP连接过程详解

FTP是仅基于TCP的服务,不支持UDP。 FTP使用2个端口,一个数据端口和一个控制端口。通常来说这两个端口是21(控制端口)和20(数据端口)。但由于工作模式不同,数据端口并不总是20。

一条整理笔记的咸鱼 4068

BGA是PCB 上常用的组件,通常CPU、NORTH BRIDGE、SOUTH BRIDGE、

BGA是PCB 上常用的组件,通常CPU、NORTH BRIDGE、SOUTH BRIDGE、 AGP CHIP、CARD BUS CHIP…等,大多是以bga 的型式包装,简言之,80﹪的 高频信号及特殊信号将会由这类型的package 内拉出。因此,如何处理BGA package 的走线,对重要信号会有很大的影响。

uc所有版本集合

uc浏览器所有版本集合,收集uc浏览器任何型号任何版本的浏览器集合,总有一个适合你的。

FTP服务配置

是一种文件传输协议,用来上传和下载,实现远程共享文件和统一管理文件。用于互联网上的控制文件的双向传输,是一个应用程序。工作在TCP/IP协议簇的,其传输协议是TCP协议提高文件传输的共享性和可靠性,使用C/S模式的工作方式。连接时同时处理服务器和客户端的连接命令和数据传输,FTP将命令和数据分开传输,提高传输效率。

wkysdhr的博客 6085

Excel +VBA编写的值班排班表

利用Excel+VBA编写的值班排班表,可以自动生成日历、值班出差人员点击选择、值班出差人员互斥、自动生成值班表格、值班出差统计及柱状图等功能。

网络协议——FTP(简介、搭建FTP服务端)

网络协议——FTP(简介、搭建FTP服务端),简介、主动模式与被动模式、搭建FTP服务端。

计算机硕士的博客 1万+

AE表达式总汇火星课程经典

AE表达式总汇火星课程经典教程,轻松学会关键表达式

信号完整性基础04:串扰(1)

我们理解了“单个”传输线(传输线是信号路径+回流路径,切记~),但大多数情况下单独“传输线”的情况并不多见(理想情况下的同轴线缆可以算一个),大多数我们PCB板上有成百上千条走线,它们组成了一个“大社会”,就如当年的TVB神剧《创世纪》一样,到处充满着恩怨情仇;稍处理不慎,单板这个“社会”就会崩溃。那么我们要从哪里入手去理解它呢?最基本的就是从两条PCB走线(传输线)之间的串扰开始。好,年前倒数第二章:《为什么会有串扰》。 ps:我们了解了x射线是啥,那么今天开始讲“放射线”,这两种东西是否就是同一种呢~

WKEZHENG的博客 6030

宝塔面板FTP服务设置并实现使用FTP客户端远程连接服务端

本文主要介绍宝塔FTP文件传输服务如何搭配内网穿透工具,实现随时随地远程连接局域网环境搭建的宝塔FTP文件服务并进行文件管理!宝塔FTP是宝塔面板中的一项功能,用于设置和管理FTP服务。通过宝塔FTP,用户可以创建FTP账号,配置FTP用户权限,并进行文件上传、下载和删除等操作.cpolar是一种安全的内网穿透云服务,可以将内网下的本地服务器通过安全隧道暴露至公网,使得公网用户可以正常访问内网服务。

m0_73879806的博客 1332

【Python】SUMO + Python 联合仿真平台

强化学习的核心思想是让智能体 (Agent) 通过与环境 (Environment) 的交互来学习如何做出最优决策,以最大化累积奖励 (Cumulative Reward)。在交通场景中,智能体可以是交通信号控制器、自动驾驶车辆或交通管理中心,环境则是 SUMO 模拟的交通路网,奖励则与交通效率、安全、环保等目标相关。交通系统本质上是动态的、随机的、高度复杂的系统,传统的基于规则或模型的优化方法在面对不断变化的需求和突发事件时,往往显得力不从心。强化学习的优势在于:在交通领域,强化学习已经被广泛应用于:为了

宅男很神经 1988

CentOS 6.5 & CentOS 7 rpm安装ftp服务端与ftp客户端

一、rpm安装ftp服务端 1、查看是否安装vsftp rpm -qa|grep vsftpd 如果出现vsftpd,说明已经安装 vsftp 2、下载vsftpd: 我这里下载的是vsftpd-2.2.2-24.el6.x86_64.rpm 3、安装vsftpd rpm -ivh vsftpd-2.2.2-24.el6.x86_64.rpm 4、测试 是否安装成功 service vsftp...

Java进阶之路 6416

MitoZ|动物线粒体基因组组装注释软件

一、MitoZ是什么 是基于python3开发的可以自动过滤双端测序的原始数据、mt基因组组装、mt基因组注释以及mt基因组可视化的工具。 官方的说明文档地址:https://gitee.com/CHANyp/MitoZ#citation 二、MitoZ的安装 git clone https://gitee.com/CHANyp/MitoZ.git cd MitoZ/version_2.4-alpha tar -jxvf release_MitoZ_v2.4-alpha.tar.bz2 三、运行Mito

qq_50637636的博客 1万+

本地 AI 自由!OpenClaw+Ollama 双系统部署教程(Windows/Linux),零成本离线跑大模型

本文详细介绍了如何在Windows和Linux双系统中部署OpenClaw AI助手,并通过Ollama对接本地大模型实现完全离线使用。教程包含环境准备、OpenClaw安装配置、Ollama本地模型部署、系统对接等完整流程,特别强调隐私安全和零Token消耗的优势。针对不同操作系统提供具体命令,并给出常见问题解决方案,即使是新手也能快速搭建专属本地AI助手。最终实现的方案无需联网、无使用成本,且能保障数据隐私安全。

2501_93651177的博客 7227

使用QT实现FTP客户端与服务端(1)

1.实现FTP客户端 作为FTP客户端,需要主动发起连接至服务端所在ip的默认21号端口,连接步骤与数据交互如下: 1.客户端链接服务器端口 2.客户端分步输入用户名密码 3.(可选)客户端输入数据传输模式,默认为被动模式,可主动切换为主动模式(在一些机器上被禁用,需手动开启) 4.输入操作指令 5.根据数据传输模式建立数据连接。(5*进行数据传输) 6.退出 1)h文件 #include #i...

byzzw的博客 7183

mongodb在游戏开发领域的优势

目前游戏服务器使用mysql作为数据库的较多,然而,使用mongodb来作为存储层,在某些方面比mysql更为方便和适合。

littleschemer的博客 1698
上一篇: 网络编程1-初探winSocket
下一篇: FTP 编写 3:同时为多个客户端服务(多线程)
_萧_
博客等级 码龄10年 55粉丝 157原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值