C语言基于socket的文件传输(可循环发送多个文件)

基本简介:

本次文件传输的实现主要是通过客户端向服务器发送下载请求,然后在服务器中找到对应的文件并打开文件,再继续向客户端传送文件,而客户端就在不停的接收。这是因为文件可能比较大,一个缓冲数组只能保存一部分文件内容,因此服务器得不断从文件中读取内容并发给客户端,而客户端得不停的循环接收。

但是在事先,得将相应要发送的文件(照片,音频,视频等)保存在服务器相应的目录下。而这个是不符合实际要求的,通常来讲,是应该将客户端1的文件发送给客户端2,而服务器仅仅只是起到一个中转站的作用,即文件应该事先保存在客户端1下。这里我们只是完成文件传输的相应功能就行了,就不在计较这些啦。因为只要你理解了这一块,可以根据自己的实际需要,在进行修改。

具体编译:

gcc server.c -o server -lpthread     //这是因为在服务器中加入了线程函数,所以编译的时候需要加上 -lpthread  。

gcc client.c -o client 

记住一定要先运行服务器,在运行客户端。在客户端运行的时候回提醒你输入服务器对应的pc ip,如实输入就行啦。如果是在本机pc上进行测试的话,也可以输入0.0.0.0   。


server.c:

#include <stdio.h>
#include <netdb.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <netinet/in.h>
#include <pthread.h>

#define portnum 12345
#define FILE_SIZE 500 
#define BUFFER_SIZE 1024

void *net_thread(void * fd);

int main()
{
	//初始化套接字
	int server_fd=socket(AF_INET,SOCK_STREAM,0);
	if(-1==server_fd)
	{
		perror("socket");
		exit(1);
	}
	//绑定端口和ip;
	struct sockaddr_in server_addr;   //struct sockaddr_in为结构体类型 ,server_addr为定义的结构体   
	server_addr.sin_family=AF_INET;   //Internet地址族=AF_INET(IPv4协议) 
	server_addr.sin_port=hton
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值