当我尝试将客户端连接到服务器时,我总是收到无效参数错误。一些在线的线程说,当addrlen不正确时可能会发生这种情况,但是在计算长度后,我试图将其更改为字面值,但这并不起作用。我也试过strlen(),但没有运气。不管怎么说,相关的代码 -连接时BSD套接字无效参数
服务器 -
struct sockaddr name;
int main(int agrc, char** argv) {
int sock, new_sd, adrlen; //sock is this socket, new_sd is connection socket
name.sa_family = AF_INET;
strcpy(name.sa_data, "127.0.0.1");
adrlen = strlen(name.sa_data) + sizeof(name.sa_family);
//make socket
sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock < 0) {
printf("\nBind error %m", errno);
exit(1);
}
//unlink and bind
unlink("127.0.0.1");
if(bind (sock, &name, adrlen) < 0)
printf("\nBind error %m", errno);
//listen
if(listen(sock, 5) < 0)
printf("\nListen error %m", errno);
//accept
new_sd = accept(sock, &name, (socklen_t*)&adrlen);
if(new_sd < 0) {
printf("\nAccept error %m", errno);
exit(1);
}
客户端 -
int main(int agrc, char** argv) {
int sock, new_sd, adrlen;
sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock < 0) {
printf("\nserver socket failure %m", errno);
exit(1);
}
//stuff for server socket
name.sa_family = AF_INET;
strcpy(name.sa_data, "127.0.0.1");
adrlen = strlen(name.sa_data) + sizeof(name.sa_family);
cout<<"\nadrlen: "<<adrlen<<"\n";
if(connect(sock, &name, adrlen) < 0) {
printf("\nclient connection failure %m", errno);
exit(1);
}
我没有看到任何东西,可能是错的,但我想我可能只是忽视的东西或不知道的一些东西。任何帮助表示赞赏。