socket简单文件传输实例

简介: 今天在linux系统上写了一个简单的socket文件传输的例子,共享出来仅供参考。例子很简单,只要初学者了解简单的几个socket相关函数和文件函数就能写的出来。

服务器端程序:


#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/shm.h>
#define BUF_SIZE      1024
#define SERVER_PORT   1234
int main()
{
char *filename = "sendfile.txt";
FILE *fp = fopen(filename,"rb" );
if(fp == NULL )
{
printf("open file error!!\r\n");
exit(1);
}
else
{
printf("open file succeed\r\n");
}
int server_sockfd = socket(AF_INET,SOCK_STREAM,0);
///bind listen
struct sockaddr_in server_sockAddr;
memset(&server_sockAddr,0 , sizeof(server_sockAddr));
server_sockAddr.sin_family = PF_INET;
server_sockAddr.sin_addr.s_addr = htonl(INADDR_ANY);
server_sockAddr.sin_port = htons(SERVER_PORT);
if(bind(server_sockfd,(struct sockaddr *)&server_sockAddr,\
sizeof(server_sockAddr) ) == -1)
{
perror("bind error\r\n");
exit(1);
}
if(listen(server_sockfd,20) == -1)
{
perror("listen error\r\n");
exit(1);
}
///accept
struct sockaddr_in client_addr;
int clnSize = sizeof(client_addr);
int conn = accept(server_sockfd,(struct sockaddr*)&client_addr,&clnSize);
if(conn <0)
{
perror("accept error!\r\n");
exit(1);
}
/// 循环发送文件直到末尾;
char buffer[BUF_SIZE]={0};
int send_len = 0;
while((send_len = fread(buffer,1, BUF_SIZE,fp)) >0)
{
    send(conn, buffer, send_len, 0);
}
shutdown( conn, SHUT_WR);
recv(conn,buffer,BUF_SIZE, 0);
fclose(fp);
close(conn);
close(server_sockfd);
return 0;
}


客户端程序:


#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/shm.h>
int main()
{
///手动输入创建你文件
char filename[100]; //保存文件名
printf("input the file name: ");
gets(filename);
//scanf("Input file name to save:%s ", filename);
FILE *fp = fopen(filename, "wb");
if(fp == NULL){
printf("open file failed!!\r\n");
exit(1);
}
//定义客户端socketfd
int sock_cli = socket(PF_INET,SOCK_STREAM, IPPROTO_TCP);
//connect
struct sockaddr_in serveraddr;
serveraddr.sin_family = PF_INET;
serveraddr.sin_port = htons(1234);
serveraddr.sin_addr.s_addr =inet_addr("127.0.0.1");
if (connect(sock_cli,(struct sockaddr *)&serveraddr,sizeof(serveraddr)) <0)
{
  perror("connect failed!\r\n");
  exit(1);
}
int ncount = 0;
char recvbuf[1024] = {0};
while( (ncount = recv(sock_cli, recvbuf, 1024, 0)) >0) {
fwrite(recvbuf, 1, ncount, fp);
}
puts("file transfer succeed!!\r\n");
memset(recvbuf, 0, 1024);
fclose(fp);
close(sock_cli);
return 0;
}

然后呢我们在linux命令行下对这两个文件分别编译,别说你不会编译的命令哈。

先执行服务器端的程序


微信图片_20230116144518.png


再执行客户端的程序:


微信图片_20230116144612.png


完了后你会发现当前目录下多了一个你在客户端手动创建的文件,文件内容与服务器端传送过来的文件内容一致!

总结下:其实呢,socket的文件传输和socket一般的字符串通信差不多的,将文件的内容读出来发送到对端而已。

目录
相关文章
|
2月前
|
监控 Python
视频监控笔记(五):Jetson Nano上通过Tkinter和Socket实现GUI文件传输
这篇文章介绍了如何使用Python的Tkinter和Socket在Jetson Nano上实现图形用户界面(GUI)的文件传输系统,包括服务器端和客户端,能够进行文件的发送和接收,并展示传输进度。
46 1
|
2月前
|
JSON 数据格式 Python
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
本文介绍了如何使用Python的socket模块实现客户端到服务器端的文件传输,包括客户端发送文件信息和内容,服务器端接收并保存文件的完整过程。
173 1
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
|
3月前
|
关系型数据库 MySQL 数据库
docker启动mysql多实例连接报错Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’
docker启动mysql多实例连接报错Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’
220 0
|
6月前
|
监控 网络协议 安全
Socket网络编程中的常见应用场景与实例分析
Socket网络编程中的常见应用场景与实例分析
|
5月前
|
Java 物联网 应用服务中间件
Socket网络编程中的常见应用场景与实例分析
Socket网络编程中的常见应用场景与实例分析
|
Ubuntu TensorFlow 算法框架/工具
基于 socket 的即时通讯文件传输聊天软件
基于 socket 的即时通讯文件传输聊天软件
155 0
基于 socket 的即时通讯文件传输聊天软件
|
PHP
PHP实现Workerman实例 高性能PHP Socket即时通讯框架
PHP实现Workerman实例 高性能PHP Socket即时通讯框架
434 0
|
Python
Python编程:socket实现文件传输
Python编程:socket实现文件传输
360 0
|
前端开发 C++
c++用socket,进行文件传输,实现上传与下载文件功能
c++用socket,进行文件传输,实现上传与下载文件功能
|
Web App开发 XML Java
Java 技术篇 - 启动web服务接收浏览器请求并响应实例演示,解决socket响应浏览器显示中文乱码问题,web服务response响应设置浏览器显示字体方法
Java 技术篇 - 启动web服务接收浏览器请求并响应实例演示,解决socket响应浏览器显示中文乱码问题,web服务response响应设置浏览器显示字体方法
176 0
Java 技术篇 - 启动web服务接收浏览器请求并响应实例演示,解决socket响应浏览器显示中文乱码问题,web服务response响应设置浏览器显示字体方法

热门文章

最新文章