mirror of
https://github.com/OpenSolo/OpenSolo.git
synced 2025-04-30 14:44:31 +02:00
74 lines
2.0 KiB
C++
74 lines
2.0 KiB
C++
#include <stdlib.h>
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
#include <iostream>
|
|
#include <stdint.h>
|
|
#include <fcntl.h>
|
|
#include <unistd.h>
|
|
#include <sys/socket.h>
|
|
#include <sys/types.h>
|
|
#include <netdb.h>
|
|
#include <arpa/inet.h>
|
|
|
|
using namespace std;
|
|
|
|
/***********************************************************************
|
|
UDP macros
|
|
***********************************************************************/
|
|
#define REMOTE_UDP_PORT 14560
|
|
#define LOCAL_UDP_PORT 14550
|
|
#define NUM_CHANNELS 8
|
|
|
|
int main(void)
|
|
{
|
|
int sock_fd;
|
|
struct sockaddr_in myaddr;
|
|
struct sockaddr_in remaddr; /* server address */
|
|
int slen = sizeof(remaddr);
|
|
socklen_t addrlen = sizeof(remaddr); /* length of addresses */
|
|
char *server = "127.0.0.1"; /* change this to use a different server */
|
|
char buf[512];
|
|
int recvlen;
|
|
|
|
if ((sock_fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
|
|
cerr << "cannot create socket" << endl;
|
|
return 0;
|
|
}
|
|
|
|
memset((char *)&myaddr, 0, sizeof(myaddr));
|
|
myaddr.sin_family = AF_INET;
|
|
myaddr.sin_addr.s_addr = htonl(INADDR_ANY);
|
|
myaddr.sin_port = htons(LOCAL_UDP_PORT);
|
|
|
|
if (bind(sock_fd, (struct sockaddr *)&myaddr, sizeof(myaddr)) < 0) {
|
|
perror("bind failed");
|
|
return 0;
|
|
}
|
|
|
|
fcntl(sock_fd, F_SETFL, O_NONBLOCK);
|
|
|
|
memset((char *)&remaddr, 0, sizeof(remaddr));
|
|
remaddr.sin_family = AF_INET;
|
|
remaddr.sin_port = htons(REMOTE_UDP_PORT);
|
|
if (inet_aton(server, &remaddr.sin_addr) == 0) {
|
|
cerr << "inet_aton() failed" << endl;
|
|
return 0;
|
|
}
|
|
|
|
memset(buf, 0, sizeof(buf));
|
|
sprintf(buf, "Hello!\n");
|
|
sendto(sock_fd, buf, strlen(buf), 0, (struct sockaddr *)&remaddr, slen);
|
|
|
|
while (true) {
|
|
// See if theres anything to receive
|
|
memset(buf, 0, sizeof(buf));
|
|
recvlen = recvfrom(sock_fd, buf, 512, 0, (struct sockaddr *)&remaddr, &addrlen);
|
|
|
|
if (recvlen > 0)
|
|
cout << "Got " << recvlen << " bytes" << endl;
|
|
}
|
|
|
|
close(sock_fd);
|
|
return 1;
|
|
}
|