现在的位置: 首页 > 综合 > 正文

Linux下文件的网络传输

2018年03月16日 ⁄ 综合 ⁄ 共 2881字 ⁄ 字号 评论关闭

今天的事太多,没有认真的完成任务,不过把服务器端的文件传输做好了!

明天把服务器端的代码集成起来测试一下,并把网络客户端程序做好!

把代码贴出来吧!便于保存!

头文件:server_udpsocket.h

#ifndef _SERVER_UDPSOCKET_H_
#define _SERVER_UDPSOCKET_H_

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <pthread.h>

#include <sys/wait.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <errno.h>
#include <sys/types.h>

 

#include <sys/stat.h>
#include <fcntl.h>

#define bool int
#define true 1
#define false 0

int errno ;
bool init_udpsocket() ;
bool udpsocket_Run() ;
void *thread_udpsocket() ;
#endif
程序文件:server_udpsocket.c

#include "server_udpsocket.h"

int hsockfd;                        // Socket file descriptor
int hnsockfd;                       // New Socket file descriptor
int localport=6767 ;          //Local socket port
struct sockaddr_in addr_local;     //local socket address
struct sockaddr_in addr_remote;  //remote socket address
int sin_size ;
//file operation
FILE *file=NULL ;
char tempbuf[65535] ;
char revbuf[15] ;
//thread
pthread_t hthread_udpsocket ;

bool init_udpsocket()
{
 int ret ;
 
 //create socket file description
 hsockfd=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP) ;
 if(hsockfd==-1)
 {
  printf("UDPSocket:failed to obtain socket descripter/n") ;
  printf("Mesg:%s/n",sys_errlist[errno]) ;  
  return false ;
 } 
 
 //fill local address
 addr_local.sin_family = AF_INET;           // Protocol Family
  addr_local.sin_port = htons(localport);         // Port number
  addr_local.sin_addr.s_addr  = INADDR_ANY;  // AutoFill local address
  bzero(&(addr_local.sin_zero), 8);          // Flush the rest of struct

//bind port
 ret=bind(hsockfd, (struct sockaddr*)&addr_local, sizeof(struct sockaddr)) ;
 if(ret==-1)
 {
  printf("UDPSocket:Bind port failed!/n") ;
  printf("Mesg:%s/n",sys_errlist[errno]) ;
  close(hsockfd) ;
  return false ;
 } 
 return true ;
}

bool udpsocket_Run()
{
 int ret =-1 ;
 ret=pthread_create(&hthread_udpsocket,NULL,thread_udpsocket,NULL) ;
 return true ;
}

void *thread_udpsocket()
{
 unsigned int ret ;
 sin_size=sizeof(addr_remote) ;
 //initial udp socket
 if(!init_udpsocket())
 {
  goto exit ;
 }
printf("UDPSocket:udpsocket thread start!/n") ;
 while(1)
 {
  //wait client request
  ret=recvfrom(hsockfd, revbuf,15,0,(struct sockaddr *)&addr_remote, &sin_size) ;//reserve the interface to control capture
          //process ,for example control speed of sending printf("")
printf("hello world!/n") ;  
  if(ret==-1)
  {
   printf("Error:Receive Failed!/n") ;
   break ;
  }
  //open file
  file=fopen("temp.jpg","r") ;
  if(file==NULL)
  {
   printf("UDPSocket:open file failed!/n") ;
   printf("Mesg:%s/n",sys_errlist[errno]) ;   
   goto exit ;
  }
  ret=fread(tempbuf,1,65535,file) ;
  if(ret==-1)
  {
   printf("UDPSocket:read file failed!/n") ;
   printf("Mesg:%s/n",sys_errlist[errno]) ;   
  }else
  {
   ret=sendto(hsockfd,tempbuf,ret,0,(struct sockaddr *)&addr_remote, sin_size) ;
   if(ret==-1)
   {
    printf("UDPSocket:send filed!/n") ;
    printf("Mesg:%s/n",sys_errlist[errno]) ;
   }
   printf("UDPSocket:Send picture!/n") ;
  }
  fclose(file) ;
 }
exit:
 close(hsockfd) ;
 printf("udpsocket thread exited!/n") ;
}

int main()
{
 udpsocket_Run() ;
 while(1) ;
 return 1 ;
}

 

抱歉!评论已关闭.