已知局域网内机子的ip地址,有没有办法向此机子发送数据?
我有一个服务器,有对外ip,但为了减少服务器负担,不能让客户始终连接服务器,
所以希望能实现在需要连接客户的时候能够激活客户端使之连接服务器,可否有办法实现?请高手指点。谢谢了先!

解决方案 »

  1.   

    dos窗口net send <receive pc IP> <message>
      

  2.   

    只发送数据可以使用:
    net send <ip address or hostname> <message>
    用socket编程,不想连接的时候关闭端口不就行了。
      

  3.   

    可以用UDP嘛!
    也就是用SOCK_DGRAM,而不用SOCK_STREAM
      

  4.   

    net send ip ro hostname message
      

  5.   

    这是在本地实现UDP,客户端发送数据,服务器端接收。因为没有网络环境所以没进行两机通讯实验。
    小弟刚学,比较菜,大家别笑。
    这是客户端
    m_sockSend.Create(6800,SOCK_DGRAM,NULL);
    m_sockSend.Bind(6800,"127.0.0.1");
             UpdateData(true);
    char szSend[100];
    strcpy(szSend, m_szSend);
    int iSend= m_sockSend.SendTo(szSend, sizeof(szSend), 6801, "172.16.10.16", 0);这是服务器端 m_sockRecv.Create(6801,SOCK_DGRAM,"127.0.0.1");
    m_sockRecv.Bind(6801,"127.0.0.1");
    SetTimer(1,3000,NULL);
    AfxBeginThread(Thread, (LPVOID)this);
    UpdateData(FALSE);
    CDialog::OnTimer(nIDEvent);
    UINT Thread( LPVOID pW );//线程
    UINT Thread( LPVOID pW )
    {
    CServerDlg *p = (CServerDlg*) pW;
    char szRecv[20];
    CString szIP("127.0.0.1");
    UINT uPort=6800;
    int iRecv = p->m_sockRecv.ReceiveFrom(szRecv,10,szIP,uPort,0);
    if(iRecv == 0)
    {
    return 0;
    }
    TRACE("received %d byte\n",iRecv);
    szRecv[iRecv]='\0';
    p->m_szRecv=szRecv;
    return 0;
    }
      

  6.   

    忘了改了,客户端int iSend= m_sockSend.SendTo(szSend, sizeof(szSend), 6801, "172.16.10.16", 0);IP应为"127.0.0.1"小弟刚学,不要笑我:)
      

  7.   

    system( " net send ip or hostname message " );
      

  8.   

    关于udp,我看了一点,但我始终没有搞懂,
    socket绑定的ip地址到底是什么?自己的ip?
    如果局域网内的ip是192.168.0.25,
    对外ip为61.129.9.x,服务器ip为61.235.6.x,
    假设服务器首先发送数据,
    则bind时候的ip是多少?发送的ip是多少?
    是否客户端需要写一个loop来接收?
    我这里条件不好,不是很好测试,所以想直接问一下。
    我看网络编程才几天,如果问得很弱智,请不要笑我。
    多播的时候也要绑定到一个ip上,这个ip到底是什么ip?
    我反复看了几遍,就是没看懂,还望各位大侠教我,谢谢了先!
      

  9.   

    另外说什么多播要以来一个d类的ip地址,我的ip明明是c类的,怎么加入多播组呢?难道可以乱写一个d类的ip么?
      

  10.   

    tcp/ip协议没怎么学过,呵呵,不好意思,这两天有点忙,所以很少上网,回得慢了点,希望大家见谅,回得好的,我可以送分,我现在还有3000多分,应该还是送得起一些吧?,qq14773900,如果有人有很好的代码可以给我直接发信息,谢谢(socket最好是不用mfc写的,呵呵)。
      

  11.   

    在客户端系统中做一个 Listen 的 Socket  服务器知道IP的当服务器可以连接了则先向客户端做一个连接,发送你可以连接了消息,收到客户确认后关闭连接客户Listen收到服务器发来的可以连接消息,则启动客户连接,连到服务器提供服务的端口这样应没有问题吧
      

  12.   

    在局域网中listen好象没什么作用吧?
      

  13.   

    自己测试了一下,广播数据很简单。但还是没搞懂多播,有人可以回一下吗?如果把udp绑定到完成端口上?怎么绑定?它没有listen和accept。
      

  14.   

    我建议你去问 bind 他做这个太狠了参看:http://expert.csdn.net/Expert/topic/1172/1172287.xml?temp=2.117336E-03
      

  15.   

    http://expert.csdn.net/Expert/topic/1172/1172442.xml?temp=.3255579在你的程序里  
    加一个 connect  连到对方,发一个我准备好了,放马过来,就关了自己  当然,这时也要做好一个 listen 在指定的端口等好,要不别人放马过来就....
    准备好了,在指定的端口启动 listen启动成功  --》 使用 connect 到对方,发送来连我吧消息,确认收到就退出同一个 SOCKET 这样做就不好了!如果消息发过去,对方来连,可是这边还设有启动 SOCKET 怎办?你想错了, connect 中指出的端的口是要连接到对方机器的端口,不是本机使用的,也就是说: 例如  IE  你开了很多连到同一个服务器,则你要指出对方机器的 80 端口,本地的端口就不会是 多个 IE 使用同一个了
    这样吧看下图客户机    使用端口  服务器            使用端口
                     listen 80 在 80端口监听  80connect 80   ???
    connect 80   ???
    connect 80   ???
    connect 80   ???
    现在清楚一点了吗?
    只有服务器上监听时是占用了 80 端口,客户端连接到80端口,它自己并不一定也是使用 80 端口,可能是别的端口