#include\x3ciostream\x3e\n#include\x3cfstream\x3e\n#include\x3cstring\x3e\n#include\x3cWinSock2.h\x3e\n#include\x3cWS2tcpip.h\x3e\n#pragma\x20comment(lib,\x20"ws2_32.lib")\n\n#define\x20BUFFER_SIZE\x202048\n\nusing\x20namespace\x20std;\n\nint\x20sendCommand(SOCKET\x20clientSocket,\x20const\x20string&\x20command)\x20{\n\x20\x20if\x20(send(clientSocket,\x20command.c_str(),\x20command.length(),\x200)\x20==\x20SOCKET_ERROR)\x20{\n\x20\x20\x20\x20cerr\x20<<\x20"Failed\x20to\x20send\x20command"\x20<<\x20endl;\n\x20\x20\x20\x20return\x201;\n\x20\x20}\n\x20\x20return\x200;\n}\n\nint\x20sendFile(SOCKET\x20clientSocket,\x20const\x20string&\x20fileName)\x20{\n\x20\x20//\x20Open\x20file\n\x20\x20ifstream\x20file(fileName,\x20ios::binary);\n\x20\x20if\x20(!file)\x20{\n\x20\x20\x20\x20cerr\x20<<\x20"Failed\x20to\x20open\x20file"\x20<<\x20endl;\n\x20\x20\x20\x20return\x201;\n\x20\x20}\n\n\x20\x20//\x20Send\x20file\x20name\n\x20\x20if\x20(send(clientSocket,\x20fileName.c_str(),\x20fileName.length(),\x200)\x20==\x20SOCKET_ERROR)\x20{\n\x20\x20\x20\x20cerr\x20<<\x20"Failed\x20to\x20send\x20file\x20name"\x20<<\x20endl;\n\x20\x20\x20\x20file.close();\n\x20\x20\x20\x20return\x201;\n\x20\x20}\n\n\x20\x20//\x20Read\x20and\x20send\x20file\x20data\n\x20\x20char\x20buffer[BUFFER_SIZE];\n\x20\x20while\x20(!file.eof())\x20{\n\x20\x20\x20\x20file.read(buffer,\x20BUFFER_SIZE);\n\x20\x20\x20\x20int\x20bytesRead\x20=\x20file.gcount();\n\x20\x20\x20\x20if\x20(send(clientSocket,\x20buffer,\x20bytesRead,\x200)\x20==\x20SOCKET_ERROR)\x20{\n\x20\x20\x20\x20\x20\x20cerr\x20<<\x20"Failed\x20to\x20send\x20file\x20data"\x20<<\x20endl;\n\x20\x20\x20\x20\x20\x20file.close();\n\x20\x20\x20\x20\x20\x20return\x201;\n\x20\x20\x20\x20}\n\x20\x20}\n\n\x20\x20//\x20Close\x20file\n\x20\x20file.close();\n\n\x20\x20cout\x20<<\x20"File\x20uploaded\x20successfully"\x20<<\x20endl;\n\n\x20\x20return\x200;\n}\n\nint\x20downloadFile(SOCKET\x20clientSocket,\x20const\x20string&\x20fileName)\x20{\n\x20\x20//\x20Send\x20file\x20name\n\x20\x20if\x20(send(clientSocket,\x20fileName.c_str(),\x20fileName.length(),\x200)\x20==\x20SOCKET_ERROR)\x20{\n\x20\x20\x20\x20cerr\x20<<\x20"Failed\x20to\x20send\x20file\x20name"\x20<<\x20endl;\n\x20\x20\x20\x20return\x201;\n\x20\x20}\n\n\x20\x20//\x20Receive\x20file\x20data\n\x20\x20ofstream\x20file(fileName,\x20ios::binary);\n\x20\x20if\x20(!file)\x20{\n\x20\x20\x20\x20cerr\x20<<\x20"Failed\x20to\x20create\x20file"\x20<<\x20endl;\n\x20\x20\x20\x20return\x201;\n\x20\x20}\n\n\x20\x20char\x20buffer[BUFFER_SIZE];\n\x20\x20int\x20bytesRead;\n\x20\x20while\x20((bytesRead\x20=\x20recv(clientSocket,\x20buffer,\x20BUFFER_SIZE,\x200))\x20>\x200)\x20{\n\x20\x20\x20\x20file.write(buffer,\x20bytesRead);\n\x20\x20}\n\n\x20\x20//\x20Close\x20file\n\x20\x20file.close();\n\n\x20\x20if\x20(bytesRead\x20==\x20SOCKET_ERROR)\x20{\n\x20\x20\x20\x20cerr\x20<<\x20"Failed\x20to\x20receive\x20file\x20data"\x20<<\x20endl;\n\x20\x20\x20\x20return\x201;\n\x20\x20}\n\n\x20\x20cout\x20<<\x20"File\x20downloaded\x20successfully"\x20<<\x20endl;\n\n\x20\x20return\x200;\n}\n\nint\x20listFiles(SOCKET\x20clientSocket)\x20{\n\x20\x20char\x20buffer[BUFFER_SIZE];\n\x20\x20int\x20bytesRead;\n\x20\x20while\x20((bytesRead\x20=\x20recv(clientSocket,\x20buffer,\x20BUFFER_SIZE,\x200))\x20>\x200)\x20{\n\x20\x20\x20\x20cout.write(buffer,\x20bytesRead);\n\x20\x20}\n\n\x20\x20if\x20(bytesRead\x20==\x20SOCKET_ERROR)\x20{\n\x20\x20\x20\x20cerr\x20<<\x20"Failed\x20to\x20receive\x20file\x20list"\x20<<\x20endl;\n\x20\x20\x20\x20return\x201;\n\x20\x20}\n\n\x20\x20return\x200;\n}\n\nint\x20main()\x20{\n\x20\x20//\x20Initialize\x20Winsock\n\x20\x20WSADATA\x20wsaData;\n\x20\x20if\x20(WSAStartup(MAKEWORD(2,\x202),\x20&wsaData)\x20!=\x200)\x20{\n\x20\x20\x20\x20cerr\x20<<\x20"Failed\x20to\x20initialize\x20winsock"\x20<<\x20endl;\n\x20\x20\x20\x20return\x201;\n\x20\x20}\n\n\x20\x20//\x20Create\x20socket\n\x20\x20SOCKET\x20clientSocket\x20=\x20socket(AF_INET,\x20SOCK_STREAM,\x200);\n\x20\x20if\x20(clientSocket\x20==\x20INVALID_SOCKET)\x20{\n\x20\x20\x20\x20cerr\x20<<\x20"Failed\x20to\x20create\x20socket"\x20<<\x20endl;\n\x20\x20\x20\x20WSACleanup();\n\x20\x20\x20\x20return\x201;\n\x20\x20}\n\n\x20\x20//\x20Server\x20address\n\x20\x20sockaddr_in\x20serverAddress;\n\x20\x20serverAddress.sin_family\x20=\x20AF_INET;\n\x20\x20serverAddress.sin_port\x20=\x20htons(8888);\n\x20\x20InetPton(AF_INET,\x20TEXT("127.0.0.1"),\x20&serverAddress.sin_addr.s_addr);\n\n\x20\x20//\x20Connect\x20to\x20server\n\x20\x20if\x20(connect(clientSocket,\x20(sockaddr*)&serverAddress,\x20sizeof(serverAddress))\x20==\x20SOCKET_ERROR)\x20{\n\x20\x20\x20\x20cerr\x20<<\x20"Failed\x20to\x20connect\x20to\x20server"\x20<<\x20endl;\n\x20\x20\x20\x20closesocket(clientSocket);\n\x20\x20\x20\x20WSACleanup();\n\x20\x20\x20\x20return\x201;\n\x20\x20}\n\n\x20\x20//\x20Send\x20command\n\x20\x20cout\x20<<\x20"Enter\x20command\x20(1\x20for\x20upload,\x202\x20for\x20download,\x203\x20for\x20file\x20list):\x20";\n\x20\x20string\x20command;\n\x20\x20cin\x20>>\x20command;\n\x20\x20if\x20(sendCommand(clientSocket,\x20command)\x20!=\x200)\x20{\n\x20\x20\x20\x20closesocket(clientSocket);\n\x20\x20\x20\x20WSACleanup();\n\x20\x20\x20\x20return\x201;\n\x20\x20}\n\n\x20\x20//\x20Upload\x20file\n\x20\x20if\x20(command\x20==\x20"1")\x20{\n\x20\x20\x20\x20//\x20Enter\x20file\x20name\n\x20\x20\x20\x20cout\x20<<\x20"Enter\x20file\x20name\x20to\x20upload:\x20";\n\x20\x20\x20\x20string\x20fileName;\n\x20\x20\x20\x20cin\x20>>\x20fileName;\n\n\x20\x20\x20\x20if\x20(sendFile(clientSocket,\x20fileName)\x20!=\x200)\x20{\n\x20\x20\x20\x20\x20\x20closesocket(clientSocket);\n\x20\x20\x20\x20\x20\x20WSACleanup();\n\x20\x20\x20\x20\x20\x20return\x201;\n\x20\x20\x20\x20}\n\x20\x20}\n\x20\x20//\x20Download\x20file\n\x20\x20else\x20if\x20(command\x20==\x20"2")\x20{\n\x20\x20\x20\x20//\x20Enter\x20file\x20name\n\x20\x20\x20\x20cout\x20<<\x20"Enter\x20file\x20name\x20to\x20download:\x20";\n\x20\x20\x20\x20string\x20fileName;\n\x20\x20\x20\x20cin\x20>>\x20fileName;\n\n\x20\x20\x20\x20if\x20(downloadFile(clientSocket,\x20fileName)\x20!=\x200)\x20{\n\x20\x20\x20\x20\x20\x20closesocket(clientSocket);\n\x20\x20\x20\x20\x20\x20WSACleanup();\n\x20\x20\x20\x20\x20\x20return\x201;\n\x20\x20\x20\x20}\n\x20\x20}\n\x20\x20//\x20List\x20files\n\x20\x20else\x20if\x20(command\x20==\x20"3")\x20{\n\x20\x20\x20\x20if\x20(listFiles(clientSocket)\x20!=\x200)\x20{\n\x20\x20\x20\x20\x20\x20closesocket(clientSocket);\n\x20\x20\x20\x20\x20\x20WSACleanup();\n\x20\x20\x20\x20\x20\x20return\x201;\n\x20\x20\x20\x20}\n\x20\x20}\n\n\x20\x20//\x20Close\x20socket\n\x20\x20closesocket(clientSocket);\n\n\x20\x20//\x20Cleanup\x20Winsock\n\x20\x20WSACleanup();\n\n\x20\x20return\x200;\n


原文地址: https://www.cveoy.top/t/topic/pF1I 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录