This is an old revision of the document!
Vortrag/Workshop Einführung in Einführung Unix Socket Programmierung
- by Christian Pointner
Beispiel: udpclient
/* * udpclient * * This is a very basic UDP client example to show the usage of * sockets. * * Copyright (C) 2010 Christian Pointner <equinox@realraum.at> * * udpclient is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * udpclient is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with udpclient. If not, see <http://www.gnu.org/licenses/>. */ #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <errno.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> int main(int argc, char** argv) { if(argc <= 2) { fprintf(stderr,"too few arguments\n"); exit(1); } printf("starting UDP Client\n"); int sock = socket(AF_INET, SOCK_DGRAM, 0); if(sock < 0) { perror("socket() call failed"); exit(-1); } struct sockaddr_in local_addr; memset((char *) &local_addr, 0, sizeof(local_addr)); local_addr.sin_family = AF_INET; local_addr.sin_port = htons(4321); local_addr.sin_addr.s_addr = htonl(INADDR_ANY); if(bind(sock, (struct sockaddr *)&local_addr, sizeof(local_addr))==-1) { perror("bind() call failed"); exit(-1); } struct sockaddr_in remote_addr; int alen, len; alen = sizeof(remote_addr); remote_addr.sin_family = AF_INET; remote_addr.sin_port = htons(atoi(argv[2])); if (inet_aton(argv[1], &remote_addr.sin_addr)==0) { perror("inet_aton() call failed"); exit(-1); } uint8_t buffer[1500]; for (;;) { if((len = read(0, buffer, 1500))==-1) { perror("read() call failed"); exit(-1); } if((len = sendto(sock, buffer, len, 0, (struct sockaddr *)&remote_addr, alen))==-1) { perror("sendto() call failed"); exit(-1); } } close(sock); printf("exiting UDP Client\n"); return 0; }
/* * udpserver * * This is a very basic UDP client example to show the usage of * sockets. * * Copyright (C) 2010 Christian Pointner equinox@realraum.at * * udpserver is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * udpserver is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with udpserver. If not, see <http://www.gnu.org/licenses/>. */
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <errno.h> #include <string.h>
#include <sys/types.h> #include <sys/socket.h>
#include <arpa/inet.h>
int main(int argc, char** argv) {
printf("starting UDP Server\n");
int sock = socket(AF_INET, SOCK_DGRAM, 0); if(sock < 0) { perror("socket() call failed"); exit(-1); } struct sockaddr_in local_addr; memset((char *) &local_addr, 0, sizeof(local_addr)); local_addr.sin_family = AF_INET; local_addr.sin_port = htons(1234); local_addr.sin_addr.s_addr = htonl(INADDR_ANY);
if(bind(sock, (struct sockaddr *)&local_addr, sizeof(local_addr))==-1) { perror("bind() call failed"); exit(-1); }
struct sockaddr_in remote_addr; int alen, len; alen = sizeof(remote_addr); uint8_t buffer[1500]; for (;;) { if((len = recvfrom(sock, buffer, 1500, 0, (struct sockaddr *)&remote_addr, &alen))==-1) { perror("recvfrom() call failed"); exit(-1); }
printf("Received %d Bytes from %s:%d\n", len, inet_ntoa(remote_addr.sin_addr), ntohs(remote_addr.sin_port)); }
close(sock); printf("exiting UDP Server\n");
return 0;
} </file>
Beispiel: udpserver
<file>