(一)获取
1、当pc发送广播,arm linux收到广播信息时,向客户端发送确认信息
客户端可通过socket取出IP地址
2、当pc机发送请求取得上述信息参数时,执行以下系统调用
system("hostname > hostfile");
system("ifconfig > ipfile");
system("route > gwfile");
并将这些文件读取传送到客户端,即pc3、客户端接收到信息后,将其写到一个文件中4、通过文件的特殊标记定位,就可以取得子网掩码 网关 主机名等信息
(二)设置
1、取得设置的主机名、IP、网关、子网掩码等信息
2、将其格式化如下:
对主机名而言:
(1)单独发送到服务器,服务器程序将其写在一个单独文件中,如:/prog/HOSTNAME
(2)修改/etc/init.d/rcS应项为/bin/hostname -F /prog/HOSTNAME 对其他来说:
(1)格式化信息如下:
假若你输入的IP地址为172.29.26.41 子网掩码为255.255.255.0
/sbin/ifconfig eth0 172.29.26.41 netmask 255.255.255.0
(2)假若你输入的默认网关为172.29.26.1
/sbin/route add default gw 172.29.26.1
3、将其替代rcS中的对应项,然后发送到服务器端
4、重新启动服务器,设置生效//客户端获取
void CWireDialog::OnDownload()
{
/*
向服务器发送获取信息,服务器进行系统调用,将信息写在文件中:ip gw
*/
SOCKET sockfd;
SOCKADDR_IN sin,saUdpServ,saClient;
struct TO_SERVER m_msg;
int nSize,nbSize;
int ncount=0;
char *userinfo;
userinfo = new char[2048];
sockfd=socket(PF_INET,SOCK_DGRAM,0);
sin.sin_family = AF_INET;
sin.sin_port = htons(0);
sin.sin_addr.s_addr=htonl(INADDR_ANY);
if(bind( sockfd, (SOCKADDR *)&sin, sizeof(sin))!=0)
{
AfxMessageBox("不能创建网络接口/n");//初始化失败返回-1
closesocket(sockfd);
return;
}
saUdpServ.sin_family = AF_INET;
saUdpServ.sin_addr.s_addr = inet_addr(curIP);
saUdpServ.sin_port = htons (PORT);//发送用的端口,可以根据需要更改 //
nSize = sizeof ( SOCKADDR_IN );
m_msg.MsgID = ID_GETNETINFO;
sendto ( sockfd,(char*)&m_msg, sizeof(m_msg),0,(SOCKADDR *) &saUdpServ,sizeof ( SOCKADDR_IN ));
nSize = sizeof ( SOCKADDR_IN );
while(1)
{
if((nbSize=recvfrom (sockfd,(char*)&m_msg,sizeof(m_msg),0,(SOCKADDR FAR *) &saClient,&nSiz