私はUDPを介してサーバーにさまざまな要求を送信することを含むプロジェクトに取り組んでいます。ただし、サーバーが私の要求に応答しないため、ソケットの設定が完全に間違っているようです。テスト用のサーバーバイナリが提供されましたが、以下のコードは応答を示しません。UDPソケットを正しく設定していますか?もしそうなら、私はどういうわけかsendtoを間違って使用していますか?正しいビット数を送信していることを確認しました。
プログラムの入力は次のとおりです。./client [URL] [port] [username]
、そして私は常に。でテストし./client localhost 8080 user
ます。これが私が送信している構造体とコードです。
struct request_login {
int req_type; /* = REQ_LOGIN */
char req_username[32];
} packed;
コード:
struct sockaddr_in sa;
int sockfd = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
if(sockfd == -1){
printf("Could not create socket.");
exit(EXIT_FAILURE);
}
// Prepare the socket address
memset(&sa, 0, sizeof sa);
sa.sin_family = AF_INET;
sa.sin_addr.s_addr = inet_addr(argv[1]);
// Convert to network order
sa.sin_port = htonl(atoi(argv[2]));
// Assemble and send login request
struct request_login * reqlogin = (struct request_login *) malloc(sizeof(struct request_login));
reqlogin->req_type = REQ_LOGIN;
strcpy(reqlogin->req_username, argv[3]);
int res = sendto(sockfd, reqlogin, sizeof (struct request_login), 0, (struct sockaddr*)&sa, sizeof sa);
free(reqlogin)