Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string.h>
- #include <sys/socket.h>
- #include <arpa/inet.h>
- #include <unistd.h>
- int main(void){
- int tx_socket, rx_socket;
- struct sockaddr_in tx_server_addr, tx_client_addr, rx_addr;
- char client_message[2000];
- char server_response[2000];
- int tx_server_struct_length = sizeof(tx_server_addr);
- int tx_client_struct_length = sizeof(tx_client_addr);
- int rx_struct_length = sizeof(rx_addr);
- // Clean buffers:
- memset(server_response, '\0', sizeof(server_response));
- memset(client_message, '\0', sizeof(client_message));
- // Create tx UDP socket:
- tx_socket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
- if(tx_socket < 0){
- printf("Error while creating socket\n");
- return -1;
- }
- printf("Socket created successfully\n");
- // Set client port:
- tx_client_addr.sin_family = AF_INET;
- tx_client_addr.sin_port = htons(7789);
- tx_client_addr.sin_addr.s_addr = INADDR_ANY;
- // Bind to the set client port:
- if(bind(tx_socket, (struct sockaddr*)&tx_client_addr, sizeof(tx_client_addr)) < 0){
- printf("Couldn't bind to the port\n");
- printf("Did you set the ip with $ sudo ip addr add 192.168.3.1/24 dev enp5s0");
- return -1;
- }
- // tx message:
- client_message[0] = '\0'; // empty frame, just to trigger the reponse
- // tx port and ip:
- tx_server_addr.sin_family = AF_INET;
- tx_server_addr.sin_port = htons(7789);
- tx_server_addr.sin_addr.s_addr = inet_addr("192.168.3.10");
- // send frame
- if (sendto(tx_socket, client_message, strlen(client_message), 0, (struct sockaddr*)&tx_server_addr, tx_server_struct_length) < 0){
- printf("Can't send\n");
- return -1;
- } else {
- printf("empty UDP frame send\n");
- }
- // Create rx UDP socket:
- rx_socket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
- rx_addr.sin_family = AF_INET;
- rx_addr.sin_port = htons(7789);
- rx_addr.sin_addr.s_addr = INADDR_ANY;
- // Receive server response:
- int rx_err = 0;
- rx_err = recvfrom(rx_socket, server_response, sizeof(server_response), 0, (struct sockaddr*)&rx_addr, &rx_struct_length);
- if ( rx_err ) {
- printf("Couldn't receive, err = %i", rx_err);
- return -1;
- }
- printf("Received message from IP: %s\n", inet_ntoa(rx_addr.sin_addr));
- printf("Msg from client: %s\n", server_response);
- // Close the socket:
- close(tx_socket);
- close(rx_socket);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment