datagramconnection没指定ip地此,只指定了port,他是怎么作通信的?

jinkaoyan 2003-08-21 10:06:28
DatagramConnection作UDP通信,我的example里面,只指定了port号码,就开始发信息了,那要是两台手机打开同一个port,岂不是会混肴.难道j2me里没有象internet上的PC那样有一个唯一的IP,来最为联结的依据吗?
各位做过手机UDP通信的谈谈做j2me网络编程的感想好吗?
...全文
73 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
ludf 2003-08-22
  • 打赏
  • 举报
回复
这是java数据报通信的一些基础知识,希望对你有点启示!另外,你为什么不用http呢?

用户数据协议UDP是一个无连接的、发送独立数据包的协议,它无需建立、拆除连接,而是直接将信息大包传到指定的目的地,不能保证数据按顺序传送和正确达到。但使用简单,占系统资源少,适合于断续、非实时的通信。
数据报是一种无连接的通信方式,它的速度比较快,但是由于不建立连接,不能保证所有数据都能送到目的地。所以一般用于传送非关键性的数据。发送和接收数据报需要使用Java类库中的DatagramPacket类和DatagramSocket类,下面将详细介绍。

1. DatagramPacket类
(代表一个UDP数据报),进行数据报通信的基本单位,DatagramPacket类的构造方法有两种。
DatagramPacket(byte ibuf[] int ilength) : 用来创建接收数据报的对象,其中字节数组ibuf[]用来接收数据报的数据,ilength指明所要接收的数据报的长度。
DatagramPacket(byte ibuf[], int ilength, InetAddress iaddr , int iport) :用来创建发送数据报給远程节点的对象,其中字节数组ibuf[]存放 要发送的编码后的报文, ilength指明字节数组的长度,iaddr指明所要发送的数据报的目的地(即:接收者的IP地址,iport指明数据报发送到目标主机的哪个端口)

获取数据--获取接收报中的信息
public InetAddress getAddress()
public byte[] getData()
public int getLength()
public int getOffset()
public int getPort()
设置数据--设置发送报中的信息
setAddress(InetAddress iaddr)、setPort(int iport)、setData(byte[] buf)、setData(byte[] buf, int offset, int length)、 setLength(int length)

2. DatagramSocket类
用于创建接收或发送数据报的Socket实例,它的构造方法有三种。
DatagramSocket() :用于创建一个数据报Socket对象。这是个比较特殊的用法,通常用于客户端编程,它并没有特定监听的端口,仅仅使用一个临时的。 //构造一个用于发送的DatagramSocket类
DatagramSocket(int port): 在指定的端口处创建一个数据报Socket对象。创建实例,并固定监听Port端口的报文。// 构造一个用于接收的DatagramSocket类

DatagramSocket(int port ,InetAddress localAddr): 用于在多个IP地址的主机上创建数据报Socket对象,其中loaclAddr指明使用哪个IP地址。
以上三个构造函数都会抛出SocketException,程序中需要捕获处理,用来控制创建DatagramSocket类对象时可能产生的异常情况

最主要的方法--发送与接收数据报
public void receive(DatagramPacket p)
public void send(DatagramPacket p)
这两个方法都将抛出例外IOException,程序中需要捕获处理。
其他方法
public void connect(InetAddress address, int port):与指定的机器通信
public void disconnect():关闭与指定机器的连接
public void close():关闭Socket


3. 发送和接收过程
发送数据报,需要在接收端先建立一个接收的DatagramSocket,在指定端口上监听,构造一个DatagramPacket类指定接收的缓冲区(DatagramSocket的监听将阻塞线程)。在发送端需要首先构造DatagramPacket类,指定要发送的数据、数据长度、接收主机地址及端口号,然后使用DatagramSocket类来发送数据报。接收端接收到后,将数据保存到缓冲区,发送方的主机地址和端口号一并保存。随后将接收到的数据报返回给发送方,并附上接收缓冲区地址,缓冲长度、发送方地址和端口号等信息,等待新的数据。

good luck

Mars_lee 2003-08-22
  • 打赏
  • 举报
回复
A datagram connection for accepting datagrams
datagram://:1234

A datagram connection for sending to a server:
datagram://123.456.789.12:1234

So, you MUST claim a host or ip

good luck!

13,100

社区成员

发帖
与我相关
我的任务
社区描述
Java J2ME
社区管理员
  • J2ME社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