Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <unistd.h>
- #include <stdlib.h>
- #include <string.h>
- #include <errno.h>
- #include "unp_readline.h"
- #include <fcntl.h>
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <netinet/in.h>
- #include <arpa/inet.h>
- int main(int argc, char **argv){
- int n;
- char *remote_ip = "127.0.0.1";
- int remote_port;
- int host_sock;
- char msg[1000];
- int portset=0;
- struct sockaddr_in host_add;
- struct sockaddr_in remote_add;
- unsigned int host_len = sizeof(host_add);
- unsigned int remote_len;
- if(argc>1){
- perror("Zu viele Argumente!!!\n");
- return 0;
- }
- host_sock = socket(AF_INET, SOCK_DGRAM, 0);
- int flags = fcntl(host_sock, F_GETFL, 0);
- if (fcntl(host_sock, F_SETFL, flags | O_NONBLOCK) < 0 || fcntl(STDIN_FILENO, F_SETFL, flags | O_NONBLOCK) < 0) {
- printf("ERROR: fcntl() failed");
- return -1;
- }
- host_add.sin_family = AF_INET;
- host_add.sin_port = htons(0);
- host_add.sin_addr.s_addr = htonl(0);
- bind(host_sock, (struct sockaddr *)&host_add, sizeof(host_add));
- getsockname(host_sock, (struct sockaddr*)&host_add, &host_len);
- printf("\n");
- printf("Local port is: %d\n", (int) ntohs(host_add.sin_port));
- printf("Port des Kommunikationspartner: ");
- scanf("%i", &remote_port);
- remote_add.sin_family = AF_INET;
- remote_add.sin_port = remote_port;
- remote_add.sin_addr.s_addr = inet_addr(remote_ip);
- remote_len = sizeof(remote_add);
- while(1){
- if((n=read(STDIN_FILENO, msg, sizeof(msg)))<0){
- if(errno!=EWOULDBLOCK){
- printf("FEHLER (NICHT EWOULDBLOCK)");
- }
- }
- else {
- if(portset==0){
- portset=1;
- bzero(msg,1000);
- continue;
- }
- else{
- msg[n]='\0';
- sendto(host_sock, msg, 1000, 0, (struct sockaddr*)&remote_add, sizeof(remote_add));
- bzero(msg, 1000);
- }
- }
- if((n=recvfrom(host_sock, msg, sizeof(msg), 0, (struct sockaddr*)&remote_add, &remote_len))<0){
- if(errno!=EWOULDBLOCK){
- printf("FEHLER (NICHT EWOULDBLOCK)");
- }
- }
- else {
- printf("%s\n", msg);
- bzero(msg, 1000);
- }
- bzero(msg, 1000);
- }
- close(host_sock);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement