資源簡介
本文件傳輸系統采用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個文件信息
評論
共有 條評論