#include #include #include #include #include #include #include #include #include #include #include #include typedef socklen_t SOCKLEN_TYPE; const char *BROAD_ADDR="224.1.1.2"; const int BROAD_PORT=19260; int s; void reportError(const char *msg) { fprintf(stderr,"%s: %s(ErrorCode:%d)\n",msg,strerror(errno),errno); } int main() { int TIME_LIVE = 256; if ((s=socket(AF_INET,SOCK_DGRAM,0))<0) { reportError("Failed to create socket"); return 1; } struct sockaddr_in addr; memset(&addr,0,sizeof(addr)); SOCKLEN_TYPE len=sizeof(addr); addr.sin_family=AF_INET; addr.sin_port=htons(BROAD_PORT); addr.sin_addr.s_addr=inet_addr(BROAD_ADDR); if (connect(s,(struct sockaddr*)&addr,len)<0) { reportError("Failed to bind socket"); return 1; } setsockopt(s,IPPROTO_IP,IP_MULTICAST_TTL,(void*)&TIME_LIVE,sizeof(TIME_LIVE)); Display* display=XOpenDisplay(0); Window root=DefaultRootWindow(display); XEvent event; int keycode = XKeysymToKeycode(display,0xff1b); XGrabKey(display,keycode,Mod2Mask,root,True,GrabModeAsync,GrabModeAsync); XSelectInput(display,root,KeyPressMask); while (true) { XNextEvent(display, &event); switch(event.type) { case KeyPress: sendto(s,"#",1,0,NULL,0); break; default: break; } } XCloseDisplay(display); return 0; }