c++用socket,ftp进行文件传输,实现上传与下载文件功能

c++用socket,ftp进行文件传输,实现上传与下载文件功能

c++用socket,ftp进行文件传输,实现上传与下载文件功能

用到socket,需要分为服务器端和客户端。

服务器端

1 声明并初始化一个服务端(本地)的地址结构

 
  sockaddr_in server_addr; 
  server_addr.sin_family = AF_INET; 
  server_addr.sin_addr.S_un.S_addr = INADDR_ANY; 
  server_addr.sin_port = htons(PORT); 

//2 初始化socket


  WSADATA wsaData; 
  WORD socketVersion = MAKEWORD(2, 0); 
  if(WSAStartup(socketVersion, &wsaData) != 0) 
  {
    
    printf("Init socket dll error!"); 
    exit(1); 
  } 

3创建socket

// 创建socket 
  SOCKET m_Socket = socket(AF_INET, SOCK_STREAM, 0); 
    if (SOCKET_ERROR == m_Socket) 
    {
    
      printf("Create Socket Error!"); 
    exit(1); 
    } 

4绑定监听

//监听 
  if (SOCKET_ERROR == listen(m_Socket, 10)) 
  {
    
    printf("Server Listen Failed: %d", WSAGetLastError()); 
    exit(1); 
  } 

5读取信息,判断客户端是需要读文件还是下载文件

	char buffer[BUFFER_SIZE]; 
	memset(buffer, 0, BUFFER_SIZE); 
    if (recv(m_New_Socket, buffer, BUFFER_SIZE, 0) < 0) 
    {
    
      printf("Client Receive Data Failed!"); 
      break; 
    } 
	
	std::cout<<buffer<<endl;

客户端

1初始化socket

// 初始化socket dll 
  WSADATA wsaData; 
  WORD socketVersion = MAKEWORD(2, 0); 
  if(WSAStartup(socketVersion, &wsaData) != 0) 
  {
    
    printf("Init socket dll error!"); 
    exit(1); 
  } 

2创建socket,指定服务器

//创建socket 
	  SOCKET c_Socket = socket(AF_INET, SOCK_STREAM, 0); 
	  if (SOCKET_ERROR == c_Socket) 
	  {
    
		  printf("Create Socket Error!"); 
		  system("pause"); 
		  exit(1); 
	  } 
 
	  //指定服务端的地址 
	  sockaddr_in server_addr; 
	  server_addr.sin_family = AF_INET; 
	  server_addr.sin_addr.S_un.S_addr = inet_addr(SERVER_IP); 
	  server_addr.sin_port = htons(PORT); 

3连接服务器

if (SOCKET_ERROR == connect(c_Socket, (LPSOCKADDR)&server_addr, sizeof(server_addr))) 
	  {
    
		  printf("Can Not Connect To Client IP!\n"); 
		  system("pause"); 
		  exit(1); 
	  } 

4向服务器请求指令,是上传,还是下载。

		if(send(c_Socket, buffer, BUFFER_SIZE, 0) < 0) 
		{
    
			  printf("Send File Name Failed\n"); 
			  system("pause"); 
			  exit(1); 
		} 

然后上传和下载过程就和本地的文件读写内容差不多。

有需要源码的小伙伴可以联系我。也欢迎其他小伙伴留言交流学习
q:2316773638

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/2868.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 打印机扫描smb错误_打印服务器错误不能提供打印

    打印机扫描smb错误_打印服务器错误不能提供打印1、首先要检查打印机是否处于联机状态,如果打印机没有联机是无法进行工作的,检查打印机与电脑之间的连线是否正确。2、然后在开始中找到设备和打印机,在弹出窗口右键单击空白处,选择添加打印机,添加本地打印机,点击下一步,搜索并安装驱动,安装完成后就可以正常打印了。3、可以重新启动打印机,待打开后,让打印机重新工作。4、把打印机设置为默认打印机,点击开始,然后找到设备和打印机,打开打印机窗口,鼠标的右键点…

    2022年10月19日
    0
  • java public interface_Java 接口interface的基础[通俗易懂]

    java public interface_Java 接口interface的基础[通俗易懂]原标题:Java接口interface的基础定义接口的时候是由关键字interface来定义自己是一个接口,格式如下:interface接口名接口体中包含常量的声明和抽象方法两部分接口体中只有抽象方法,没有普通的方法,而且接口体中所有的常量的访问权限一定都是public,而且是static常量,所有的抽象方法的访问权限一定都是public;eg:interfaceA{publicstati…

    2022年7月16日
    11
  • 三极管开关电路设计过程[通俗易懂]

    三极管开关电路设计过程[通俗易懂]三极管作为开关,是三极管工作于饱和区,以NPN型三极管为例(以下全部是)如图所示:当Vin=0时,三极管b-e之间没有正向偏置,而截止,相当于断开状态,此时Vce=Vcc,c极电流Ic=0;当三极管闭合(处于饱和区),负载Rc与三极管相当于串联,流经Rc的电流,通过欧姆定律可知,Ic=(Vcc-Vce)/Rc,(此时Ic为为饱和电流,即c极所能达到最大的电流,Vce为c极与e极的饱和电压,…

    2022年9月15日
    0
  • Elasticsearch(es) 查询语句语法详解

    Elasticsearch(es) 查询语句语法详解Elasticsearch(es)查询语句语法详解

    2025年6月1日
    0
  • mysql 自定义函数 case when[通俗易懂]

    mysql 自定义函数 case when[通俗易懂]#字符串局部替换函数DELIMITER$$CREATEFUNCTIONreplaceString(sVARCHAR(14),fVARCHAR(5),rVARCHAR(5))RETURNSVARCHAR(14)BEGIN DECLAREfindposINT; DECLAREreturnstringVARCHAR(14); SETfindpos=INSTR(

    2022年9月7日
    0
  • python之路 socket、socket server

    python之路 socket、socket server

    2022年3月7日
    46

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号