黑马程序员技术交流社区
标题:
使用UDP写一个聊天工具的小疑问!
[打印本页]
作者:
吴华二
时间:
2012-3-27 00:56
标题:
使用UDP写一个聊天工具的小疑问!
import java.net.*;
import java.io.*;
class Send implements Runnable
{
private DatagramSocket ds;
public Send(DatagramSocket ds){
this.ds = ds;
}
public void run(){
try
{
BufferedReader br = new BufferedReader( new InputStreamReader(System.in));
String line = null;
while((line = br.readLine())!=null){
if("886".equals(line))
break;
byte[] buf =line.getBytes();
DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.255"),10002);
ds.send(dp);
}
}
catch (Exception e)
{
throw new RuntimeException("发送端出错!");
}
}
}
class Rece implements Runnable
{
private DatagramSocket ds;
public Rece(DatagramSocket ds){
this.ds = ds;
}
public void run(){
try
{
while(true){
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf,buf.length);
ds.receive(dp);
String ip = dp.getAddress().getHostAddress();
//System.out.println(ip);
String data = new String(dp.getData(),0,dp.getLength());
System.out.println(ip+":"+data);
}
}
catch (Exception e)
{
throw new RuntimeException("接收端出错!");
}
}
}
class ChatDemo
{
public static void main(String[] args) throws Exception
{
DatagramSocket sendSocket = new DatagramSocket();
DatagramSocket receSocket = new DatagramSocket(10002);
new Thread(new Send(sendSocket)).start();
new Thread(new Rece(receSocket)).start();
}
}
通过学习了UDP,写出一个dos下面的一个聊天工具,用两台机子测试正确。在理解那个 DatagramPacket时候有点晕了,有朋友能帮忙说一下这里的原理吗?谢谢...
作者:
王国华
时间:
2012-3-27 09:18
Udp的数据是通过包的形式发送的
而DatagramPacket就是将数据封包的java类
作者:
杨波
时间:
2012-3-27 09:47
udp是面向无连接的,数据是以数据包来传输的,每一个数据包都可以独立的到达目的地,所以传输端数据包要包含传输的数据,目的地址以及端口号,java为这个数据包
提供了一个专门的类,就是DatagramPacket,相当于邮局的包裹。
作者:
〆_xin_、_跳
时间:
2012-3-27 10:20
UDP协议的全称是用户数据包协议,在网络中它与TCP协议一样用于处理。UDP数据包,是一种无连接的协议。在OSI模型中,在第四层——传输层,处于IP协议的上一层。UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。UDP用来支持那些需要在计算机之间传输数据的网络应用。UDP协议的主要作用是将网络数据流量压缩成数据包的形式。一个典型的数据包就是一个二进制数据的传输单位。每一个数据包的前8个字节用来包含报头信息,剩余字节则用来包含具体的传输数据。
作者:
李彬彬
时间:
2012-3-27 11:06
与TCP协议发送和接收字节流不同,UDP终端交换的是一种称为数据报文的自包含(self-contained)信息。这种信息在Java中表示为DatagramPacket类的实例。发送信息时,Java程序创建一个包含了待发送信息的DatagramPacket实例,并将其作为参数传递给DatagramSocket类的send()方法。接收信息时,Java程序首先创建一个DatagramPacket实例,该实例中预先分配了一些空间(一个字节数组byte[]),并将接收到的信息存放在该空间中。然后把该实例作为参数传递给DatagramSocket类的receive()方法。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2