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++; }
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); } }