Ich lerne Socket-Programmierung, wenn ich versuche, eine Verbindung zwischen meinem Client und dem Server zu erstellen, nur wenn ich wie folgt festgelegt
client.cpp:Bind mit 127.0.0.1 und INADDR_ANY
serAdd.sin_addr.s_addr=htol(INADDR_ANY);
Server. cav:
serAdd.sin_addr.s_addr=htol(INADDR_ANY);
bind(server,(const sockaddr *)&serAdd,sizeof(serAdd);
die Verbindung estalished werden kann successfully.If I INADDR_ANY auf 127.0.0.1 geändert, wird die Verbindung nicht unter established.The werden kann, ist mein Programm:
client.cpp:
#define portNum 6666
int main()
{
int client,i;
sockaddr_in serAdd;
char *ip="127.0.0.1";
client=socket(AF_INET,SOCK_STREAM,0);
if(client<0)
{
cout<<"Fail to create socket..."<<endl;
return 0;
}
cout<<"Creating connection..."<<endl;
serAdd.sin_family=AF_INET;
serAdd.sin_addr.s_addr=htonl(*ip);
serAdd.sin_port=htons(portNum);
if(connect(client,(const sockaddr *)&serAdd,sizeof(serAdd))==0)
{
cout<<"Connected!"<<endl;
cin>>i;
}
else
{
cout<<"Connect failed..."<<endl;
cin>>i;
}
}
server.cpp:
#define portNum 6666
int main()
{
int client,server;
sockaddr_in serAdd,
cliAdd;
char *ip="127.0.0.1";
server=socket(AF_INET,SOCK_STREAM,0);
if(server<0)
{
cout<<"Fail to create socket..."<<endl;
return 0;
}
cout<<"Binding..."<<endl;
serAdd.sin_family=AF_INET;
serAdd.sin_addr.s_addr=htonl(INADDR_ANY);
serAdd.sin_port=htons(portNum);
if(bind(server,(const sockaddr *)&serAdd,sizeof(serAdd))==0)
{
cout<<"Binding succed!..."<<endl;
}
else
{
cout<<"Binding failed..."<<endl;
return 0;
}
if(listen(server,1)==0)
{
cout<<"Listening..."<<endl;
}
else
{
cout<<"Listening failed..."<<endl;
return 0;
}
socklen_t size=sizeof(cliAdd);
while(1)
{
if(accept(server,(sockaddr *)&cliAdd,&size)>=0)
cout<<"Connection created!"<<endl;
else
{
cout<<"accept failed..."<<endl;
return 0;
}
}
}
'htonl' erwartet Sie eine ganze Zahl passiert, nicht eine Zeichenfolge - oder ein Zeichen in Ihrem Fall (: http://linux.die.net/man/3/htonl –
finden Sie diese Anleitung nützlich für praktische Zwecke - http://beej.us/guide/bgnet /output/html/singlepage/bgnet.html –