导航
  • 主页
  • Windows SDK/API
  • 基础类
  • ActiveX
  • 数据库及相关技术
  • 网络及通讯开发
  • VCL组件使用和开发
  • 问答

怎样合法性检查用户的输入是ip地址

mikesome 2002-07-20 09:47:35
用什么控件好,普通的edit还是maskedit还是其他
...全文
31 点赞 收藏 11
写回复
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
kingcaiyao 2002-07-20
那你可以这样:
void __fastcall TEdit1:Edit1KeyDown(TObject *Sender,TShiftState ShiftState,WORD &Key)
{
if(Key==13)
{
AnsiString Str=Edit1->Text.Trim();
AnsiString Sub;
int iCount=0;
for(int i=1;i<=Str.Length();i++)
{
Sub=Str.SubString(i,1);
if(Sub.c_str()[0]>'9' || Sub.c_str()[0]<'0')
{
if(Sub.c_str()[0]!='.')
{
ShowMessage("The ip address you typed is not valid");
break;
}
}
if(Sub.c_str()[0]=='.')
{
iCount++;
}
}
if(iCount!=3)
{
ShowMessage("The ip address you typed is not valid");
break;
}
}
}
其实你用WinSock函数还简单些。


回复
mme 2002-07-20
用 kingcaiyao(AKing) 的这一句就够了int addr=inet_addr(AddrString.c_str());
回复
mikesome 2002-07-20
我不知道怎么判断会比较简练一点
回复
mikesome 2002-07-20
kingcaiyao(AKing)我需要的可能还不用这么复杂
我只想合法性检查用户输入的一个字符串是不是合法的ip地址
这个ip地址的机器可以不存在的
回复
hlmsoft 2002-07-20
用maskedit
回复
kingcaiyao 2002-07-20
如果线粹用代码来判断可以这样写:
.cpp File
char Error[256];
WSADATA WSAData;
memset(&WSAData,0,sizeof(WSADATA));
Word Version=MAKEWORD(2,0);
int res=WSAStartup(Version,&WSAData);
if(res!=0)
{
sprintf(Error,"Failed to initialize WinSock,ErrorCode:",WSAGetLastError());
Application->MessageBox(Error,"Error",MB_OK+MB_ICONERROR);
return -1;
}
for(int i=1;i<=AddrString.Length();i++)
{
if(AddrString.SubString(i,1)==" ")
{
AddrString.Delete(i,1);
}
}
int addr=inet_addr(AddrString.c_str());
if(addr==INADDR_NONE)
{
hostent *he=gethostbyname(AddrString.c_str());
if(he)
{
memcpy(&addr,he->h_addr_list[0],sizeof(int));
//ShowMessage(addr);
}
else
{
return -1;
}
}
WSACleanup();
return addr;
回复
kingcaiyao 2002-07-20
用maskEdit比较好,但合法性需要代码来实现,就用WinSock中的一些函数吧。
回复
RockyZou 2002-07-20
都可以,不过还是要自己去判断是否合法
回复
mikesome 2002-07-20
up
回复
mikesome 2002-07-20
VS什么东西
回复
zheng_can 2002-07-20
没有 IP地址控件 吗
我知道 VS 里面就有
回复
发动态
发帖子
C++ Builder
创建于2007-08-02

1.3w+

社区成员

C++ Builder相关内容讨论区
申请成为版主
社区公告
暂无公告