Tag

    科技2022-09-06  106

    a

    a

     

    // // Created by Alex Guo on 2020/10/4. // #include "Socket.h" #include <stdio.h> #include <sys/socket.h> #include <netinet/in.h> #include <unistd.h> #include <string.h> #include <stdlib.h> #include <fcntl.h> #include <sys/time.h> #include <arpa/inet.h> int mySocket::init() { /* Create Socket */ printf("[%s]%d\n", __FUNCTION__, __LINE__); socketFdGVCP = socket(AF_INET, SOCK_DGRAM, 0); if (socketFdGVCP < 0) { perror("socketFdGVCP"); exit(1); } socketFdGVSP = socket(AF_INET, SOCK_DGRAM, 0); if (socketFdGVSP < 0) { perror("socketFdGVSP"); exit(1); } struct sockaddr_in addrGVCP, addrGVSP; memset(&addrGVCP, 0, sizeof(struct sockaddr_in)); addrGVCP.sin_family = AF_INET; addrGVCP.sin_port = htons(PORT_GVCP); addrGVCP.sin_addr.s_addr = htonl(INADDR_ANY); memset(&addrGVSP, 0, sizeof(struct sockaddr_in)); addrGVCP.sin_family = AF_INET; addrGVCP.sin_port = htons(PORT_GVSP); addrGVCP.sin_addr.s_addr = htonl(INADDR_ANY); /* Bind socket */ if (bind(socketFdGVCP, (struct sockaddr *) &addrGVCP, sizeof(addrGVCP)) < 0) { perror("bind error:"); exit(1); } int flag = fcntl(socketFdGVCP, F_GETFL, 0); if (flag < 0) { printf("fcntl F_GETFL fail"); return -1; } if (fcntl(socketFdGVCP, F_SETFL, flag | O_NONBLOCK) < 0) { printf("fcntl F_SETFL fail"); } } int mySocket::destroy() { printf("[%s]%d\n", __FUNCTION__, __LINE__); close(socketFdGVCP); } uint32_t mySocket::GetRegisterValue(uint32_t DeviceIp, uint32_t registerAddr) { printf("[%s]%d\n", __FUNCTION__, __LINE__); return 0x01; } bool mySocket::SetRegisterValue(uint32_t DeviceIp, uint32_t registerAddr, uint32_t targetValue) { printf("[%s]%d\n", __FUNCTION__, __LINE__); return true; } int mySocket::DiscoverDevices() { printf("[%s]%d\n", __FUNCTION__, __LINE__); struct headerGVCP myHeader = {0}; struct sockaddr_in clientAddr = {0}; struct DiscoveryMsg DiscoverMsg = {0}; struct DiscoveryACKMsg DiscoverAck = {0}; size_t sendLength; int len = sizeof(clientAddr); //SendOut Broadcast info DiscoverMsg.ip = 0; struct sockaddr_in addr_broadcast; inet_aton("255.255.255.255", &addr_broadcast.sin_addr); sendto(socketFdGVCP, &DiscoverMsg, sizeof(struct DiscoveryMsg), 0, (struct sockaddr *) &addr_broadcast, len); //set wait timer uint8_t *recvBuf = reinterpret_cast <uint8_t *>( malloc(MAX_RECV_BUG_LEN)); time_t timerStart, timerStop, timeNow; time(&timerStart); time(&timeNow); timerStop = timerStart + 5; //Get all reply Devices while (timeNow < timerStop) { time(&timeNow); printf("[%s]%d timeNow[%d] < timerStop[%d]\n", __FUNCTION__, __LINE__, timeNow, timerStop); int recvLength = recvfrom(socketFdGVCP, recvBuf, sizeof(MAX_RECV_BUG_LEN), 0, (struct sockaddr *) &clientAddr, (socklen_t *) &len); printf("recvLength[%d]\n", recvLength); if (recvLength > 0) { printf("recvLength[%d]\n", recvLength); memcpy(&DiscoverAck, recvBuf, recvLength); uint32_t ccpValue = GetRegisterValue(clientAddr.sin_addr.s_addr, REGISTER_ADDR_CCP); printf("GigEVision Device Reply from[%s] ccpAvaliable[%s]", inet_ntoa(clientAddr.sin_addr), ccpValue == 0x01 ? "YES" : "NO"); } else { continue; } } free(recvBuf); }; int mySocket::ConnectDevice(uint32_t deviceIP, int recordTimelength) { struct sockaddr_in TargertAddr = {0}; TargertAddr.sin_addr.s_addr = deviceIP; uint32_t regValue = GetRegisterValue(deviceIP, REGISTER_ADDR_CCP); if (regValue == REGISTER_CCP_VACANT) { if (SetRegisterValue(deviceIP, REGISTER_ADDR_CCP, REGISTER_CCP_OCCUPIED)) { //Control Privilege Acquired printf("connect Success!@[%s]", inet_ntoa(TargertAddr.sin_addr)); /* Start Streaming */ time_t timerStart, timerStop, timeNow; time(&timerStart); time(&timeNow); timerStop = timerStart + recordTimelength; while (timeNow < timerStop) { time(&timeNow); /* Recv and Save GVSP Packet*/ } /* Stream timeout */ } } return 0; } /* int main2() { struct headerGVCP myHeader = {0}; int recv_num; int send_num; char send_buf[20] = "i am server!"; char recv_buf[20]; struct sockaddr_in addr_client; int len = sizeof(addr_client); while (1) { printf("server wait:\n"); recv_num = recvfrom(socketFdGVCP, recv_buf, sizeof(recv_buf), 0, (struct sockaddr *) &addr_client, (socklen_t *) &len); if (recv_num < 0) { perror("recvfrom error:"); exit(1); } recv_buf[recv_num] = '\0'; printf("server receive %d bytes: %s\n", recv_num, recv_buf); send_num = sendto(socketFdGVCP, send_buf, recv_num, 0, (struct sockaddr *) &addr_client, len); if (send_num < 0) { perror("sendto error:"); exit(1); } } } */
    Processed: 0.012, SQL: 9