5171|16

91

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

soket编程修改网关参数 [复制链接]

各位DX,请问怎么通过soket编程来修改网关的参数?
是这样的,我的是wince5.0或4.2的系统,想通过soket来修改IP,网关等参数,该如何实现?读网关的要用到哪些API?在网上找了好久没找到,谢谢!

最新回复

恩,基本功能搞定了,谢谢各位  详情 回复 发表于 2008-9-20 10:45
点赞 关注

回复
举报

64

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
这个是通过socket能修改的吗?
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
这个通过socket是修改不了的,这些参数都记录在注册表中,所以主要是修改注册表,如果你知道你的网卡参数记录在哪个注册表可以直接修改
也可以通过NDIS函数修改
NdisOpenConfiguration
NdisReadConfiguration
NdisReadNetworkAddress
NdisWriteConfiguration 等等
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

4
 
楼上两位能否详细一点,我情况是这样的,系统起来后是没有接屏,在这种情况下想修改IP和网关等参数.谢谢
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

5
 
修改注册表吧. 但是好像不能实时生效
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

6
 
不能实时生效是什么意思?还有没有屏怎么修改注册表?
现在就是想通过写两个程序,一个放在板子上,一个在PC上,通过在PC上的程序来调用板子上的来修改,
有谁做过这样的程序,或者有没sample code,给个参考一下,谢谢
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

7
 
自己再顶一下,希望高手指点!
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

8
 
没有屏是什么意思? 是想在系统起来之前修改? 还是系统起来之后?

系统起来后,跟接不接屏什么关系? 只要你的程序运行 就可以修改了啊.程序里修改注册表不可以吗?
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

9
 
谢谢楼上的,我知道程序里可以修改,但我修改的IP和网关不是固定的,就是要给客户根据自己需要来修改,但只有板子没有屏,现在是想通过socket让PC和板子通讯,再通过它来修改注册表,这样把自己要修改的内容通过PC传到板子让它修改,请问各位有没做过这样的程序?谢谢
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

10
 
我现在有个PPC上的程序想转到win32上来,请问怎么转?
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

11
 
你应该在要修改网关的机器上部署一个用来接收socket信息/分析socket信息,提取要修改的网关参数/修改注册表/重启机器的程序。
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

12
 
引用 8 楼 xyj0663 的回复:
谢谢楼上的,我知道程序里可以修改,但我修改的IP和网关不是固定的,就是要给客户根据自己需要来修改,但只有板子没有屏,现在是想通过socket让PC和板子通讯,再通过它来修改注册表,这样把自己要修改的内容通过PC传到板子让它修改,请问各位有没做过这样的程序?谢谢


通过socket ,在板子端写一个客户端,让它来完成IP和网关的修改
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

13
 
只要可以通过代码修改IP和网关,客户端在接收到IP和网关后就可以完成修改工作。

socket只是完成通讯,和IP与网关没有关系。
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

14
 
