Guest User

Untitled

a guest
Aug 15th, 2023
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.30 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <sys/socket.h>
  4. #include <arpa/inet.h>
  5. #include <unistd.h>
  6.  
  7. int main(void){
  8. int tx_socket, rx_socket;
  9. struct sockaddr_in tx_server_addr, tx_client_addr, rx_addr;
  10. char client_message[2000];
  11. char server_response[2000];
  12. int tx_server_struct_length = sizeof(tx_server_addr);
  13. int tx_client_struct_length = sizeof(tx_client_addr);
  14. int rx_struct_length = sizeof(rx_addr);
  15.  
  16. // Clean buffers:
  17. memset(server_response, '\0', sizeof(server_response));
  18. memset(client_message, '\0', sizeof(client_message));
  19.  
  20. // Create tx UDP socket:
  21. tx_socket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
  22.  
  23. if(tx_socket < 0){
  24. printf("Error while creating socket\n");
  25. return -1;
  26. }
  27. printf("Socket created successfully\n");
  28.  
  29.  
  30.  
  31. // Set client port:
  32. tx_client_addr.sin_family = AF_INET;
  33. tx_client_addr.sin_port = htons(7789);
  34. tx_client_addr.sin_addr.s_addr = INADDR_ANY;
  35.  
  36. // Bind to the set client port:
  37. if(bind(tx_socket, (struct sockaddr*)&tx_client_addr, sizeof(tx_client_addr)) < 0){
  38. printf("Couldn't bind to the port\n");
  39. printf("Did you set the ip with $ sudo ip addr add 192.168.3.1/24 dev enp5s0");
  40. return -1;
  41. }
  42.  
  43.  
  44. // tx message:
  45. client_message[0] = '\0'; // empty frame, just to trigger the reponse
  46.  
  47. // tx port and ip:
  48. tx_server_addr.sin_family = AF_INET;
  49. tx_server_addr.sin_port = htons(7789);
  50. tx_server_addr.sin_addr.s_addr = inet_addr("192.168.3.10");
  51.  
  52.  
  53. // send frame
  54. if (sendto(tx_socket, client_message, strlen(client_message), 0, (struct sockaddr*)&tx_server_addr, tx_server_struct_length) < 0){
  55. printf("Can't send\n");
  56. return -1;
  57. } else {
  58. printf("empty UDP frame send\n");
  59. }
  60.  
  61.  
  62.  
  63.  
  64. // Create rx UDP socket:
  65. rx_socket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
  66.  
  67. rx_addr.sin_family = AF_INET;
  68. rx_addr.sin_port = htons(7789);
  69. rx_addr.sin_addr.s_addr = INADDR_ANY;
  70.  
  71.  
  72. // Receive server response:
  73. int rx_err = 0;
  74. rx_err = recvfrom(rx_socket, server_response, sizeof(server_response), 0, (struct sockaddr*)&rx_addr, &rx_struct_length);
  75.  
  76. if ( rx_err ) {
  77. printf("Couldn't receive, err = %i", rx_err);
  78. return -1;
  79. }
  80.  
  81. printf("Received message from IP: %s\n", inet_ntoa(rx_addr.sin_addr));
  82. printf("Msg from client: %s\n", server_response);
  83.  
  84.  
  85.  
  86.  
  87. // Close the socket:
  88. close(tx_socket);
  89. close(rx_socket);
  90.  
  91. return 0;
  92. }
  93.  
  94.  
  95.  
  96.  
Advertisement
Add Comment
Please, Sign In to add comment