为了账号安全,请及时绑定邮箱和手机立即绑定

请教下,我为什么获取客户端ip地址总是:204.204.204.204

请教下,我为什么获取客户端ip地址总是:204.204.204.204

拉莫斯之舞 2023-03-19 19:15:28
源码如下:// 版本:1.0// 日期:2013.7.13// 更改日期:// 功能:基于TCP的Sockets编程// Win32Sock_service.cpp : 定义控制台应用程序的入口点。// #include "stdafx.h"#include <WinSock2.h> //包含头文件#include <stdio.h>#include <Windows.h>#pragma comment(lib, "WS2_32.lib") //显式连接套接字库int _tmain(int argc, _TCHAR* argv[]){WSADATA data; //定义WSADATA结构体对象WORD w = MAKEWORD(2,0); //定义版本号码char sztext[] = "welcome !!\r\n"; //定义并初始化化发送到客户端的字符串数组::WSAStartup(w, &data); //初始化套接字库SOCKET s = NULL,s1 = NULL; //定义连接套接字和数据收发套接字句柄s = ::socket(AF_INET, SOCK_STREAM, 0); //创建TCP套接字sockaddr_in addr,addr2; //定义套接字地址结构int n =sizeof(addr2); //获取套接字地址结构大小addr.sin_family = AF_INET; //初始化地址结构addr.sin_port = htons(1065);addr.sin_addr.S_un.S_addr = INADDR_ANY;::bind(s, (sockaddr*)&addr2,sizeof(addr)); //绑定套接字::listen(s, 5); //监听套接字printf("service is running\r\n");while(true){s1 = ::accept(s, (sockaddr*)&addr2, &n); //接受连接请求if (s1 != NULL){printf("%s have been connect now", inet_ntoa(addr2.sin_addr));::send(s1,sztext, sizeof(sztext), 0); //向客户端发送字符串数组}//定义::closesocket(s); //关闭套接字句柄::closesocket(s1);::WSACleanup(); //释放套接字库if (getchar()){return 0;} else {::Sleep(100);}}}
查看完整描述

2 回答

?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

获取地址可以通过getsockname()函数和getpeername()函数来分别获得调用bind()和connect()后套接字的主机地址和端口号和远端端点地址和端口号。我在使用getpeername时第三个参数没有初始化于是就出现了204.204.204.204。应该是inet_ntop和inet_ntoa在没有数据的情况下给的数吧

查看完整回答
反对 回复 2023-03-22
?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

“bind(s, (sockaddr*)&addr2,sizeof(addr));” 改为“bind(s, (sockaddr*)&addr,sizeof(addr));”即可 。

查看完整回答
反对 回复 2023-03-22
  • 2 回答
  • 0 关注
  • 76 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信