上次在:http://topic.csdn.net/u/20100604/10/e21d09b0-d7a4-44ab-a104-c0580dcf4345.html?1010384024
发帖(帖以接)。上次没有答案,这次求助上次相同问题,。这再次发帖。
描述:
    我用C# vs2005 做基于 c/s架构的 winform 程序。编写出来的代码是在 win 2003环境下运行。我在win2003服务器上建立一些远程用户,其它电脑可以通过用户名和密码远程连接到win2003这台的服务器上。
当这些远程用户连接到这台win2003服务器上的时候,我想获得他们的IP地址。这样如何获得?这问题我已经问了三遍,希望csdn 里的微软专家可以出来帮助。

解决方案 »

  1.   

    我在win2003服务器上建立一些远程用户,其它电脑可以通过用户名和密码远程连接到win2003这台的服务器上。远程连接是windows提供的远程连接的话,系统日志会记录ip
      

  2.   

    客户端远程连接到你的服务器,是通过操作系统自带的远程连接,还是通过你的c/s架构的程序?
    如果通过你的c/s架构程序,那就好办了呀
    连接时,如果通过udp或tcp连接,会自动将客户端自身ip地址和端口带过来的;
    如果通过其他方式连接,你可以在客户端把自己的ip地址先传给服务器
      

  3.   

    既然是有网络功能需求,为何还用winfomr程序形式,何不做成b/s模式,用网站来展现??
      

  4.   

    当客户到连接到你的服务器上的时候,你应该有与客户端相连的Socket对不对,客户端的IP就在这些Socket中就可以找到了,成员名,好像是叫 RemoteEndPoint
      

  5.   

    其它电脑通过用户名和密码远程连接到win2003这台的服务器上时,把自己的IP报告给服务器
      

  6.   


    Socket newsock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    Socket client = newsock.Accept(); // 当有可用的客户端连接尝试时执行,并返回一个新的socket
    IPEndPoint clientip = (IPEndPoint)client.RemoteEndPoint;
    Console.WriteLine(" connect with client: " + clientip.Address + "  at port: " + clientip.Port);是要这样吗?
      

  7.   

    做的是我的 c/s 程序,我想在远程连接之前获得它的IP.这样就可以优化用户界面。减少用户繁琐的程序
      

  8.   

    如果你的用户是通过Terminal Service连到你的服务器上,然后调用你的WinForm程序。
    那么:用户名: Environment.UserName
    会话ID: Process.GetCurrentProcess().SessionId
    客户IP: 用WTSQuerySessionInformation API,查询WTSClientAddress(或其他信息),最后记得用WTSFreeMemory清场。具体见MSDN WTSQuerySessionInformation Function
      

  9.   


    在 Windows Socket Provider Interface 上面自己加一层过滤规则,踢掉你想踢掉的链接
      

  10.   

    这只是一个简单的问题吧。办法有很多种,端口监听。所有的连接IP都能获到。
    如果是自己写的程序,自己连IP都不知道,估计没啥好说的了。
      

  11.   

    楼主最后回答下远程客户是如何连接到你的win2003服务器的?
    或者说远程客户是通过什么客户端软件连接到你的win2003服务器的?