各位高手,最近我在写一个局域网即时通信软件,要求是(局域网内发送消息和传送文件),从网上看过了一些资料和代码,但是,对于程序启动时,如何用UDP进行广播获取在线用户的IP,和文件发送这两个方面不是很清楚,恳请高手们指点。界面如下链接http://blog.163.com/lizhonglin_2000/editPhoto.do?albumId=-1&photoId=fks_087064081082080075092087085064072087080066083086094071092080]我的QQ是583586123 ,邮箱地址:[email protected].

解决方案 »

  1.   

    个人意见有两种方法:
    1.每个用户上线时,向服务器注册,同时读取在线用户列表
    2.软件需要有握手机制,启动时通过udp发送握手信号,所有运行软件接收握手信号后,发送回复信息,信息中包含用户信息
      

  2.   

    谢谢高手的指点,但是,我想写成不要独立服务器的那种类型,只是把客户机和服务器捆绑在一起。我的想法是,软件启动时,自动获取本机IP地址,向该网段广播消息,所有启动该软件的机器收到消息后获取这台机器的IP地址,将其放入用户列表中,这样做是否正确啊?
      

  3.   

    我以前毕业设计就写这个
    用socket写的,每个客户端都有一个serversocket和clenitsocket
      

  4.   

    那就采用第二种建议啊,软件启动后,通过udp发送握手报文,报文中包含自身IP和用户信息,接收到握手报文的用户,也发送握手报文,报文中同样包括IP和用户信息,就可以实现你的要求了
      

  5.   

    melon 的建议很不错哦,顶了,我又有了新的问题了,就是,我做的时候采用TCP的多线程(服务端一个线程,客户端一个线程,阻塞式的),但是接受消息的时候,要等上20秒钟,郁闷了,如何才能加快接收的速度呢,还是改用UDP的呢
      

  6.   

    不知道你用TCP具体是怎么实现的,每个客户端都有server和client?那运行时连接自身?怎么向外发消息啊?网段内的IP都尝试发送一次?
    没这样实现过,不是很清楚,说说你的实现方法,或许大家能提出点建议
      

  7.   

    是的,每个客户端都有server和client,首先设置服务端和服务器的端口(保持一致),激活服务器,
    然后再设置对方主机的IP地址,创建一个ClientSend线程用来把从文字输入框中获取的信息发送到对方(IP地址)对应的服务器中,对方的服务器就接收消息,大体是这样的
    现在我要实现的就是,通过A机获取本机地址,(UDP)然后广播到A机所在的网段中,如果B机收到A机发来的IP地址,那么就存入IP列表(Listbox)中,每隔3秒广播一次,Listbox中每隔10秒清空一次,更新在线用户在线列表,当点击列表中的某个IP就将对方主机的IP地址(RemoteHost)设置成所选取的IP地址,这样就可以发送消息了。
    关键的是,目前的用TCP 多线程(服务端一个线程,客户端一个线程,阻塞式的)实现的这个东西在局域网中接收消息时,慢得要死,要20秒,所以,恳请各路高手指点迷津。
      

  8.   

    使用IP*Works吧,他会让你从烦琐的握手机制中解脱出来的
      

  9.   


    可以,但是建议楼主在通讯的时候采用TCP的方式!因为之前我写的一个类似的程式,采用的是UDP的方式!发送检测好友是否在线的消息,但是返回的结果有时候会不正确,尤其是当端口号被别的程序占用之后!
    也可能是我的程式问题!呵呵!
    不过我改成TCP的方式之后,一切OK!
      

  10.   

    用INDYServer组件吧,那个好像是阻塞多线程的
      

  11.   

    我刚刚写了个QQ类通讯软件,上线通过UDP广播和向服务器注册相结合的方式实现,下线通过ondisconnected事件实现,效果还不错
      

  12.   

    因为UDP广播不能广播到不同的网络里,所以不同的网络只能通过向服务器注册IP地址的方式实现