Udp Datagramm verschicken
-
Hallo also ich habe folgendes Problem:
Zwei Programme hab ich geschrieben die folgendes tun sollen:
1.) Ein Datagramm verschicken
2.) Es empfangenSo nur irgendwie verschickt er es aber es kommt nix an... Und ich seh ums verrecken den fehler nicht
Vielleicht sieht das ja einer von euch. Wäre super nett...
Empfänger:
#include <sys/socket.h> #include <sys/types.h> #include <netdb.h> #include <unistd.h> #include <arpa/inet.h> #include <netinet/in.h> #include <iostream> #define OPEN 1 #define CLOSED 2 #define ERROR -1 using namespace std; void start_service() { int u_sock,u_bind,u_getsockname,counter,bytes; char message[64]; struct sockaddr_in server_addr,client_addr; socklen_t len; u_sock = socket(AF_INET, SOCK_DGRAM, 0); if (u_sock < 0) { cout << "\terror. cannot create socket." << endl; // return ERROR; } server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = htonl(INADDR_ANY); server_addr.sin_port = htons(0); len = sizeof(server_addr); u_bind = bind(u_sock,(struct sockaddr *)&server_addr, sizeof(struct sockaddr)); if (u_bind < 0) { cout << "\terror. cannot bind." << endl; // return ERROR; } u_getsockname = getsockname(u_sock, (struct sockaddr *)&server_addr,&len); cout << "\tyour port: " << server_addr.sin_port << endl; counter = 1; bytes = 0; cout << "\twaiting for transmission " << endl; //while (true) //{ len = sizeof(client_addr); bytes = recvfrom(u_sock,message,sizeof(message),0,(struct sockaddr *)&client_addr,&len); { cout << endl << "\t\trecieving datagram:" << endl; cout << "\t-bytes : " << bytes << endl; cout << "\t-host : " << inet_ntoa(client_addr.sin_addr) << endl; cout << "\t-port : " << ntohs(client_addr.sin_port) << endl; cout << "\t-message : " << message << endl; } //} }; int main() { start_service(); return 0; }
Sender:
#include <sys/socket.h> #include <sys/types.h> #include <netdb.h> #include <unistd.h> #include <arpa/inet.h> #include <netinet/in.h> #include <iostream> #define OPEN 1 #define CLOSED 2 #define ERROR -1 using namespace std; void send_package() { int u_sock,bytes_send; struct sockaddr_in client_addr, server_addr; char msg[64] = { 0 }; socklen_t len; char ip[15] = { 0 }; int port = 0; cout << "\tenter host: "; cin >> ip; cout << "\tenter port: "; cin >> port; u_sock = socket(AF_INET, SOCK_DGRAM, 0); if (u_sock < 0) { cout << "\terro, cannot create socket." << endl; // return ERROR; } client_addr.sin_family = AF_INET; server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = inet_addr(ip); server_addr.sin_port = htons(port); len = sizeof(server_addr); strcpy(msg,"hello, world!"); cout << "Ip : " << ip << " / " << server_addr.sin_addr.s_addr << endl; cout << "Port: " << port << " / " << server_addr.sin_port << endl; cout << "msg : " << msg << endl; bytes_send = sendto(u_sock, msg, strlen(msg)+1, 0, (struct sockaddr*) &server_addr, sizeof(server_addr)); if (bytes_send >= 0) { cout << "\t" << bytes_send << " bytes send." << endl; } else { cout << "\terror, msg not send." << endl; } }; int main() { send_package(); return 0; }
Bin wirklich für jede hilfe dankbar
Gruss
Jens
-
habs *gna* dumm
man muss einfach nur den port den man bei der ausgabe des empfaengers ausgibt noch mal von network zu host umwandeln damit man beim sender auch den richtigen eintraegt. herrlich..
so und weiter gehts
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Linux/Unix verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.