コード例 #1
0
void MyServer::slotReadClient()
{

    QTcpSocket* pClientSocket = (QTcpSocket*)sender();

    QDataStream in(pClientSocket);
    in.setVersion(QDataStream::Qt_5_3);


    for(;;){

        if(!nextBlockSize){
            if(pClientSocket->bytesAvailable() < sizeof(quint32)) {
                break;
            }

            in >> nextBlockSize;
        }

        if(pClientSocket->bytesAvailable() < nextBlockSize) {
            break;
        }


        QString request;
        in >> request;

        QStringList req_param = request.split(" ");

        if(req_param.at(0) == "GETCURRENTVERSION")
            sendCurrVers(pClientSocket);

        if(req_param.at(0) == "GETSUBJECTS")
            sendArrayToClient(pClientSocket,getSubjects());

        if(req_param.at(0) == "GETTHEMES")
            sendArrayToClient(pClientSocket,getThemes(req_param.at(1)));

        if(req_param.at(0) == "GETPICTURES")
            sendArrayToClient(pClientSocket,getPictures(req_param.at(1),req_param.at(2)));

        if(req_param.at(0) == "GETIMAGE")
            sendImageToClient(pClientSocket,getImage(req_param.at(1)));

        if(req_param.at(0) == "PUTSUBJECT"){
            putSubject(req_param.at(1));
            version++;
        }
        if(req_param.at(0) == "PUTTHEME"){
            putTheme(req_param.at(1),req_param.at(2));
            version++;
        }
        if(req_param.at(0) == "PUTIMAGE")
        {
            QImage img;

            in >> img;

            quint32 k = putImage(img,req_param.at(1),req_param.at(2), req_param.at(3));
            version++;
            QList<QString> lst;
            lst << QString("%1").arg(k);
            sendArrayToClient(pClientSocket,lst);
        }
        if(req_param.at(0) == "DELETESUBJECT"){
            deleteSubject(req_param.at(1));
            version++;
        }
        if(req_param.at(0) == "DELETETHEME"){
            deleteTheme(req_param.at(1),req_param.at(2));
            version++;
        }
        if(req_param.at(0) == "DELETEIMAGE"){
            deleteImage(req_param.at(1));
            version++;
        }
        if(req_param.at(0) == "SWAPIMAGE"){
            QImage img;

            in >> img;

            swapImage(img,req_param.at(1));
            version++;
        }
コード例 #2
0
void main()
{
	int iServerSock;
	int iClientSock;

	struct sockaddr_in ServerAddr;
	struct sockaddr_in ClientAddr;


	int sin_size;

	WSADATA WSAData;

	if (WSAStartup(MAKEWORD(1, 1), &WSAData))
	{

		printf("initializationing error!\n");
		WSACleanup();
		exit(0);
	}
	printf("Initialization\n");

	if ((iServerSock = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET)
	{
		printf("Fail to create socket!\n");
		WSACleanup();
		exit(0);
	}
	printf("Create Socket!\n");

	ServerAddr.sin_family = AF_INET;
	//ServerAddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
	ServerAddr.sin_addr.s_addr = inet_addr("172.20.233.1");
	ServerAddr.sin_port = htons((u_short)PORT);
	//ServerAddr.sin_port = 0;

	memset(&(ServerAddr.sin_zero), 0, sizeof(ServerAddr.sin_zero));

	if (bind(iServerSock, (struct sockaddr *)&ServerAddr, sizeof(struct sockaddr)) == -1)
	{
		printf("bind fail!\n");
		WSACleanup();
		exit(0);
	}
	printf("Bind success!\n");

	if (listen(iServerSock, BACKLOG) == -1)
	{
		printf("listen fail!\n");
		WSACleanup();
		exit(0);
	}
	printf("Listen Success!\n");

	for (;;)
	{
		sin_size = sizeof(struct sockaddr_in);
		iClientSock = accept(iServerSock, (struct sockaddr *)&ClientAddr, &sin_size);

		if (iClientSock == -1)
		{
			printf("accept调用失败!\n");
			exit(0);
		}
		printf("Accept Success\n");

		printf("Server is connected to%s\n", inet_ntoa(ClientAddr.sin_addr));


		//接受来自客户端的数据存入recvques
		//char recvques[100];//用户选择的文件号
		//memset(recvques, 0, sizeof(recvques));
		//recv(iClientSock, recvques, 100, 0);
		//printf("Receive %c from Client\n", recvques[0]);
		//

		int getSize;

		char* recvImage = receiveImageFromClient(iClientSock, &getSize);

		size_t length = getSize;

		if (recvImage == NULL)
		{
			printf("从client接收失败!\n");
			WSACleanup();
			exit(0);
		}
		else
		{
			printf("Successfully receive from Client!\n");
		}


		//第一次传输结束
		printf("\n");
		printf("opencv running。。。。\n");
		printf("\n");
		printf("\n");

		int stat;
		char buffer[50] = "Opencv is processing the Image...";
		const char* opencvSignal = buffer;
		//Send our verification signal
		do{
			stat = send(iClientSock, opencvSignal, strlen(opencvSignal) + 1, 0);
		} while (stat<0);


		int imageSendSize;
		printf("start image processing\n");
		printf("\n");
		printf("\n");

		void *sendImageVoid = FundusSegmentServer(recvImage, getSize, &imageSendSize);
		char *sendImage = (char *)sendImageVoid;


		char buffer2[100] = "Image processing is finished, start Transmit image to Client!";
		const char* opencvfinishSignal = buffer2;
		//Send our verification signal
		do{
			stat = send(iClientSock, opencvfinishSignal, strlen(opencvfinishSignal) + 1, 0);
		} while (stat<0);

		//第二次传输开始
		printf("Start send the segmentation Image to Client!\n");


		int sendStatus = sendImageToClient(iClientSock, sendImage, imageSendSize);
		if (sendStatus != 1)
		{
			printf("Send to Client失败!\n");
			WSACleanup();
			exit(0);
		}
		if (sendStatus == 1)
		{
			printf("Send to Client success!\n");
		}

		freeImage(sendImage);


		closesocket(iClientSock);

	}
}