谢谢各位,就是通过socket来修改,现在的程序是板子上的发到PC上的能收到,但PC发给板子的就收不到,但PC发给自己能收到,就是127.0.0.1的时候有反应,可能是板子上接收程序的问题,下面附带一下接收的程序,各位帮我看一下怎么收不到,谢谢
DWORD CUDPDlg::UdpRecvThread(LPVOID lparam)
{
        fd_set fdRead;
        TIMEVAL aTime;
    aTime.tv_sec=1;
        aTime.tv_usec=0;
        SOCKADDR_IN tmpAddr;
        int iErrorCode;
        int ret;
        //CUDPDlg *pDlg=(CUDPDlg *)lparam;
        CUDPDlg *pDlg=(CUDPDlg *)lparam;
        while(TRUE)
        {
                if(WaitForSingleObject(pDlg->m_ExitThreadEvent,0)==WAIT_OBJECT_0)
                        break;
                FD_ZERO(&fdRead);
                FD_SET(pDlg->m_UDPSocket,&fdRead);
                ret=select(0,&fdRead,NULL,NULL,&aTime);
                if(ret==SOCKET_ERROR)
                {
            iErrorCode=WSAGetLastError();
            pDlg->OnUdpError(pDlg,iErrorCode);
            break;
         }
                if(ret>0)
                {
                        if(FD_ISSET(pDlg->m_UDPSocket,&fdRead))
                        {//检查该Socket是否是fdRead中的一员
             tmpAddr.sin_family=AF_INET;
             tmpAddr.sin_port=htons(pDlg->m_RemoteAddr.sin_port);
             tmpAddr.sin_addr.S_un.S_addr=INADDR_ANY;

                         char *recvBuf=new char[1024];
                         int tmpRecvLen=sizeof(tmpAddr);
             int recvlen=recvfrom(pDlg->m_UDPSocket,recvBuf,1024,0,(SOCKADDR*)&tmpAddr,&tmpRecvLen);
                         if((recvlen==SOCKET_ERROR)||recvlen==0)
                         {
                                 iErrorCode=WSAGetLastError();
                 pDlg->OnUdpError(pDlg,iErrorCode);
                                 delete[] recvBuf;
                 break;
                         }
                         else
                         {
                                 pDlg->OnUdpRecv(pDlg,recvBuf,recvlen);
                                 delete[]recvBuf;
                         }
            }//
         }//
      }//
        return 0;
}
void CALLBACK  CUDPDlg::OnUdpRecv(CWnd * pWnd,char *buf,int buflen)
{
        //CString str=(CString)(char*)lParam;
        CString strTmp;
    CUDPDlg *pDlg=(CUDPDlg *)pWnd;
    CEdit* pRecv=(CEdit*)pDlg->GetDlgItem(IDC_EDIT_RECV);
        for(int i=0;i         {
                strTmp.Format(_T("%c"),*buf);
        pDlg->m_strRecDisp+=strTmp;
                buf++;
        }
    pRecv->SetWindowTextW(pDlg->m_strRecDisp);/*在窗口显示出来*/
       
}
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

15
 
各位,我现在想把接收到的IP,网关,子网等(放在char recvBuf[20]数组里)写到注册表里去,但现在的问题是有时可以有时不可以,出现乱码等,怀疑是写进去前没有把原来的键值清空,但RegDeleteValue后还是不行,各位帮我看一下,谢谢!
int   nLen   =   strlen(recvBuf) + 1;   
        int   nwLen   =   MultiByteToWideChar(CP_ACP,0,recvBuf, nLen, NULL,0);   
   
        WCHAR   mszIPAddress[50];
        MultiByteToWideChar(CP_ACP, 0,recvBuf, nLen, mszIPAddress, nwLen);//char to wchar

                HKEY hKey;
                DWORD dwDisposition;
               
                if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,_T("Comm\\CS89001 \\Parms\\TcpIp"),0,KEY_WRITE,&hKey) != ERROR_SUCCESS)   
                AfxMessageBox(_T("error"));
int   nIP   =   sizeof(mszIPAddress);
if(mszIPAddress[0]=='G')//输入的是G192.168.0.1表示网关,
                {
    long ret=RegDeleteValue(hKey,_T("Comm\\CS89001\\Parms\\TcpIp\\DefaultGateway"));//删除原来的键值
                        if(ret == ERROR_SUCCESS)
                        {
                                AfxMessageBox(_T("can not delete"));
                        }
                        for(int i=0;i                         {
                                pGateway=mszIPAddress[i+1];
                                if(mszIPAddress[i+1]=='\0')
                                {   pGateway='\0';
                                        break;
                                }
                        }
                        int j=0;
                        for(int i=0;i                         {
                                if(pGateway!='\0')
                                        j+=2;
                                else
                                        break;

                        }
                RegCreateKeyEx(HKEY_LOCAL_MACHINE, _T("Comm\\CS89001\\Parms\\TcpIp"),0,NULL,
                        REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hKey,&dwDisposition);
               
               if(RegSetValueEx(hKey,TEXT("DefaultGateway"),0,REG_MULTI_SZ,(const unsigned char*)pGateway,j) != ERROR_SUCCESS)//写入网关
                        {
                                AfxMessageBox(_T("error"));
                        }
}
大家请帮帮忙,搞了几天了,还有问题,谢谢!
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

16
 
你应该先把收到的字符串打印出来,看是接收的问题,还是写注册表的问题。
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

17
 
恩,基本功能搞定了,谢谢各位
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表