나는이 작업을 수행해야하는 매우 간단한 TCP 서버/클라이언트를 구현하기 위해 노력하고있어 포트 C에서 수신 : "안녕하세요, 암호를 입력"보내 C : S를 연결 : 메시지를 받고, 암호를 전송합니다. S : 클라이언트의 옳고 그른 암호의 경우 "right"또는 "wrong"로 대답합니다.보내고 recv를 앞뒤로
분명히하는 것이 좋겠습니다.
어떻게 C에서이 작업을 수행 할 수 있습니까? Beej 's Guide를 소켓 프로그래밍에 사용하고 코드를 약간 변경했습니다. 서버 :
i = send(new_fd, "Hello, world!", 13, 0);
printf("send returned %d\n", i);
char* buf;
recv(new_fd, buf, MAX_BUF_SIZE - 1, 0);
buf[MAX_BUF_SIZE] = '\0';
if (!strncmp(buf, "lol", 3)) //the pw is lol
{
send(new_fd, "right", 11, 0);
printf("logged in\n");
}
else
{
// ...as above...
}
close(new_fd);
클라이언트는 그에 따라 작동합니다. recv 및 보내기를 혼합 할 수 없습니까? 클라이언트 쪽에서 recv 후에도 보내지 않으며 서버 쪽에서 보내기 후에 recv도 작동하지 않습니다. 내가 무엇이 누락 되었습니까? 희망 사항이 충분합니다.
어떤 방식으로 작동하지 않습니까? 'buf'가 유효하지 않은 포인터이기 때문에 여러분이 올린 코드는'recv' 호출에 도달 할 때 충돌하는 것처럼 보입니다. – user3553031
아. 너는 완전히 옳다. 나는 적당한 크기를주지 않았다. 그게 당신이 의미하는 바가 잘못된 것 같네요, 그렇죠? 어쨌든, 지금은 잘 작동합니다. 고맙습니다. – jjstcool
나는 무엇이 작동하지 않는지 알지 못한다. 조금은 명확하게해라.하지만 몇 가지 조언을 해줄 것이다. buf = (char *) malloc (sizeof char) * MAX_BUF_SIZE); 그 후 버퍼 내부의 데이터를 신뢰하지 말고 send와 recv 전에 memclear를 사용하십시오. – Izuel