如何判断输入的是域名还是ip?附代码,谢谢。

genliter 2005-11-09 04:59:18
给socketconnection赋值连接地址,有address和host两项,要求给输入一个字符串后,判断是域名或是ip后,正确赋值给上面两个参数。
我写过一断,但是总不能正常。指教啊。
void __fastcall TForm1::Button1Click(TObject *Sender)
{
char *p=Edit1->Text.c_str();
bool switcher=true;

for(iint i=0,j=Edit1->Text.Length();;i<j;i++)
{

if((p[i]<48||p[i]>57)&&p[i]!='.')
{Memo1->Lines->Add("a character found in the string.it is "+AnsiString(p[i]));
switcher=false;
free (p);}
else
{ Memo1->Lines->Add("number found in this round.it is "+AnsiString(*p++));}
}
}
...全文
951 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
genliter 2005-11-09
  • 打赏
  • 举报
回复
thanks so much. I have completed the task,and now I will be studying what you ve post. I pay now. ^_^。thanks to all the people above.
shadowstar 2005-11-09
  • 打赏
  • 举报
回复

Platform SDK: Windows Sockets 2
inet_addr
The inet_addr function converts a string containing an (Ipv4) Internet Protocol dotted address into a proper address for the IN_ADDR structure.

unsigned long inet_addr(
const char* cp
);

Parameters
cp
[in] Null-terminated character string representing a number expressed in the Internet standard ".'' (dotted) notation.
Return Values
If no error occurs, inet_addr returns an unsigned long value containing a suitable binary representation of the Internet address given. If the string in the cp parameter does not contain a legitimate Internet address, for example if a portion of an "a.b.c.d" address exceeds 255, then inet_addr returns the value INADDR_NONE.
Remarks
The inet_addr function interprets the character string specified by the cp parameter. This string represents a numeric Internet address expressed in the Internet standard ".'' notation. The value returned is a number suitable for use as an Internet address. All Internet addresses are returned in IP's network order (bytes ordered from left to right). If you pass in " " (a space) to the inet_addr function, inet_addr returns zero.

Internet Addresses

Values specified using the ".'' notation take one of the following forms:

a.b.c.d a.b.c a.b a

When four parts are specified, each is interpreted as a byte of data and assigned, from left to right, to the 4 bytes of an Internet address. When an Internet address is viewed as a 32-bit integer quantity on the Intel architecture, the bytes referred to above appear as "d.c.b.a''. That is, the bytes on an Intel processor are ordered from right to left.

The parts that make up an address in "." notation can be decimal, octal or hexadecimal as specified in the C language. Numbers that start with "0x" or "0X" imply hexadecimal. Numbers that start with "0" imply octal. All other numbers are interpreted as decimal.

Internet address value Meaning
"4.3.2.16" Decimal
"004.003.002.020" Octal
"0x4.0x3.0x2.0x10" Hexadecimal
"4.003.002.0x10" Mix


Note The following notations are only used by Berkeley, and nowhere else on the Internet. For compatibility with their software, they are supported as specified.

When a three-part address is specified, the last part is interpreted as a 16-bit quantity and placed in the right-most 2 bytes of the network address. This makes the three-part address format convenient for specifying Class B network addresses as "128.net.host''

When a two-part address is specified, the last part is interpreted as a 24-bit quantity and placed in the right-most 3 bytes of the network address. This makes the two-part address format convenient for specifying Class A network addresses as "net.host''.

When only one part is given, the value is stored directly in the network address without any byte rearrangement.


Requirements
Client: Included in Windows XP, Windows 2000 Professional, Windows NT Workstation, Windows Me, Windows 98, and Windows 95.
Server: Included in Windows Server 2003, Windows 2000 Server, and Windows NT Server.
Header: Declared in Winsock2.h.
Library: Use Ws2_32.lib.


See Also
Windows Sockets API Reference, Windows Sockets Functions, inet_ntoa

Platform SDK Release: February 2003 What did you think of this topic?
Order a Platform SDK CD



Requirements
Client: Included in Windows XP, Windows 2000 Professional, Windows NT Workstation, Windows Me, Windows 98, and Windows 95.
Server: Included in Windows Server 2003, Windows 2000 Server, and Windows NT Server.
Header: Declared in Winsock2.h.
Library: Use Ws2_32.lib.

See Also
Windows Sockets API Reference, Windows Sockets Functions, inet_ntoa
shadowstar 2005-11-09
  • 打赏
  • 举报
回复
不好意思,代码没测试过,只提供思路。

那就这样嘛,呵呵:

#include <winsock2.h>

bool IsIP(const char* cp)
{
return inet_addr(cp) != INADDR_NONE;
}
genliter 2005-11-09
  • 打赏
  • 举报
回复
isip到事?自己写的isip?
inet_addr底是不是库函数?不能直接调用啊。
我试了一下,好像只有是域名的时候inet_addr才会返回-1,否则就是一个整数。
比如12.3 返回整数
123.5.6返回整数,
12net.com返回-1,好像出现字母就是-1,虽然可以达到目的了,但是想知道到底怎么用。
constantine 2005-11-09
  • 打赏
  • 举报
回复
indy也提供了isip函数,不用写直接调用
我delphi的我就不贴了,你看看上面牛人门的函数就可以了
ccrun.com 2005-11-09
  • 打赏
  • 举报
回复

#include <winsock.hpp>
// 测试一个字符串是否为合法IP,如192.168.0.1

bool IsIPString(char *lpText)
{
WORD wVersionRequested;
WSADATA wsaData;
int nAddr;
bool bSuccess(false);
wVersionRequested = MAKEWORD(2, 0);
int nErrorNum = WSAStartup(wVersionRequested, &wsaData);
if(nErrorNum != 0)
{
ShowMessage("Error! WSAStartup failed!\n");
return "";
}
try
{
nAddr = inet_addr(lpText);
bSuccess = true;
}
catch(...)
{
}
WSACleanup();
return bSuccess && nAddr != -1;
}
我不懂电脑 2005-11-09
  • 打赏
  • 举报
回复
基本思路就是用.做标志提取出分隔的字符串,然后判断是不是整数,是整数就是ip
shadowstar 2005-11-09
  • 打赏
  • 举报
回复
#include <winsock2.h>

bool IsIP(const char* cp)
{
return inet_addr(cp);
}

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