linux下传输文件

/*服务器代码*/

#include <netinet/in.h>    /* for sockaddr_in */
#include <sys/types.h>     /* for socket */
#include <sys/socket.h>    /* for socket */
#include <stdio.h>         /* for printf */
#include <stdlib.h>        /* for exit */
#include <string.h>        /* for bzero */
#include <time.h>          /*for time_t and time */

#define SERVER_PORT 7754
#define LENGTH_OF_LISTEN_QUEUE 20
#define BUFFER_SIZE 1024
#define SEND_FILE_NAME "test.rmvb"   /* the name of file you want send */

int main(int argc, char **argv)
{
 /*设置一个socket地址结构server_addr,代表服务器internet地址, 端口 */
 struct sockaddr_in server_addr;
 bzero(&server_addr,sizeof(server_addr)); /*把一段内存区的内容全部设置为0 */
 server_addr.sin_family = AF_INET;
 server_addr.sin_addr.s_addr = htons(INADDR_ANY);
 server_addr.sin_port = htons(SERVER_PORT);
 // time_t now;
 FILE *stream;
 
 /*创建用于internet的流协议(TCP)socket,用server_socket代表服务器socket */
 int server_socket = socket(AF_INET,SOCK_STREAM,0);
 if( server_socket < 0)
 {
  printf("Create Socket Failed!");
  exit(1);
 }
 
 /*把socket和socket地址结构联系起来 */
 
 if( bind(server_socket,(struct sockaddr*)&server_addr,sizeof(server_addr)))
 {
  printf("Server Bind Port : %d Failed!", HELLO_WORLD_SERVER_PORT);
  exit(1);
 }
 
 /*server_socket用于监听 */
 
 if ( listen(server_socket, LENGTH_OF_LISTEN_QUEUE) )
 {
  printf("Server Listen Failed!");
  exit(1);
 }
 
 while (1) /*服务器端要一直运行 */
 {
  struct sockaddr_in client_addr;
  socklen_t length = sizeof(client_addr);

    /* accept connect*/
  int new_server_socket = accept(server_socket,(struct sockaddr*)&client_addr,&length);
  if ( new_server_socket < 0)
  {
   printf("Server Accept Failed!/n");
   break;
  }
  
  char buffer[BUFFER_SIZE];
  bzero(buffer, BUFFER_SIZE);
  
  strcpy(buffer,"Hello,World! from server !");
  strcat(buffer,"/n");
  send(new_server_socket,buffer,BUFFER_SIZE,0);
  
  bzero(buffer,BUFFER_SIZE);
  
  /*接收客户端发送来的信息到buffer中 */
  length = recv(new_server_socket,buffer,BUFFER_SIZE,0);
  
  if (length < 0)
  {
   printf("Server Recieve Data Failed!/n");
   exit(1);
  }
  
  printf("/n%s",buffer);
  
  /* open file */
  if((stream = fopen(SEND_FILE_NAME,"r"))==NULL)
  {
   printf("The file 'data1' was not opened! /n");
   exit(1);
  }
  else
    printf("The file 'filename' was opened! /n");
  
  bzero(buffer,BUFFER_SIZE);

    /* read file content and send it to client */
  int lengsize = 0;
  while((lengsize = fread(buffer,1,1024,stream)) > 0)
  {
   printf("lengsize = %d/n",lengsize);
   if(send(new_server_socket,buffer,lengsize,0)<0)
   {
    printf("Send File is Failed/n");
    break;
   }
   
   bzero(buffer, BUFFER_SIZE);
  }
  
  /* close file */
  if(fclose(stream))
  {
   printf("The file 'data' was not closed! /n");
    exit(1);
  }

  /*关闭与客户端的连接 */
  close(new_server_socket);      
 
 }
 
 /*关闭监听用的socket */
 close(server_socket);
 
 return 0;

}

 

/

/*本文件是客户机的代码/ */
#include <netinet/in.h>    /* for sockaddr_in */
#include <sys/types.h>     /* for socket  */
#include <sys/socket.h>    /* for socket */
#include <stdio.h>         /* for printf */
#include <stdlib.h>        /* for exit */
#include <string.h>        /* for bzero */
#include <time.h>          /*for time_t and time*/
#include <arpa/inet.h>

