mycodaemon.c 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. /*
  2. * mycodaemon.c
  3. */
  4. #include <sys/types.h>
  5. #include <sys/socket.h>
  6. #include <netinet/in.h>
  7. #include <arpa/inet.h>
  8. #include <unistd.h>
  9. #include <stdlib.h>
  10. #include <stdio.h>
  11. #include <string.h>
  12. int myco_send (const char *message, const char *myco_daemon_address, uint16_t myco_daemon_port) {
  13. int create_socket;
  14. struct sockaddr_in address;
  15. if ((create_socket = socket (AF_INET, SOCK_STREAM, 0)) < 1)
  16. return -1;
  17. address.sin_family = AF_INET;
  18. address.sin_port = htons (myco_daemon_port);
  19. inet_aton (myco_daemon_address, &address.sin_addr);
  20. if (connect ( create_socket, (struct sockaddr *) &address, sizeof (address)) != 0)
  21. return -1;
  22. send(create_socket, message, strlen (message), 0);
  23. close (create_socket);
  24. return 0;
  25. }
  26. int myco_recv (char *message, const char *myco_daemon_address, uint16_t myco_daemon_port) {
  27. int buf = 1024;
  28. int create_socket, new_socket;
  29. socklen_t addrlen;
  30. char *buffer = malloc (buf);
  31. ssize_t size;
  32. struct sockaddr_in address;
  33. const int y = 1;
  34. printf ("\e[2J");
  35. if ((create_socket=socket (AF_INET, SOCK_STREAM, 0)) > 0)
  36. printf ("Socket wurde angelegt\n");
  37. setsockopt( create_socket, SOL_SOCKET,
  38. SO_REUSEADDR, &y, sizeof(int));
  39. address.sin_family = AF_INET;
  40. address.sin_addr.s_addr = INADDR_ANY;
  41. address.sin_port = htons (myco_daemon_port);
  42. if (bind ( create_socket,
  43. (struct sockaddr *) &address,
  44. sizeof (address)) != 0) {
  45. printf( "Der Port ist nicht frei – belegt!\n");
  46. }
  47. listen (create_socket, 5);
  48. addrlen = sizeof (struct sockaddr_in);
  49. new_socket = accept ( create_socket,
  50. (struct sockaddr *) &address,
  51. &addrlen );
  52. if (new_socket > 0)
  53. printf ("Ein Client (%s) ist verbunden ...\n",
  54. inet_ntoa (address.sin_addr));
  55. size = recv (new_socket, buffer, buf-1, 0);
  56. if( size > 0)
  57. buffer[size] = '\0';
  58. printf ("Nachricht empfangen: %s\n", buffer);
  59. close (new_socket);
  60. return EXIT_SUCCESS;
  61. }
  62. // make into daemon later
  63. int main() {
  64. char *message = malloc(1024);
  65. if (myco_recv (message, "127.0.0.1", 15000))
  66. printf ("Receive.\n");
  67. if (myco_send ("foobar", "127.0.0.1", 15000))
  68. printf ("Send.\n");
  69. return EXIT_SUCCESS;
  70. }