Übersetzen von Netzwerk Prog
-
Kann mir bitte jemand das fogende Programm für Windows funktionsfähig machen? ich kenne mich leider mit Windowsnetzwerk nicht aus. am besten einfach den empfangenen Text mit einer MessageBox ausgeben.
/* ** listener.c -- a datagram sockets "server" demo */ #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <errno.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #define MYPORT 4950 // the port users will be connecting to #define MAXBUFLEN 100 int main(void) { int sockfd; struct sockaddr_in my_addr; // my address information struct sockaddr_in their_addr; // connector's address information socklen_t addr_len; int numbytes; char buf[MAXBUFLEN]; if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) { perror("socket"); exit(1); } my_addr.sin_family = AF_INET; // host byte order my_addr.sin_port = htons(MYPORT); // short, network byte order my_addr.sin_addr.s_addr = INADDR_ANY; // automatically fill with my IP memset(&(my_addr.sin_zero), '\0', 8); // zero the rest of the struct if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == -1) { perror("bind"); exit(1); } addr_len = sizeof(struct sockaddr); if ((numbytes=recvfrom(sockfd,buf, MAXBUFLEN-1, 0, (struct sockaddr *)&their_addr, &addr_len)) == -1) { perror("recvfrom"); exit(1); } //Das als MessageBox wenn ein Paket empfangen printf("got packet from %s\n",inet_ntoa(their_addr.sin_addr)); printf("packet is %d bytes long\n",numbytes); buf[numbytes] = '\0'; printf("packet contains \"%s\"\n",buf); close(sockfd); return 0; }Ich hoffe jemand kriegt das hin. Vielen Dank im Voraus
-
Da musste vermutlich gar nich viel ändern.
Der Socket-Kram ist in "winsock.h" bzw. "winsock2.h" zu finden.
Und Winsock muss erst noch initialisiert werden (WSAStartup()) und anschließend wieder freigegeben werden (WSACleanup())Microsoft hat sich auch mit dem Portieren beschäftigt:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winsock/winsock/porting_socket_applications_to_winsock.asp
-
Was muss ich denn WSAStartup() übergeben? was wird mit den zei parametern gemacht?
Folgelndes steht in der winsock.h:
int PASCAL WSAStartup(WORD,LPWSADATA);Mein Prog sieht jetzt folgendermaßen aus:
/* ** listener.c -- a datagram sockets "server" demo */ #include <iostream> #include <stdlib.h> #include <winsock.h> #define MYPORT 4950 // the port users will be connecting to #define MAXBUFLEN 100 using namespace std; int main(int argc, char *argv[]) { WSAStartup(); int sockfd; struct sockaddr_in my_addr; // my address information struct sockaddr_in their_addr; // connector's address information socklen_t addr_len; int numbytes; char buf[MAXBUFLEN]; if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) { perror("socket"); exit(1); } my_addr.sin_family = AF_INET; // host byte order my_addr.sin_port = htons(MYPORT); // short, network byte order my_addr.sin_addr.s_addr = INADDR_ANY; // automatically fill with my IP memset(&(my_addr.sin_zero), '\0', 8); // zero the rest of the struct if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == -1) { perror("bind"); exit(1); } addr_len = sizeof(struct sockaddr); if ((numbytes=recvfrom(sockfd,buf, MAXBUFLEN-1, 0, (struct sockaddr *)&their_addr, &addr_len)) == -1) { perror("recvfrom"); exit(1); } //Das als MessageBox wenn ein Paket empfangen printf("got packet from %s\n",inet_ntoa(their_addr.sin_addr)); printf("packet is %d bytes long\n",numbytes); buf[numbytes] = '\0'; printf("packet contains \"%s\"\n",buf); close(sockfd); WSACleanup(); system("PAUSE"); return 0; }Muss ich noch eine lib einbinden?
-
lib: ws2_32.lib
WSADATA wsa; WSAStartup(MAKEWORD(2,0),&wsa);..damit forderst du an, das du gerne Winsock Version 2.0 verwenden möchtest und kriegst in der WSADATA-Struktur noch irgendwelchen Kram geliefert, mit dem man z.B. prüfen könnte, ob Version 2.0 auch verfügbar ist..
Microsoft hat die ganzen Winsock Funktionen auch dokumentiert:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winsock/winsock/wsastartup_2.asp