您的位置:首页 > 理论基础 > 计算机网络

Linux下文件的网络传输

2010-04-23 20:56 501 查看
今天的事太多,没有认真的完成任务,不过把服务器端的文件传输做好了!

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

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

头文件: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 ;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: