資源簡介
使用C++語言編寫基于TCP協議的C/S傳輸文件。具體使用方法見里面的report。

代碼片段和文件信息
#include?
#include?
#include?
#include?
#include?
#define?PORT?2680
#define?BUFFER_SIZE?1024
#define?MAXLINE?512
#pragma?comment(lib?“WS2_32“)
int?main()
{
????int?recvTimeout?=?1000;
????char?c?=?0;
????int?nNetTimeout?=?1000;
????WSADATA?wsdata;
????WORD?v?=?MAKEWORD(20);
????char?IP[32];
????SOCKET?ConnectSocket?=?INVALID_SOCKET;
????int?len?=?0;
????char?filename[MAXLINE+1];
????//?Initialize?Winsock
????if(?WSAStartup(v?&wsdata)?!=?0)
????{
????????printf(“WSAStartup?failed?with?error:?%d\n“?WSAStartup(v?&wsdata));
????????return?1;
????}
????sockaddr_in?server_addr?client_addr;
????int?size??=?sizeof(client_addr);
????server_addr.sin_family?=?AF_INET;
????printf(“Please?input?the?IP?address:“);
????scanf(“%s“?&IP);
????server_addr.sin_addr.S_un.S_addr?=?inet_addr(IP);
????server_addr.sin_port?=?htons(PORT);//htons?transfer?to?u_short
????//?Create?a?SOCKET?for?connecting?to?server
????ConnectSocket?=?socket(AF_INET?SOCK_STREAM?0);
????if?(ConnectSocket?==?INVALID_SOCKET)
????{
????????printf(“socket?failed?with?error:?%ld\n“?WSAGetLastError());
????????WSACleanup();
????????return?1;
????}
????//connect
????if?(SOCKET_ERROR?==?connect(ConnectSocket?(sockaddr?*)&server_addr?sizeof(server_addr)))
????{
????????printf(“Unable?to?connect?to?server!\n“);
????????WSACleanup();
????????return?1;
????}
????char?str[20]?=?““;
????recv(ConnectSocket?str?sizeof(str)?0);
????printf(“server:%s“?str);
????char?buffer[BUFFER_SIZE];
????while(c?!=?27)
????{
????????memset(filename?0?MAXLINE+1);
????????printf(“\nplease?input?the?file?name?in?the?server:“);
????????scanf(“%s“&filename);
????????memset(buffer?0?BUFFER_SIZE);
????????strncpy(buffer?filenamestrlen(filename)>BUFFER_SIZE???BUFFER_SIZE:strlen(filename));
????????//?Send?an?initial?buffer
????????if(send(ConnectSocket?buffer?BUFFER_SIZE?0)?==?SOCKET_ERROR)
????????{
????????????printf(“send?failed?with?error:?%d\n“?WSAGetLastError());
????????????closesocket(ConnectSocket);
????????????WSACleanup();
????????????return?1;
????????}
????????//open?the?file?to?write
????????FILE?*fp?=?fopen(filename?“wb“);
????????memset(buffer?0?BUFFER_SIZE);
????????setsockopt(ConnectSocket?SOL_SOCKET?SO_RCVTIMEO?(char?*)&recvTimeout?sizeof(int));
????????len?=?recv(ConnectSocket?buffer?BUFFER_SIZE?0);
??//?????int?length?=?fwrite(buffer?sizeof(char)?len?fp);
??//????fflush(fp);
????????if?(len?==?-1)
????????{
????????????printf(“can?not?find?the?file\n“);
????????}
????????else?if(fp?==?NULL)
????????{
????????????printf(“can?not?open?to?write?the?file?%s\n“filename);
????????????return?0;
????????}
????????else
????????{
????????????int?length?=?0;
????????????length?=?recv(ConnectSocket?buffer?BUFFER_SIZE?0);
????????????if?(fwrite(buffer?sizeof(char)?length?fp)?????????????{
????//????????????fflush(fp
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2018-11-10?16:20??assign4-516111910213\
?????目錄???????????0??2018-11-05?23:28??assign4-516111910213\client2\
?????目錄???????????0??2018-11-01?22:13??assign4-516111910213\client2\bin\
?????目錄???????????0??2018-11-01?22:13??assign4-516111910213\client2\bin\Debug\
?????文件???????35471??2018-11-01?21:51??assign4-516111910213\client2\bin\Debug\client2.exe
?????文件????????1145??2018-11-01?22:13??assign4-516111910213\client2\client2.cbp
?????文件?????????317??2018-11-05?21:13??assign4-516111910213\client2\client2.depend
?????文件?????????241??2018-11-05?23:28??assign4-516111910213\client2\client2.layout
?????文件????????4717??2018-11-01?21:51??assign4-516111910213\client2\main.cpp
?????目錄???????????0??2018-11-01?22:13??assign4-516111910213\client2\obj\
?????目錄???????????0??2018-11-01?22:13??assign4-516111910213\client2\obj\Debug\
?????文件????????7131??2018-11-01?21:51??assign4-516111910213\client2\obj\Debug\main.o
?????文件??????439926??2018-11-10?16:20??assign4-516111910213\report.pdf
?????目錄???????????0??2018-11-01?22:16??assign4-516111910213\server2\
?????文件????????9728??2018-11-01?19:59??assign4-516111910213\server2\123.doc
?????文件???????85072??2016-08-08?14:12??assign4-516111910213\server2\CYVW3880.jpg
?????文件??????126208??2018-10-19?21:14??assign4-516111910213\server2\assign4.pdf
?????目錄???????????0??2018-11-01?22:13??assign4-516111910213\server2\bin\
?????目錄???????????0??2018-11-01?22:13??assign4-516111910213\server2\bin\Debug\
?????文件???????34488??2018-11-01?21:45??assign4-516111910213\server2\bin\Debug\server2.exe
?????文件????????3680??2018-11-01?21:45??assign4-516111910213\server2\main.cpp
?????文件?????1308294??2018-06-24?15:38??assign4-516111910213\server2\nba.gif
?????目錄???????????0??2018-11-01?22:13??assign4-516111910213\server2\obj\
?????目錄???????????0??2018-11-01?22:13??assign4-516111910213\server2\obj\Debug\
?????文件????????6397??2018-11-01?21:45??assign4-516111910213\server2\obj\Debug\main.o
?????文件????????1145??2018-11-01?22:13??assign4-516111910213\server2\server2.cbp
?????文件?????????139??2018-11-01?21:46??assign4-516111910213\server2\server2.depend
?????文件?????????239??2018-11-01?22:16??assign4-516111910213\server2\server2.layout
?????文件??????????28??2018-10-30?16:12??assign4-516111910213\server2\test.txt
?????文件???????????5??2018-10-30?19:10??assign4-516111910213\server2\test2.txt
?????文件???????????5??2018-11-01?13:51??assign4-516111910213\server2\test3.txt
............此處省略0個文件信息
評論
共有 條評論