How to get data from YARP's name server without using any YARP code in your own program.
 
 
 
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <string.h>
 
#ifdef WIN32
#include <winsock2.h>
#else
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#endif
 
#define PORT        10000
 
#define HOST        "127.0.0.1"
 
#define BUFSIZE     1000
 
#ifdef WIN32
void windowsNetStart(void) {
    int     wsaRc;
    WSADATA wsaData;
    if(wsaRc=WSAStartup(0x0101, &wsaData)) {
        perror("WinSock init");
    }
    if(wsaData.wVersion != 0x0101) {
        WSACleanup();
        perror("wsaData.wVersion");
    }
}
#endif
 
 
int main(
int argc, 
char *argv[]) {
 
    char buf[BUFSIZE];
    int i;
#ifdef WIN32
    SOCKET sd;
#else
    int sd;
#endif
    
    struct sockaddr_in pin;
    struct hostent *hp;
 
    if (argc<=1) {
        printf("Please supply a message to send to the nameserver. ");
        printf(" Examples:\n");
        printf("   help\n");
        printf("   list\n");
        printf("   query /portname\n");
        exit(1);
    }
 
#ifdef WIN32
    
    windowsNetStart();
#endif
 
    
    if ((hp = gethostbyname(HOST)) == 0) {
        perror("gethostbyname");
        exit(1);
    }
 
    
    memset(&pin, 0, sizeof(pin));
    pin.sin_family = AF_INET;
    pin.sin_addr.s_addr = ((struct in_addr *)(hp->h_addr))->s_addr;
    pin.sin_port = htons(PORT);
 
    
    if ((sd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
        perror("socket");
        exit(1);
    }
 
    
    if (connect(sd,(struct sockaddr *)  &pin, sizeof(pin)) == -1) {
        perror("connect");
        exit(1);
    }
 
    
    
    buf[0] = '\0';
    strncat(buf,"NAME_SERVER",sizeof(buf));
    for (i=1; i<argc; i++) {
        strncat(buf," ",sizeof(buf));
        strncat(buf,argv[i],sizeof(buf));
    }
    strncat(buf,"\n",sizeof(buf));
    printf("Message to send to name server:\n");
    printf("%s", buf);
 
    
    if (send(sd, buf, strlen(buf), 0) == -1) {
        perror("send");
        exit(1);
    }
 
    
    for (i=0; i<BUFSIZE; i++) {
        buf[i] = '\0';
    }
    if (recv(sd, buf, BUFSIZE, 0) == -1) {
        perror("recv");
        exit(1);
    }
 
    
    printf("Response from yarp server:\n");
    printf("%s", buf);
 
#ifdef WIN32
    closesocket(sd);
#else
    close(sd);
#endif
}