void reconnect() { stopSystem(); myClose(); createSocket(); myConnect(); pthread_mutex_lock( &mutex_error ); error = 0; pthread_cond_signal( &cvar_error ); pthread_mutex_unlock( &mutex_error ); }
int main( int argc, char *argv[] ) { int currentIdx = 0; createSocket(); myConnect(); openUART(); setCenter(); if( wiringPiSetup() < 0 ) { fprintf( stderr, "Unable to setup wiringPi\n" ); return 1; } fprintf( stderr, "Setup wiringPi\n" ); // create a thread for sensing, capturing pthread_create( &tid1, NULL, threadFunc1, 0 ); // for recv pthread_create( &tid2, NULL, threadFunc2, (void *)&sockfd ); for( ;; ) { waiting = 1; biSem_wait( &sem_validIdx[currentIdx] ); waiting = 0; checkStop(); while( sendFile( imageFile[currentIdx] ) == -1 ) { reconnect(); } currentIdx = 1 - currentIdx; waiting_result = 1; waiting = 1; biSem_wait( &sem_result ); waiting_result = 0; waiting = 0; checkStop(); fprintf( stderr, "Result from the server is %d\n", result ); // motor classify( result ); } myClose( sockfd ); fprintf( stderr, "Connection lost\n" ); return 0; }
int dealTradeUnit(char *recvBuffer, size_t bufferSize, size_t recvSize, THREAD_PARAM *param) { unsigned short usUnitSerial; unsigned long ulLinkNo; char szIPSource[255] = {'\0'}; //域名解析时用到的一个临时变量 char szIP[255] = {'\0'}; //中途的HTTP代理使用 unsigned short usPort = 0; int nErrorCode = 1; int nRes; char sendBuffer[MAX_FRAME] = {'\0'}; if( ( nRes = MHttp::GetTradeUnit(recvBuffer, recvSize, usUnitSerial, ulLinkNo, szIPSource, usPort, nErrorCode) ) < 0) { printf("Srv:GetTradeUnit Error[%d]\n", nRes); return -1; } //存储GCLNKNO与序号(GCLNKNO与序号在我们向客户端回复数据时,组包时要用到这两个字段) param->ulLinkNo = ulLinkNo; param->usUnitSerial = usUnitSerial; //域名转换 DNSToIP(szIPSource, sizeof(szIPSource), szIP, sizeof(szIP)-1); //这儿是阻塞的 if((nRes = myConnect(param->srvSocket, szIP, usPort)) < 0) { printf("SRV:Unit::connect[%s:%d]Error[%d]\n", szIP, usPort, nRes); return -2; } //设置为委拖,并设置委托状态为初始化状态 assert(param->isConnected == 0); param->isTrade = true; param->tradeState = TS_AUTH; //param->isConnected = 1; if( (nRes = MHttp::BuildTradeUnit(sendBuffer, MAX_FRAME, usUnitSerial, ulLinkNo, szIP, usPort, nErrorCode)) < 0 ) { printf("Srv:BuildTradeUnit Error[%d]\n", nRes); return -3; } if((nErrorCode = mySend(param->cliSocket, sendBuffer, nRes)) != nRes) { printf("SRV:TP_CHANNEL::SendError[%d]\n", nErrorCode); return -3; } return 0; }
int main(int argc, char **argv) { int size; int sock; char buf[80000]; if (argc != 3) { printf("Argument error\n"); return -1; } sock = myConnect(argv[1], atoi(argv[2])); if(sock < 0) { return 0; } size = recv(sock, buf, sizeof(buf), 0); if(size > 0) { buf[size] = 0; //essential printf("Recv %d bytes: %s\n", size, buf); } else { perror("Recv failed"); close(sock); //essential return 0; } memset(buf, 'a', sizeof(buf)); buf[7999] = '\0'; size = send(sock, buf, sizeof(buf), 0); printf("send size=%d\n", size); close(sock); return 0; }
int main() { // used in control flow int opCode; bool isConnected = false, needQuit = false; // used in network int iResult; WSADATA wsaData; struct addrinfo *result = NULL, hints; SOCKET ConnectSocket = (SOCKET)NULL; char serverName[20], port[10]; // used in multithread DWORD receiveThreadId; HANDLE receiveThread = NULL; // Initialize Winsock iResult = WSAStartup(MAKEWORD(2, 2), &wsaData); if (iResult != 0) { printf("> WSAStartup failed with error: %d\n", iResult); } ZeroMemory(&hints, sizeof(hints)); hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_STREAM; hints.ai_protocol = IPPROTO_TCP; while (!needQuit) { // show menu printf("> Please input option code:\n"); printf(" 1.connect 2.quit"); if (isConnected) { printf(" 3.break 4.get time 5.get name 6.get client 7.send message"); } printf("\n"); scanf_s("%d", &opCode); switch (opCode) { case 1: { printf("> Please input server IP:\n"); getchar(); gets_s(serverName, 20); printf("> Please input port number:\n"); gets_s(port, 10); // Resolve the server address and port iResult = getaddrinfo(serverName, port, &hints, &result); if (iResult != 0) { printf("> Getaddrinfo failed with error: %d\n", iResult); } ConnectSocket = myConnect(result); if (isConnected) { printf("> It's already connected!\n"); } else if (ConnectSocket == INVALID_SOCKET) { printf("> Unable to connect to server!\n"); } else { isConnected = true; receiveThread = CreateThread(NULL, 0, receiveFunction, (LPVOID)ConnectSocket, 0, &receiveThreadId); printf("> Connect success!\n"); } break; } case 2: { needQuit = true; if (isConnected) { closesocket(ConnectSocket); isConnected = false; } printf("> Quit success!\n"); break; } case 3: { closesocket(ConnectSocket); isConnected = false; printf("> Break success!\n"); break; } case 4: { for (int i = 0; i < 1000; ++i) { mySendMessage(ConnectSocket, 4); } break; } case 5: { mySendMessage(ConnectSocket, 5); break; } case 6: { mySendMessage(ConnectSocket, 6); break; } case 7: { mySendMessage(ConnectSocket, 7); break; } default: { // } } Sleep(1000); // wait for receiveThread print printf("\n"); } // cleanup iResult = shutdown(ConnectSocket, SD_SEND); if (iResult == SOCKET_ERROR) { printf("> shutdown failed with error: %d\n", WSAGetLastError()); } freeaddrinfo(result); if (receiveThread != NULL) { CloseHandle(receiveThread); } WSACleanup(); return 0; }