文章目录

  • 1、源代码
  • 2、使用方法
  • 3、局限性

1、源代码

server.cpp

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<errno.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<unistd.h>#define MAXLINE 4096int main(int argc, char** argv){int  listenfd, connfd;struct sockaddr_in  servaddr;char  buff[4096];FILE *fp;int  n;if( (listenfd = socket(AF_INET, SOCK_STREAM, 0)) == -1 ){printf("create socket error: %s(errno: %d)\n",strerror(errno),errno);return 0;}printf("----init socket----\n");memset(&servaddr, 0, sizeof(servaddr));servaddr.sin_family = AF_INET;servaddr.sin_addr.s_addr = htonl(INADDR_ANY);servaddr.sin_port = htons(6666);//设置端口可重用int contain;setsockopt(listenfd,SOL_SOCKET, SO_REUSEADDR, &contain, sizeof(int));if( bind(listenfd, (struct sockaddr*)&servaddr, sizeof(servaddr)) == -1){printf("bind socket error: %s(errno: %d)\n",strerror(errno),errno);return 0;}printf("----bind sucess----\n");if( listen(listenfd, 10) == -1){printf("listen socket error: %s(errno: %d)\n",strerror(errno),errno);return 0;}if((fp = fopen("lenna.jpg","ab") ) == NULL ){printf("File.\n");close(listenfd);exit(1);}printf("======waiting for client's request======\n");while(1){struct sockaddr_in client_addr;socklen_t size=sizeof(client_addr);if( (connfd = accept(listenfd, (struct sockaddr*)&client_addr, &size)) == -1){printf("accept socket error: %s(errno: %d)",strerror(errno),errno);continue;}while(1){n = read(connfd, buff, MAXLINE);if(n == 0)break;fwrite(buff, 1, n, fp);}buff[n] = '\0';printf("recv msg from client: %s\n", buff);close(connfd);fclose(fp);}close(listenfd);return 0;
}

client.cpp

#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <stdlib.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <string>
#include <iostream>
using namespace std;#define MAXLINE 4096int main(int argc, char** argv){int   sockfd, len;char  buffer[MAXLINE];struct sockaddr_in  servaddr;FILE *fq;if( argc < 2){printf("usage: ./client <ipaddress>\n");return 0;}if( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0){printf("create socket error: %s(errno: %d)\n", strerror(errno),errno);return 0;}memset(&servaddr, 0, sizeof(servaddr));servaddr.sin_family = AF_INET;servaddr.sin_port = htons(6666);if( inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0){printf("inet_pton error for %s\n",argv[1]);return 0;}if( connect(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr)) < 0){printf("connect error: %s(errno: %d)\n",strerror(errno),errno);return 0;}if( ( fq = fopen(argv[2],"rb") ) == NULL ){printf("File open.\n");close(sockfd);exit(1);}bzero(buffer,sizeof(buffer));while(!feof(fq)){len = fread(buffer, 1, sizeof(buffer), fq);if(len != write(sockfd, buffer, len)){printf("write.\n");break;}}close(sockfd);fclose(fq);return 0;
}

2、使用方法

以上代码的功能是客户端向服务端发送文件,所以我们创建两个文件夹Server存放服务端,Client存放客户端,执行代码以后,查看Server文件夹中是否多了来自客户端发送的文件。

mkdir Server
cd Server
sudo vim server.cpp
#将代码粘贴进去
g++ server.cpp -o server
./server
mkdir Client
cd Client
sudo vim client.cpp
#将代码粘贴进去
g++ client.cpp -o client
#在server已经运行的基础上,执行client
./client 127.0.0.1 /home/barry/lenna.jpg


查看Server文件夹下是不是手到了来自client的文件。

cd Server

答案是存在的。

3、局限性

目前客户端可以根据自己的需要发送指定路径文件,但是服务端收到的文件目前统一设定为lenna.jpg,这里可以通过更改代码实现服务端收到的文件设定为客户端发送过来的名字。这个,考完试补上。

