connect(SOCKET s, const struct sockaddr *name, int namelen)
请问这个sockaddr如果是localhost的话怎么填写?
s.sin_family = AF_INET;
s.sin_port = htons(2000);
s.sin_addr.s_addr= ??
我用127.0.0.1怎么都连不上,但是如果我用192.168.0.56类似这样的IP就可以连上了。注意,我用192.168.0.56可以连接成功,说明服务器端程序没有问题,本代码中其他
部分也没有问题。我想就是这个s.sin_addr.s_addr=怎么设置的问题。
请问这个sockaddr如果是localhost的话怎么填写?
s.sin_family = AF_INET;
s.sin_port = htons(2000);
s.sin_addr.s_addr= ??
我用127.0.0.1怎么都连不上,但是如果我用192.168.0.56类似这样的IP就可以连上了。注意,我用192.168.0.56可以连接成功,说明服务器端程序没有问题,本代码中其他
部分也没有问题。我想就是这个s.sin_addr.s_addr=怎么设置的问题。
你服务器listen的地址怎么写的呢
我用GetLastError,然后FormatMessage输出得到的消息是:
No connection could be made because the target machine actively refused it.但是换成我内网的ip:192.168.0.56就连接上了...可能是什么原因呢?
s.sin_addr.s_addr = htonl( INADDR_ANY );
or
s.sin_addr.s_addr = 0;不管你用127.0.0.1还是192.168.0.56都可以连的上
再gethostbyname
然后设置这个地址!
or
s.sin_addr.s_addr = 0;尝试过,不行的。服务器可以限制的么?怎么限制阿?
试试这样行不行char lchost[] = "localhost";
hostent* pthh = gethostbyname(lchost);sockaddr_in servaddr;
memcpy(&servaddr.sin_addr , pthh->h_addr , ptrh->h_length );connect(s,(sockaddr*)&servaddr,sizeof(servaddr));
> 得看服务器上是绑定在什么地址上的。能说的详细点么?比如服务器绑定在什么地方就可以,什么地方就不行呢?
s.sin_addr.s_addr = 本机的IP
看你监听的地址是如何写的?推荐你写
SvrListen.sin_addr.s_addr = inet_addr ("0.0.0.0");
这样,无论你写localhost 或者127.0.0.1 ,甚至你上面写的地址,都OK