日期:2014-05-16 浏览次数:20853 次
/*此程序用来向客户端发送文件
* Server.cpp
*
* Created on: 2013-3-5
* Author: root
*/
#include <iostream>
#include <netinet/in.h> // sockaddr_in头文件
#include <sys/types.h> // socket头文件
#include <sys/socket.h> // socket头文件
#include <stdio.h> //
#include <fstream>
#include <stddef.h>
#include <arpa/inet.h> // inet_ntoa头文件
#include <string.h> // bzero头文件
#include <dirent.h> //
using namespace std;
#define DIRPATH "/home/zhangkai/CAC-2013-01-20/"
struct Message
{
string FileName;
int Legnth;
char info[1024];
};
int main()
{
struct sockaddr_in Server_Addr,Client_Addr;
int Socket_Server,Socket_Client;
Message Buffer;
int SendLength; //本次传输的字节数
struct dirent *ptr;
DIR *dir;
dir=opendir(DIRPATH);
//创建套接字
Socket_Server=socket(AF_INET, SOCK_STREAM, 0);
if(Socket_Server==-1)
{
perror("套接字创建失败!");
return -1;
}
cout<<"套接字创建成功!"<<endl;
//绑定端口地址
Server_Addr.sin_addr.s_addr=INADDR_ANY;
Server_Addr.sin_family=AF_INET;
Server_Addr.sin_port=htons(7777);
bzero(&(Server_Addr.sin_zero), 8);
if(bind(Socket_Server,(const sockaddr*)&Server_Addr,sizeof(Server_Addr))==-1)
{
perror("绑定失败!");
return -1;
}
cout<<"绑定成功!"<<endl;
//监听端口
if(listen(Socket_Server,10)==-1)
{
perror("监听端口时发生错误!");
return -1;
}
cout<<"正在监听端口:7777"<<endl;
cout<<"正在等待远程客户端的链接请求……"<<endl;
while(1)
{
socklen_t SocketClient_Size = sizeof(struct sockaddr_in);
Socket_Client=accept(Socket_Server,(struct sockaddr*) &Client_Addr,&SocketClient_Size);
if(Socket_Client==-1)
{
perror("响应端口时发生错误!");
return -1;
}
cout<<"收到来自"<<(char*)inet_ntoa(Client_Addr.sin_addr)<<"的链接"<<endl;
while(1)
{
fstream FileToBuffer;
ptr=readdir(dir);
if(ptr==NULL)
break;
if(ptr->d_name[0] == '.')
continue;
string FileName=ptr->d_name;
Buffer.FileName=DIRPATH+FileName;
FileToBuffer.open(Buffer.FileName.c_str(),ios::in);
if(!FileToBuffer)
{
cout<<"文件"<<Buffer.FileName<<"打开失败!"<<endl;
return -1;
}
//获得文件长度
FileToBuffer.seekg(0,ios::end);
Buffer.Legnth=FileToBuffer.tellg();
FileToBuffer.seekg(0,ios::beg);
while(!FileToBuffer.eof())
{
if(Buffer.Legnth>1024)
{
FileToBuffer.read((char *)&Buffer.info,1024);
SendLength=send(Socket_Client,(void*)&Buffer,sizeof(Buffer),0);
//Buffer.Legnth-=SendLength;
}