Ich bin neu in der Socket-Programmierung und ich versuche, die Funktionsweise von htons()
zu verstehen. Ich habe ein paar Tutorials im Internet wie this und this ein Beispiel gelesen. Aber ich konnte nicht verstehen, was htons()
genau macht. Ich habe versucht, den folgenden Code:htons() Funktion in Socket Programmierung
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
int main(int argc, char *argv[])
{
int sockfd, newsockfd, portno, clilen;
char buffer[256];
struct sockaddr_in serv_addr, cli_addr;
int n;
/* First call to socket() function */
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0)
{
perror("ERROR opening socket");
exit(1);
}
/* Initialize socket structure */
bzero((char *) &serv_addr, sizeof(serv_addr));
portno = 5001;
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = INADDR_ANY;
serv_addr.sin_port = htons(portno);
/* Now bind the host address using bind() call.*/
if (bind(sockfd, (struct sockaddr *) &serv_addr,
sizeof(serv_addr)) < 0)
{
perror("ERROR on binding");
exit(1);
}
/* Now start listening for the clients, here process will
* go in sleep mode and will wait for the incoming connection
*/
listen(sockfd,5);
clilen = sizeof(cli_addr);
/* Accept actual connection from the client */
newsockfd = accept(sockfd, (struct sockaddr *)&cli_addr,
&clilen);
if (newsockfd < 0)
{
perror("ERROR on accept");
exit(1);
}
/* If connection is established then start communicating */
bzero(buffer,256);
n = read(newsockfd,buffer,255);
if (n < 0)
{
perror("ERROR reading from socket");
exit(1);
}
printf("Here is the message: %s\n",buffer);
/* Write a response to the client */
n = write(newsockfd,"I got your message",18);
if (n < 0)
{
perror("ERROR writing to socket");
exit(1);
}
return 0;
}
Der Wert sin_port
wurde als 35091
gezeigt, während das Debuggen und ich verstehe nicht, wie portno
5001
-35091
geändert. Kann jemand bitte den Grund für diese Wertänderung erklären?
Was verstehen Sie, was 'htons()' tut? Hast du das gelesen: http://en.wikipedia.org/wiki/Endianess. –
Gemäß Linux-Handbuch Die Funktion 'htons()' konvertiert den unsigned short integer hoseshort von der Host-Byte-Reihenfolge in die Netzwerk-Byte-Reihenfolge. – Shushant
Ich kenne große Endianne und kleine Endianne, aber ich weiß nicht die Operation von htons() genau !!! – User123422