• 大小: 1.85MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-11-05
  • 语言: 其他
  • 标签: TCP  socket  

资源简介

本文件传输系统采用TCP协议进行通信,实现了windows与linux通信,打破了只能在windows下传输文件的弊端,本程序的编写对通信编程新手有很大的帮助作用,本系统目前只支持windows向linux发送多种类型文件,大文件传输可能存在丢帧现象,建议传输20M异类文件

资源截图

代码片段和文件信息

// Module Name: tcp_rev_server.c
// Compile:
//    gcc -o tcp_rev_server tcp_rev_server.c
// Command Line Options:
//     tcp_rev_server.exe
//    NOTE: There are no command parameters. 

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include

#define UCHAR unsigned char

struct BuffHeader
{
char  FileName[50];//文件名
int   FileSize;//文件总大小8
UCHAR FileTransmitPieceWiseFlag;//文件传送分片标志,0-未分片 大于0-分片
UCHAR FileNumbers;//当前发送数据编号
UCHAR FileTransmitOverFlag;//发送文件结束标志,1-结束,0-未结束
}FileHead*pFileHead;

void main(int argc char ** argv)
{
   FILE      *FileSave;//为接受文件打开一个文件
   int      ListeningSocket;//监听接点
   int      NewConnection;//新的连接接点
   struct   sockaddr_in    ServerAddr;
   struct   sockaddr_in    ClientAddr;
   int      ClientAddrLen;
   char     DataBuffer[65535];
   int      Port;
   int      Ret;
   int      FileHeadSize = sizeof(FileHead);
   int      FileRecvSize;
   int      FileTotalSize;
   if(argc < 2)
   {
      printf(“运行方式: 应用程序 端口号\n“);
      return ;
   }
  
   Port = atoi(argv[1]);
   memset(DataBuffer 0 sizeof(DataBuffer));
   if((ListeningSocket = socket(AF_INET SOCK_STREAM IPPROTO_TCP)) == -1)//创建监听套结字
   {
      printf(“socket failed with error \n“);
      return;
   } 

   ServerAddr.sin_family = AF_INET;
   ServerAddr.sin_port = htons(Port);    
   ServerAddr.sin_addr.s_addr = htonl(INADDR_ANY);

   if(bind(ListeningSocket (struct   sockaddr_in *)&ServerAddr sizeof(ServerAddr)) == -1)//邦定端口
   {
      printf(“bind failed with error \n“);
      close(ListeningSocket);
      return;
   }

   if(listen(ListeningSocket 10) == -1)//在端口上进行监听
   {
      printf(“listen failed with error \n“);
      close(ListeningSocket);
      return;
   } 

   printf(“We are awaiting a connection on port %d......\n“ Port);
   while(1)
   {
     if(( NewConnection = accept(ListeningSocket (struct   sockaddr_in*) &ClientAddr &ClientAddrLen)) == -1)//等待一个连接
     {
        printf(“accept failed with error \n“);
        close(ListeningSocket);
        continue;
     }
     printf(“We successfully got a connection from %s:%d.\n“inet_ntoa(ClientAddr.sin_addr) ntohs(ClientAddr.sin_port));
   
     printf(“We are waiting to receive data...\n“);
     if(!fork())//创建一个子进程接受和发送信息
     {  
FileRecvSize = 0;
        while(1)
        {
           memset(DataBuffer 0 sizeof(DataBuffer));
           Ret = recv(NewConnection DataBuffer sizeof(DataBuffer) 0);
   
   if(Ret == FileHeadSize)
           {
             memcpy(&FileHead DataBuffer FileHeadSize);
             if((FileHead.FileTransmitPieceWiseFlag == 1) && (FileHead.FileNumbers == 0) && (FileHead.FileTransmitOverFlag == 0))
             {
  FileTotalSize = FileHead.FileSize;
                printf(“File Name :%s File Length :%d\n“

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件         48  2010-08-13 18:03  FileTransmitSystem\readMe.txt

     文件       5914  2010-08-01 16:04  FileTransmitSystem\FileTransfers_windows\FileTransfers.rc

     文件       9174  2010-08-13 17:34  FileTransmitSystem\FileTransfers_windows\FileTransfersDlg.cpp

     文件      21356  2010-08-13 17:40  FileTransmitSystem\FileTransfers_windows\FileTransfers.aps

     文件       1509  2010-08-13 17:40  FileTransmitSystem\FileTransfers_windows\FileTransfers.clw

     文件       3705  2010-07-25 16:09  FileTransmitSystem\FileTransfers_windows\ReadMe.txt

     文件       1401  2010-07-25 16:09  FileTransmitSystem\FileTransfers_windows\FileTransfers.h

     文件       2255  2010-07-25 16:09  FileTransmitSystem\FileTransfers_windows\FileTransfers.cpp

     文件       1102  2010-07-25 16:09  FileTransmitSystem\FileTransfers_windows\StdAfx.h

     文件        215  2010-07-25 16:09  FileTransmitSystem\FileTransfers_windows\StdAfx.cpp

     文件       4285  2010-07-25 16:09  FileTransmitSystem\FileTransfers_windows\FileTransfers.dsp

     文件        532  2010-07-25 16:09  FileTransmitSystem\FileTransfers_windows\FileTransfers.dsw

     文件      74752  2010-08-13 17:40  FileTransmitSystem\FileTransfers_windows\FileTransfers.ncb

     文件        260  2010-08-13 17:33  FileTransmitSystem\FileTransfers_windows\FileTransfers.plg

     文件        179  2010-07-26 10:16  FileTransmitSystem\FileTransfers_windows\resource.hm

     文件       1785  2010-07-26 14:29  FileTransmitSystem\FileTransfers_windows\CFileDialog的用法.txt

     文件        966  2010-07-26 14:37  FileTransmitSystem\FileTransfers_windows\Resource.h

     文件       1516  2010-07-27 10:50  FileTransmitSystem\FileTransfers_windows\FileTransfersDlg.h

     文件      48640  2010-08-13 17:40  FileTransmitSystem\FileTransfers_windows\FileTransfers.opt

     文件        405  2010-07-25 16:09  FileTransmitSystem\FileTransfers_windows\res\FileTransfers.rc2

     文件       1078  2010-07-25 16:09  FileTransmitSystem\FileTransfers_windows\res\FileTransfers.ico

    ..A.SH.      3584  2010-08-07 15:41  FileTransmitSystem\FileTransfers_windows\res\Thumbs.db

     文件       2948  2010-08-13 11:21  FileTransmitSystem\FileTransfers_windows\Debug\FileTransfers.res

     文件     205824  2010-08-13 17:33  FileTransmitSystem\FileTransfers_windows\Debug\vc60.idb

     文件    5699020  2010-08-13 11:21  FileTransmitSystem\FileTransfers_windows\Debug\FileTransfers.pch

     文件     364544  2010-08-13 17:33  FileTransmitSystem\FileTransfers_windows\Debug\vc60.pdb

     文件     106806  2010-08-13 11:21  FileTransmitSystem\FileTransfers_windows\Debug\StdAfx.obj

     文件      14640  2010-08-13 11:21  FileTransmitSystem\FileTransfers_windows\Debug\FileTransfers.obj

     文件     288292  2010-08-13 17:33  FileTransmitSystem\FileTransfers_windows\Debug\FileTransfers.ilk

     文件     114757  2010-08-13 17:33  FileTransmitSystem\FileTransfers_windows\Debug\FileTransfers.exe

............此处省略12个文件信息

评论

共有 条评论