Ejemplo n.º 1
0
void reconnect()
{
    stopSystem();
    myClose();
    createSocket();
    myConnect();
    
    pthread_mutex_lock( &mutex_error );
    error = 0;
    pthread_cond_signal( &cvar_error );
    pthread_mutex_unlock( &mutex_error );
}
Ejemplo n.º 2
0
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;
}
Ejemplo n.º 3
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;
}
Ejemplo n.º 4
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;
}
Ejemplo n.º 5
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;
}