hallo, ich hab ein „kleines“ problem, ich habe ein Programm welches ich nun von tcp auf udp umprogrammieren muss, das Programm verwendet C Sockets, und ich kenn mich nicht aus. Kann mir bitte wer helfen, anbei der Code, danke schön, lg kathi
#include
#include
#include
/* Windows-System */
#ifdef _WIN32
#include
/* Unix-System */
#else
#include // listen, socket, bind, getsockname, shutdown
#include // socket, bind
#include // htonl, htons, ntohl, ntohs
#include // fcntl
//#include
//#include
//#include
#endif
void set_nonblocking (int sockfd)
{
int prev_mode (fcntl (sockfd, F_GETFL, 0));
if (prev_mode != -1) {
fcntl (sockfd, F_SETFL, prev_mode | O_NONBLOCK);
}
}
int main (int argc, char *argv[], char* envv[])
{
#ifdef _WIN32
WSADATA wsaData;
if (WSAStartup (MAKEWORD (1, 1), &wsaData) != 0) {
fprintf (stderr, „WSAStartup (): Kann Winsock nicht initialisieren.\n“);
exit (EXIT_FAILURE);
}
#endif
// Socket holen
int sockfd = socket (AF_INET, SOCK_STREAM, 0);
if (sockfd == -1) {
perror („socket ()“);
}
// Port anbinden
sockaddr_in my_addr;
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(5000);
my_addr.sin_addr.s_addr = htonl(INADDR_ANY);
if (bind(sockfd, (sockaddr *)&my_addr, sizeof(sockaddr)) == -1) {
perror („bind ()“);
}
// Port kontrollieren
socklen_t len;
getsockname(sockfd, (sockaddr *) &my_addr, &len);
printf („Port: %d\n“, ntohs(my_addr.sin_port));
// auf eine Verbindung warten
if (listen (sockfd, 5) == -1) {
perror („listen ()“);
}
// warten mit select
set_nonblocking (sockfd);
fd_set readfs, writefs, exceptfs;
struct timeval tv;
int maxfd (sockfd + 1);
FD_ZERO (&readfs);
FD_ZERO (&writefs);
FD_ZERO (&exceptfs);
FD_SET (sockfd, &readfs);
tv.tv_sec = 10;
tv.tv_usec = 0;
int sel (select (maxfd, &readfs, &writefs, &exceptfs, &tv));
if (sel > 0) {
// Verbindung annehmen
socklen_t sin_size = sizeof (sockaddr_in);
sockaddr_in remote_host;
int sockfd2 = accept (sockfd, (sockaddr *) &remote_host, &sin_size);
if (sockfd2 == -1) {
perror („accept ()“);
}
// Daten senden
char content[] = „Inhalt“;
int len (strlen (content));
int sent (send (sockfd2, content, len, 0));
printf („Sent: %d bytes\n“, sent);
int down = shutdown (sockfd2, SHUT_RDWR);
if (down == -1) {
perror („shutdown (sockfd2)“);
}
}
int down = shutdown (sockfd, SHUT_RDWR);
if (down == -1) {
perror („shutdown (sockfd)“);
}
#ifdef _WIN32
WSACleanup ();
#endif
}