#define SERVER_PORT    7754
#define BUFFER_SIZE 1024
#define RECEIVE_FILE_NAME "dest.rmvb"  /* define the name of file you receive */

int main(int argc, char **argv)
{
  if (argc != 2)
  {
   printf("Usage: ./%s ServerIPAddress/n",argv[0]);
   exit(1);
  }
 
 //time_t now;
 FILE *stream;
 
 /*设置一个socket地址结构client_addr,代表客户机internet地址, 端口*/
 struct sockaddr_in client_addr;
 bzero(&client_addr,sizeof(client_addr)); /*把一段内存区的内容全部设置为0*/
 client_addr.sin_family = AF_INET;    /*internet协议族/*/
 client_addr.sin_addr.s_addr = htons(INADDR_ANY); /*INADDR_ANY表示自动获取本机地址*/
 client_addr.sin_port = htons(0);    /*0表示让系统自动分配一个空闲端口*/
 
 /*创建用于internet的流协议(TCP)socket,用client_socket代表客户机socket*/
 int client_socket = socket(AF_INET,SOCK_STREAM,0);
 if( client_socket < 0)
 {
  printf("Create Socket Failed!/n");
  exit(1);
 }
 
 /*把客户机的socket和客户机的socket地址结构联系起来*/
 if( bind(client_socket,(struct sockaddr*)&client_addr,sizeof(client_addr)))
 {
  printf("Client Bind Port Failed!/n");
  exit(1);
 }
 
 /*设置一个socket地址结构server_addr,代表服务器的internet地址, 端口*/
 struct sockaddr_in server_addr;
 bzero(&server_addr,sizeof(server_addr));
 server_addr.sin_family = AF_INET;
 if(inet_aton(argv[1],&server_addr.sin_addr) == 0) /*服务器的IP地址来自程序的参数*/
 {
  printf("Server IP Address Error!/n");
  exit(1);
 }
 
 server_addr.sin_port = htons(SERVER_PORT);
 socklen_t server_addr_length = sizeof(server_addr);
 
 /*向服务器发起连接,连接成功后client_socket代表了客户机和服务器的一个socket连接*/
 if(connect(client_socket,(struct sockaddr*)&server_addr, server_addr_length) < 0)
 {
  printf("Can Not Connect To %s!/n",argv[1]);
  exit(1);
 }
 
 char buffer[BUFFER_SIZE];
 bzero(buffer,BUFFER_SIZE);
 
 
 /*从服务器接收数据到buffer中*/
 int length = recv(client_socket,buffer,BUFFER_SIZE,0);
 if(length < 0)
 {
  printf("Recieve Data From Server %s Failed!/n", argv[1]);
  exit(1);
 }
 
 printf("/n%s/n",buffer);
 bzero(buffer,BUFFER_SIZE);
 strcpy(buffer,"Hello, World! From Client/n");
 
 /*向服务器发送buffer中的数据*/
 send(client_socket,buffer,BUFFER_SIZE,0);
 if((stream = fopen(RECEIVE_FILE_NAME,"w+t"))==NULL)
 {
  printf("The file 'data' was not opened! /n");
 }
 else
   bzero(buffer,BUFFER_SIZE);
 
 length = 0;
 while( length = recv(client_socket,buffer,BUFFER_SIZE,0))
 {
  if(length < 0)
  {
   printf("Recieve Data From Server %s Failed!/n", argv[1]);
   break;
  }
 
   int write_length = fwrite(buffer,sizeof(char),length,stream);
 
  if (write_length<length)
  {
   printf("File is Write Failed/n");
   break;
  }
 
   bzero(buffer,BUFFER_SIZE);
 
 }
 
 printf("Recieve File From Server[%s] Finished/n", argv[1]);
 
 /*关闭 文件*/
 fclose(stream);
 
 /*关闭socket*/
 close(client_socket);
 
 return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值