Linux下socket-文件传输相关推荐

  1. tftpd32服务器软件在Windows与linux 下的文件传输(服务器ip 的设置问题)

    tftpd32服务器软件在Windows与linux 下的文件传输 https://blog.csdn.net/stoic163/article/details/42804421 2015年01月17 ...

  2. Linux网络编程之文件传输,基于c语言的网络编程,在Linux下实现文件传输

    带MD5完整性验证功能的文件传输:https://blog.csdn.net/weixin_45640148/article/details/122391285 功能描述: 基于C/S模式下的,客户端 ...

  3. Linux下Socket相关头文件总结

    一 三种类型的套接字: 1.流式套接字(SOCKET_STREAM)     提供面向连接的可靠的数据传输服务.数据被看作是字节流,无长度限制.例如FTP协议就采用这种. 2.数据报式套接字(SOCK ...

  4. linux 开发板传文件,Linux下用USB传输文件到开发板

    记录一下解决EZ6410的板子在Linux下用USB来传输文件问题的过程~ 前两天ARM11的开发板到了,需要先验证一下各项功能.以往用FS2410时用的是minicom+usb2ram,功能比win ...

  5. windows与Linux实时传输数据,I01 物理隔离条件下Windows与Linux服务器的文件传输脚本...

    title: I01 物理隔离条件下Windows与Linux服务器的文件传输脚本author: Adolph Leecategories: 进阶tags: paramiko打怪升级mathjax: ...

  6. 【Linux系统与网络编程】16:Socket文件传输2

    Socket文件传输2 OVERVIEW Socket文件传输2 在socket文件传输1中使用了一种在buff缓冲数组后添加\0的方式实现文件的传输. 实现方法2:根据TCP在数据传输过程中进行粘包 ...

  7. 【Linux系统与网络编程】15:Socket文件传输1

    Socket文件传输1 在socket多线程实现多客户端连接服务器进行聊天的基础上,添加文件传输功能. fix1 在server.c中添加file_info结构体,用于单独接受某次客户端发送的file ...

  8. linux下SCP命令 传输文件

    linux下SCP命令传输,我经常忘记了,虽然是很菜,但是还是要记录一下,免的又玩忘记,其实忘记的原因是我不是经常用,没有用心去记,汗. 设有两机,均为局域网,两机可相互通信无问题,中间无防火墙. 两 ...

  9. Linux下Socket编程

    Linux下Socket编程    网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符.Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的S ...

  10. LINUX下Socket编程 函数格式详解

    你需要了解的一些系统调用: socket() bind() connect() listen() accept() send() recv() sendto() recvfrom() close() ...

最新文章

  1. 使用Tensor Expression张量表达式处理算子
  2. 第2章 S交换机管理平面安全
  3. ScrollView充满屏幕
  4. C语言 计算一串字符中出现的数字字符数
  5. node windows更新_node.js 01 简介 - 产生,发展历程,优势,适用场景,实际应用
  6. linux 内核连接跟踪,Linux内核连接跟踪锁的优化分析(1)
  7. ML:自然语言处理NLP面试题
  8. android中开启线程处理,Android线程与消息处理
  9. 为什么Java中类方法不能访问实例方法
  10. 用Python将多张图片合并成一PDF文件
  11. 按英语体育计算机创建透视表,数据透视表和数据透视图概述
  12. 自制割接(平滑过滤)实验大全
  13. CentOS配置DHCP服务器
  14. HDU6268 Master of Subgraph
  15. 整理了一份嵌入式相关开源项目、库、资料
  16. WPS_Word空白页删除
  17. 通信原理第三章:窄带随机过程
  18. pytorch学习笔记九:权值初始化
  19. 31.3 Java进阶之lambda方法引用
  20. TcaplusDBX光与夜之恋 | 与众不同的真实恋爱

热门文章

  1. 在云端飞舞,遨游云浏览器体验感受
  2. 领域驱动设计系列文章(2)——浅析VO、DTO、DO、PO的概念、区别和用处
  3. 【Java】15分钟快速体验阿里Java诊断工具Arthas
  4. C++--第22课 - 类模板 - 下
  5. 解压速度更快, Zstandard 1.4.1 发布
  6. 科大讯飞:5年内 科技会场没机器人端茶倒水就太low了
  7. tomcat中开启SSL
  8. new Random().nextInt
  9. 在 github 上建立 pages 的过程
  10. 使用java连接mysql数据库