JAVA UDP聊天程序问题 给100分!

JAVA UDP聊天程序问题 给100分!,第1张

public void run() /* 用于被调用的接口run方法 */

{

while (true)

{

try

{

byte[] buf = new byte[1024]/* 接收端程序,设置BUF数组长度为1024位 */

DatagramPacket dp = new DatagramPacket(buf, buf.length)/* 创建接收数据报的实例 */

ds.receive(dp)

lst.add("他说:" + new String(buf), 0)

} catch (IOException ex)

{

}

}

}

======================

线程的run方法改成上面这样就可以了,原因是因为接收端每次循环都是使用的同一个buf,而buf没有清空,所以导致每次接收都只更新前面一小段信息,后面的信息没有改变。

使用DatagramSocket和DatagramPacket

其中DatagramSocket使用一个发送的端口

DatagramPacket的参数

DatagramPacket(bytes[] bytes,int bytes[].length,InetAddress ip, int port)里的port就是目标端口

要向两个端口号发送,需要创建两个DatagramPacket,分别填写两个IP地址和端口号,并用DatagramSocket发送。

另外两个端口需要做监听

要注意ip要为局域网可以畅通无阻,广域网可能导致网管阻止

下面是个例子,发两遍即可。

int SERVER_PORT=7000

String severIp="192.168.1.100"

DatagramSocket clientSocket

try

{

InetAddress local = InetAddress.getByName(severIp)

DatagramPacket dPacket

clientSocket = new DatagramSocket

dPacket = new DatagramPacket("Hello".getBytes("utf-8"),"Hello".getBytes("utf-8").length,

local, SERVER_PORT)

clientSocket.send(dPacket)//这里是发送

byte[] msg = new byte[11246]

DatagramPacket rPacket = new DatagramPacket(msg, msg.length)

clientSocket.receive(rPacket)//这里是接收监听

}

catch (IOException e)

{

e.printStackTrace()

}

clientSocket.close()


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7843586.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-10
下一篇2023-04-10

发表评论

登录后才能评论

评论列表(0条)

    保存