send jpeg thru udp

    Feb 18 2006 | 10:24 pm
    i need to send jpeg images to the device, it works using code pasted below, but it is win specific (and outside max), im wondering if its possible using java or tweaking jit.broadcast (although i couldn`t get it to work).
    btw: how i can adapt it for terminal use in os x? i`ll be grateful if someone can have a look,
    thanks, wojciech
    // PSP UDP Send // primarily for sending image data // limited to 30KB
    #include #include // Sleep #pragma comment(lib, "wsock32.lib")
    #define MAX_DATA_SIZE 30000
    // keep UDP file size small to avoid problems
    //////////////////////////////////////////////////////////// /
    WSADATA g_wsaData;
    byte g_image[MAX_DATA_SIZE]; int g_cbImage = 0;
    //////////////////////////////////////////////////////////// /
    bool ParseIPAddrString(byte ipAddr[4], const char* szIPAddr) { int b1, b2, b3, b4; if (sscanf(szIPAddr, "%d.%d.%d.%d", &b1, &b2, &b3, &b4) != 4) return false; ipAddr[0] = b1; ipAddr[1] = b2; ipAddr[2] = b3; ipAddr[3] = b4; return true; }
    int main(int argc, char* argv[]) { if (argc != 4) { printf("usage: udpsend psp_ip_address port data_filen"); return -1; } const char* szIPForward = argv[1]; int port = atoi(argv[2]); const char* szDataFile = argv[3];
    byte ipaddrDest[4]; if (!ParseIPAddrString(ipaddrDest, szIPForward)) { printf("udpsend: Bad IP addressn"); return -1; }
    // load file FILE* pf = fopen(szDataFile, "rb"); if (pf == NULL) { printf("udpsend: missing data filen"); return -1; } fseek(pf, 0, SEEK_END); g_cbImage = ftell(pf); fseek(pf, 0, SEEK_SET); if (g_cbImage { printf("udpsend: data file too smalln"); fclose(pf); return -1; } if (g_cbImage > MAX_DATA_SIZE) { printf("udpsend: data file too big (limited to %d)n", MAX_DATA_SIZE); fclose(pf); return -1; } if (fread(g_image, g_cbImage, 1, pf) != 1) { printf("udpsend: data read errorn"); fclose(pf); return -1; } fclose(pf);
    // WiFi send
    if (WSAStartup(MAKEWORD(1,1), &g_wsaData) != 0) // windows specific { printf("udpsend: winsock init errorn"); return -1; }
    // general socket stuff // send data as on big UDP send to a specific IP address
    SOCKET hSock = socket(AF_INET, SOCK_DGRAM, 0); if (hSock == INVALID_SOCKET) { printf("udpsend: socket create errorn"); goto cleanup; }
    SOCKADDR_IN sinDest; sinDest.sin_family = AF_INET; sinDest.sin_port = htons(port); sinDest.sin_addr.S_un.S_un_b.s_b1 = ipaddrDest[0]; sinDest.sin_addr.S_un.S_un_b.s_b2 = ipaddrDest[1]; sinDest.sin_addr.S_un.S_un_b.s_b3 = ipaddrDest[2]; sinDest.sin_addr.S_un.S_un_b.s_b4 = ipaddrDest[3];
    if (sendto(hSock, (char*)g_image, g_cbImage, 0, (struct sockaddr*)&sinDest, sizeof(sinDest)) != g_cbImage) { printf("udpsend: sendto errorn"); }
    // that's all folks...
    cleanup: WSACleanup(); // windows specific
    return 0; }

    • Feb 18 2006 | 10:35 pm
      Hi Wojciech, What is receiveing your JPEGs? This is kind of funny 'cause I'm rewriting a jpeg/png uploaded in java at this very moment. I used to have code that did it, but I lost it when my hard drive crashed.
      So, the way I did it before was to use ssh through the terminal using key-authentication. With ssh you can call commands on the remote server. I was calling a PHP script that took a jpeg stream and some meta data. This script then posted the jpeg to a webpage. It worked really well.
      In java, you can't pipe processes like you can when typing in the terminal, so I would call:
      cat jpegfilename.jpg
      from java using the terminal interface and grab the stdout and in java code "pipe" the stdout into the stdin of:
      ssh login@server phpscript
      Hope this helps. best, wes