您的位置:首页 > 理论基础 > 计算机网络

网络编程UDP多线程聊天室

2014-03-03 15:52 507 查看
面向无连接,发数据之前不需要链接,将数据打包过后发送数据,如果地址没找到就把包丢弃,分为发送端和接收端

1、将数据及源和目的封装成数据包中,不需要建立连接

2、每个数据包的大小在限制64k内

3、因为连接,是不可靠协议

4、不需要建立连接,速度快

聊天工具udp协议

步骤:

发送端:

1、定义sockte服务

2、提供数据并将数据封装到数据包

3、通过sockte的send方法将数据包发送出去

接收端:

1、定义sockte服务并监听端口

2、定义一个数据包,用于接收储存接受到的数据

4、通过数据包功能将这些不同数据取出
/*
* udp实现网络聊天
* 使用多线程实现一个控制接收一个控制发送*/

class Send implements Runnable{
private DatagramSocket ds;
Send(DatagramSocket ds){
this.ds = ds;
}
public void run() {
try {

BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));
String len=null;
while((len=br.readLine())!=null){
if(len.equals("end"))
break;
byte[] buf = len.getBytes();
DatagramPacket pac =
new DatagramPacket(buf, buf.length, InetAddress.getByName("192.168.2.255"), 10003);
ds.send(pac);
}
} catch (Exception e) {
throw new RuntimeException("发送异常");
}
}
}
class recev implements Runnable{
private DatagramSocket rds ;
public recev(DatagramSocket rds) {
this.rds = rds;
}
public void run() {
try {
while(true){
byte[] buf = new byte[1024];
DatagramPacket rdpk = new DatagramPacket(buf, buf.length);
rds.receive(rdpk);
String ip = rdpk.getAddress().getHostAddress();
String count = new String(rdpk.getData(), 0, rdpk.getLength());
int port = rdpk.getPort();
System.out.println("来自:"+ip+"端口:"+port+"信息:"+count);
}
} catch (Exception e) {
throw new RuntimeException("接收异常");
}
}

}
public class Thred_UDP {

public static void main(String[] args) throws Exception{
DatagramSocket sds = new DatagramSocket();
DatagramSocket rds = new DatagramSocket(10003);
Send send = new Send(sds);
recev recev = new recev(rds);
Thread sendtThread = new Thread(send);
Thread recevThread = new Thread(recev);
sendtThread.start();
recevThread.start();
}

}
----------------------
ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: