⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 treadfunction.cpp

📁 Visual Studio.net 2003 基于Socket套接口
💻 CPP
📖 第 1 页 / 共 2 页
字号:
							printf("Socket %d Sended Data length ERROR!\r\n",pPerHandleData->Socket); 
							break;
						}
					}
					break;
				}
			case ControlIoRecv:
				{
					pPerIOData->cBuffer.buf[dwBytesTransferred]=0;
					printf("DEBUG :Command from Socket %d:%s \r\n",pPerHandleData->Socket,pPerIOData->cBuffer.buf);
					
					_strlwr(pPerIOData->cBuffer.buf);
					
					if(pPerIOData->cBuffer.buf[0]<='p')
					{
						if(pPerIOData->cBuffer.buf[0]<='l')
						{
							if(strstr(pPerIOData->cBuffer.buf,"abor")==pPerIOData->cBuffer.buf)
							{
								ProcessAborCommand(dwBytesTransferred,pPerHandleData,pPerIOData);
								break;
							}
							if(strstr(pPerIOData->cBuffer.buf,"appe")==pPerIOData->cBuffer.buf)
							{
								ProcessAppeCommand(dwBytesTransferred,pPerHandleData,pPerIOData);
								break;

							}
							if(strstr(pPerIOData->cBuffer.buf,"cwd")==pPerIOData->cBuffer.buf)
							{
								ProcessCwdCommand(dwBytesTransferred,pPerHandleData,pPerIOData);
								break;
							}

							if(strstr(pPerIOData->cBuffer.buf,"dele")==pPerIOData->cBuffer.buf)
							{
								ProcessDeleCommand(dwBytesTransferred,pPerHandleData,pPerIOData);
								break;
							}
							if(strstr(pPerIOData->cBuffer.buf,"list")==pPerIOData->cBuffer.buf)
							{
								ProcessListCommand(dwBytesTransferred,pPerHandleData,pPerIOData);
								break;
							}
						}
						else
						{
							if(strstr(pPerIOData->cBuffer.buf,"mkd")==pPerIOData->cBuffer.buf)
							{
								ProcessMkdCommand(dwBytesTransferred,pPerHandleData,pPerIOData);
								break;
							}
							if(strstr(pPerIOData->cBuffer.buf,"pass")==pPerIOData->cBuffer.buf)//处理Pass命令
							{
								ProcessPassCommand(dwBytesTransferred,pPerHandleData,pPerIOData);
								break;
							}
							if(strstr(pPerIOData->cBuffer.buf,"pasv")==pPerIOData->cBuffer.buf)
							{
								ProcessPasvCommand(dwBytesTransferred,pPerHandleData,pPerIOData);
								break;
							}

							if(strstr(pPerIOData->cBuffer.buf,"port")==pPerIOData->cBuffer.buf)
							{
								ProcessPortCommand(dwBytesTransferred,pPerHandleData,pPerIOData);
								break;
							}
							if(strstr(pPerIOData->cBuffer.buf,"pwd")==pPerIOData->cBuffer.buf)//处理pwd
							{
								ProcessPwdCommand(dwBytesTransferred,pPerHandleData,pPerIOData);
								break;
							}
						}
					}
					else//if(pPerIOData->cBuffer.buf[0]<='p')
					{
						if(pPerIOData->cBuffer.buf[0]<='r')
						{
							if(strstr(pPerIOData->cBuffer.buf,"quit")==pPerIOData->cBuffer.buf)
							{
								ProcessQuitCommand(dwBytesTransferred,pPerHandleData,pPerIOData);
								break;
							}
							if(strstr(pPerIOData->cBuffer.buf,"rmd")==pPerIOData->cBuffer.buf)
							{
								ProcessRmdCommand(dwBytesTransferred,pPerHandleData,pPerIOData);
								break;
							}
							if(strstr(pPerIOData->cBuffer.buf,"rest")==pPerIOData->cBuffer.buf)
							{
								ProcessRestCommand(dwBytesTransferred,pPerHandleData,pPerIOData);
								break;
							}
							if(strstr(pPerIOData->cBuffer.buf,"retr")==pPerIOData->cBuffer.buf)
							{
								ProcessRetrCommand(dwBytesTransferred,pPerHandleData,pPerIOData);
								break;
							}
						}
						else
						{
							if(strstr(pPerIOData->cBuffer.buf,"site exec ")==pPerIOData->cBuffer.buf)
							{
								ProcessSiteExecCommand(dwBytesTransferred,pPerHandleData,pPerIOData);
								break;
							}
							if(strstr(pPerIOData->cBuffer.buf,"size")==pPerIOData->cBuffer.buf)
							{
								ProcessSizeCommand(dwBytesTransferred,pPerHandleData,pPerIOData);
								break;
							}
							if(strstr(pPerIOData->cBuffer.buf,"stor")==pPerIOData->cBuffer.buf)
							{
								ProcessStorCommand(dwBytesTransferred,pPerHandleData,pPerIOData);
								break;

							}
							if(strstr(pPerIOData->cBuffer.buf,"type")==pPerIOData->cBuffer.buf)
							{
								ProcessTypeCommand(dwBytesTransferred,pPerHandleData,pPerIOData);
								break;
							}
							if(strstr(pPerIOData->cBuffer.buf,"user")==pPerIOData->cBuffer.buf)//处理USER命令
							{
								ProcessUserCommand(dwBytesTransferred,pPerHandleData,pPerIOData);
								break;
							}

						}
					}	
					//默认处理 ---无法识别的语句
					char Command[128];
					strcpy(Command,pPerIOData->cBuffer.buf);
					FormatString(Command); 
					ControlNormalSendData(pPerHandleData,pPerIOData,ToReceive,"500 \"%s\" : Syntax error, command unrecognized.\r\n",Command);
					break;
				}
			case IoQuit:
				{
					return 0;
				}
			default :
				{
					printf("error Io Type \r\n");
					break;
				}
			}
		}
		else
		{
			if(pPerHandleData->enCurrentHandleType==HandleData)//数据连接
			{
				switch(pPerIOData->IoType)
				{
				case DataIoTransPacket:
					{
						if(pPerIOData->uIoInfo.cDataIoTransPacketInfo.hTmpFile!=INVALID_HANDLE_VALUE)	
						{
							CloseHandle(pPerIOData->uIoInfo.cDataIoTransPacketInfo.hTmpFile);
						}
						LPPER_SOCKET_DATA pControlSocketData=(LPPER_SOCKET_DATA)(pPerHandleData->uHandleInfo.cDataInfo.pControlLinkSocketData);
						ControlSocketPureSendData(pControlSocketData,"226 Transfer complete .\r\n");
						closesocket(pPerHandleData->Socket);
						break;
					}
				case DataIoUpload:
					{
						if(pPerHandleData->uHandleInfo.cDataInfo.bAbor==true)
						{
							break;
						}
						if(dwBytesTransferred==0)
						{
							if(pPerIOData->uIoInfo.cDataIoUploadInfo.hFileHandle!=INVALID_HANDLE_VALUE)	
							{
								CloseHandle(pPerIOData->uIoInfo.cDataIoUploadInfo.hFileHandle);
							}
							LPPER_SOCKET_DATA pControlSocketData=(LPPER_SOCKET_DATA)(pPerHandleData->uHandleInfo.cDataInfo.pControlLinkSocketData);
							ControlSocketPureSendData(pControlSocketData,"226 Transfer Complete.\r\n");
							closesocket(pPerHandleData->Socket);

							break;
						}
						else
						{
							DWORD dwByteWritten=0;
							HANDLE hFile=pPerIOData->uIoInfo.cDataIoUploadInfo.hFileHandle;
							DWORD dwByteTotolWritten=pPerIOData->uIoInfo.cDataIoUploadInfo.uReceivedFileSize;
							if(WriteFile(hFile,pPerIOData->cBuffer.buf,dwBytesTransferred,&dwByteWritten,NULL)==0)
							{
								printf("Write File Error %d\r\n",GetLastError());
							}
							memset(pPerIOData,0,sizeof(PER_IO_OPERATION_DATA));
							pPerIOData->cBuffer.buf=pPerIOData->stBuffer;
							pPerIOData->cBuffer.len=BUFFERSIZE;
							pPerIOData->IoType=DataIoUpload;
							pPerIOData->uIoInfo.cDataIoUploadInfo.hFileHandle=hFile;
							pPerIOData->uIoInfo.cDataIoUploadInfo.uReceivedFileSize=dwByteTotolWritten+dwBytesTransferred;
							DWORD dwNumberOfDataRecv=0,Flags=0;;
							if(WSARecv(pPerHandleData->Socket,&(pPerIOData->cBuffer),1,&(dwNumberOfDataRecv),&Flags,&(pPerIOData->Overlapped),NULL) ==SOCKET_ERROR ) 
							{ 
								if (WSAGetLastError() != ERROR_IO_PENDING) 
								{ 
									printf("WSASend() fialed with error %d\n",WSAGetLastError()); 
									break; 
								} 
							} 
						}
						break;
					}
				default:
					{
						printf("error Io Type \r\n");
						break;
					}
				}
			}
			else
			{
				printf("enCurrentHandleType Error!\r\n");
			}

		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -