服务器端:
//绑定IP和端口号
SOCKADDR_IN servAddr;
memset(&servAddr, 0, sizeof(servAddr));
servAddr.sin_family = AF_INET;
servAddr.sin_addr.s_addr = htonl(INADDR_ANY);//服务器主机IP
servAddr.sin_port = htons(9110);//端口号
bind(hServSock, (SOCKADDR*)&servAddr, sizeof(servAddr));//绑定套接字与地址
struct sockaddr_in sa;
int len = sizeof(sa);
if (!getsockname(hServSock, (struct sockaddr*)&sa, &len))
{
printf("Client Ip:%s ", inet_ntoa(sa.sin_addr));
printf("Client Port:%d \n\n", ntohs(sa.sin_port));
}
printf("我的IP地址为:%s/n", inet_ntoa(servAddr.sin_addr));
//监听请求
while (1)
{
listen(hServSock, 5);//监听套接字,同时最多五个
//(发现有客户端请求连接)接电话
//对方IP/端口号
std::cout << "监听连接成功" << std::endl;
SOCKADDR_IN clntAddr;
int clntAdrSz = sizeof(clntAddr);
SOCKET hClntSock = accept(hServSock, (SOCKADDR*)&clntAddr, &clntAdrSz);
//打印对方IP
printf("对方IP地址为:%s\n", inet_ntoa(clntAddr.sin_addr));
}
客户端:
//
int main()
{
//初始化winscoket
std::cout << "22岁桀骜小妈" <<std::endl;
WSADATA wsaData;
WSAStartup(MAKEWORD(2, 2), &wsaData);
//创建套接字
SOCKET hClntSOCK= socket(PF_INET, SOCK_STREAM, 0);
SOCKADDR_IN clntAddr;
memset(&clntAddr, 0, sizeof(clntAddr));
clntAddr.sin_family = AF_INET;
clntAddr.sin_addr.s_addr = inet_addr("172.27.237.237");
clntAddr.sin_port = htons(9110);
connect(hClntSOCK, (SOCKADDR*)&clntAddr, sizeof(clntAddr));
std::cout << "请求连接" << std::endl;
while (1);
//结束Winsock Sockets API
WSACleanup();
return 0;
}
本来以为是因为自己ip为0.0.0.0才导致他人无法连接,但在自己主机上却可以运行,实在毫无头绪
求各路大神解惑!ip与连接问题!
回环地址,用于本地访问