在網絡中使用C++對我來說是完全神祕的。任何人都不介意幫我分解這段代碼中的錯誤嗎?它被授予我的班級,作爲如何不製作UDP服務器的例子。C++ UDP服務器故障
我已經注意到一些問題,如緩衝區是如何固定256字節長,但大部分我不明白它。我更多的是PHP/Java/JavaScript程序員。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
void error(char *msg)
{
perror(msg);
exit(1);
}
int main(int argc, char *argv[])
{
int sockfd, portno, clilen;
char buffer[256];
struct sockaddr_in serv_addr, cli_addr;
int n;
if (argc <= 2) {
fprintf(stderr,"Error, no port provided\n");
exit(1);
}
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0)
error("Error opening socket");
bzero((char *) &cli_addr, sizeof(serv_addr));
portno = atoi(argv[2]);
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
serv_addr.sin_port = htons(portno);
if (bind(sockfd, (struct sockaddr *) &serv_addr,
sizeof(cli_addr)) < 0)
error("ERROR on binding");
clilen = sizeof(cli_addr);
while(100)
{
bzero(buffer,256);
n = recvfrom(sockfd,buffer, 0, 255,
(struct sockaddr *) &serv_addr,&clilen);
printf("A client from %s port %d connected\n", inet_aton(cli_addr.sin_addr), htons(cli_addr.sin_port));
if (n < 0) error("Error reading from socket");
printf("Here is the message: %s\n",buffer);
n = sendto(sockfd,"I got your message",18,0,(struct sockaddr *) &serv_addr,sizeof(cli_addr));
if (n < 0) error("Error writing to socket");
}
close(sockfd);
return 0;
}
您應該查看[Unix網絡編程](http://www.unpbook.com/)。解釋如何製作UDP服務器是StackOverflow問題的一個非常高的順序。 – ObscureRobot
這是一個關於特定問題/事實的問答網站,而不是「plz help」教程環境。抱歉。如果這是作業,你應該向你的老師/導師尋求幫助;這就是他們在那裏的原因。 –
我特意尋找錯誤,所以我覺得這是足夠具體。 – geoffreak