C에서 소켓 프로그래밍에 대한 숙제를 할 때 문제가 있습니다. UDP를 사용하는 간단한 클라이언트/서버 작업을 수행하고 있으며 서버에 문제가 있습니다. 여기에 코드 조각입니다 : C UDP 소켓이 작동하지 않습니다.
int main(int argc, char *argv[])
{
int sockfd, newsockfd, portno;
socklen_t clilen;
char buffer[PACKET_DATA_LENGTH];
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_DGRAM, 0);
if (sockfd < 0)
error("ERROR opening socket");
는 원래
sockfd = socket(AF_NET, SOCK_DGRAM, 0)
는
SOCK_STREAM
했지만, 프로젝트 사양은 TCP UDP에서가 아니라 그것을 할 때부터
DGRAM
에
STREAM
을 변경했습니다.
내가 좋아하는 서버 전화 : ./receiver 1234
을 그리고 오류 얻을 : 나는 DGRAM
가 컴파일 ./receiver 1234
잘 작동 STREAM
까지 다시 변경하는 경우, 그러나 ERROR on accept: Operation not supported on socket
합니다.
도움 말?
감사합니다. 이 오류가() 모습입니다 편집
-kstruct
void error(const char *msg)
{
perror(msg);
exit(1);
}
EDIT2 (이 미리 주어진 코드는, 내가 그것을 기록하지 않았다, 그것은 프로젝트의 일환으로 온) 여기 내 코드 (내가 게시 한 코드의 첫 번째 블록 바로 다음에 오는 것)가 더 많습니다. 상용구 코드가 accept()를 호출하지만 다른 출력 메시지를 트리거해서는 안됩니다. 즉, ERROR on accept
이 아닌 ERROR opening socket
을 말하면 안됩니까?
bzero((char *) &serv_addr, sizeof(serv_addr));
portno = atoi(argv[1]);
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = INADDR_ANY;
serv_addr.sin_port = htons(portno);
if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0)
error("ERROR on binding");
listen(sockfd,5);
clilen = sizeof(cli_addr);
newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen);
if (newsockfd < 0)
error("ERROR on accept");
질문을 이해할 수 없습니다. 당신은 메시지에'ERROR on accept : ...'라고 말한 다음에 * EDIT2 *에서'ERROR opening socket '을 얻었지만'ERROR on accept'라고 예상 할 것입니다. 그게 니가 우리에게 말한거야. –
내 잘못, 다른 방법으로, 나는 그것을 고치겠다. * 수정 * 수정 됨. 나는 나머지 코드를 살펴 보았고 코드에서 다른 accept() 호출은 없다. – adelbertc
데이터 그램 소켓에서'accept()'를 호출하는 것은 유효하지 않습니다. 'accept()'를 아직 호출하지 않았다면 왜 소켓을 여는 데 오류가있을 것이라고 생각합니까? –