我的java程序要充当客户端,通过udp协议向服务器发送简单数据。由于我以前一直用tcp协议,所以有一些重要问题需要请教大家:
1.我看到一些例子上,建立客户端的DatagramSocket时候,也传递了一个int作为端口号参数,即:
    DatagramSocket ds = new DatagramSocket(1000);
  它是客户端,传递一个端口号有什么含义没有?抑或是别人的一种错误的操作?2.作为客户端,我每次只需要向服务器提交约1k左右的包,但是提交得非常频繁,我现在是每次建立一个DatagramSocket,发送一次后就close。我想这样的效率应该是比较低的。可以像tcp编程一样,我和服务器建立一个连接,然后总在这个连接上发包吗?如果不能,有什么办法避免这样非常频繁的建立DatagramSocket然后关闭DatagramSocket所需要的消耗吗?

解决方案 »

  1.   

    服务器的端口我当然知道,那是在数据包里面指定的呀。请大家谈谈我提到的几个问题。tks
      

  2.   

    tcp是建立可靠连接,服务端与客户端保证在某一端口的连接.upd是不可靠连接.发送方有数据时,将数据包根据某一端口发送到某一IP.接收方随时侦听该端口,如果有数据包到就收下.如果没有指定端口的话,谁知道这个数据包是80,还是23端口上的
      

  3.   

    客户端的DatagramSocket创建时不用指定服务器端口
    你在创建DatagramPacket的时候,已经指定了。这是UDP和TCP的区别。你看错了例子,或者本身例子就是错的
      

  4.   

    2.作为客户端,我每次只需要向服务器提交约1k左右的包,但是提交得非常频繁,我现在是每次建立一个DatagramSocket,发送一次后就close。我想这样的效率应该是比较低的。可以像tcp编程一样,我和服务器建立一个连接,然后总在这个连接上发包吗?如果不能,有什么办法避免这样非常频繁的建立DatagramSocket然后关闭DatagramSocket所需要的消耗吗?没有必要每次把DatagramSocket close掉。你可以老是用它。
      

  5.   

    "没有必要每次把DatagramSocket close掉。你可以老是用它。"
    谢谢你的回答。但是:
    如果老是用它,它是否也会和tcp连接一样,会意外地关闭或其它异常呢?就是说,怎样知道这个DatagramSocket是可用的呢?
      

  6.   

    DatagramSocket不会的关闭的!一旦创建,永远可用,除非网络断了