我正在开发一个项目,该项目涉及通过 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)