黑马程序员技术交流社区
标题:
UDP简单聊天系统为什么要要要定义两个run方法 而且这两个...
[打印本页]
作者:
靓仔
时间:
2013-12-25 20:59
标题:
UDP简单聊天系统为什么要要要定义两个run方法 而且这两个...
UDP简单聊天系统为什么要要要定义两个run方法 而且这两个为什么要封装到不同的类中?
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 bufr = new BufferedReader(new InputStreamReader(System.in));
String line = null;
while((line = bufr.readLine())!=null)
{
byte[] buf=line.getBytes();
DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.100"),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();
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();
}
}
作者:
松毛
时间:
2013-12-25 22:45
这个两个run方法一个是用来发送的,一个是用来接收的。由于发送和接收都互不影响,所以要定义在连个不同的线程中。就像你在聊天的时候,在发送数据的时候同时也可以接收到数据。
作者:
75100313
时间:
2013-12-26 15:24
本帖最后由 75100313 于 2013-12-26 15:25 编辑
线程没学? 要想用线程 必须覆盖run()方法 ! 两个线程 Send 和 Rece 都实现了 runnable
当然是需要覆盖2次了
作者:
程玉习
时间:
2013-12-26 16:04
ds.receive(dp);是一个阻塞式方法,当它接收不到信息后会导致程序处于等待状态,所以要使用多线程,而多线程的实现是必须覆盖run()方法,接收和发送相当于两个应用程序,所以要分别定义在各自的类中。两个程序分开写比较合理,这样写是为了代码集中,利于讲解。
作者:
汪洋大海
时间:
2013-12-26 16:05
用executor来创建线程也行。
作者:
靓仔
时间:
2014-2-18 08:50
这种问题你需要理解UDP和TCP的原理顺便帮助你复习前边所学的知识: UDP:将数据及源和目的封装成数据包,不需要建立连接
每个数据包的大小限制在64k以内
因无连接,是不可靠的协议
不需要建立连接,速度快
TCp:建立连接,形成传输数据的通道
在连接中进行大数据量传输
通过三次握手完成连接,是可靠的协议
必须建立连接,效率会稍低
Socket:Socked就是为网络服务提供的一种机制
通信的的两端都有Socket
网络通信其实就是Socket间的通信
数据在两个Socket间通过IO传输
一个聊天系统需要发送数据和需要接受数据这还需要了解UDP发送端的思路
UDP发送端:
1:建立udpSocket服务
2:提供数据,并将数据封装到数据包中
3:通过socket服务发送功能,将数据发出去
4:关闭资源
UDP接收端病处理数据:
1:定义udpsocket服务,通常会监听一个端口,其实就是给这个接收网络应用程序定义数字标识
方便与明确哪些数据过来该应用可以处理,
2:定义一个数据包,因为要存储接收到的字节数据,数据包对象中有更多功能可以提取字节数据中
存储已定义好的数据包中
3:通过socket服务的receive方法将收到的数据存入已定义好的数据包中
4:通过数据包对象特有功能,将这些不同数据取出,打印在控制台上
5:关闭资源
一个聊天程序
有接收数据的部分,和发数据的部分
这两部分需要同时执行
那就需要用到多线程技术
一个线程控制接收,另一线程控制发送
因为接收和发送动作不一致,所以要定义两个run方法
而且这两个方法要封装到不同的类中。这就容易理解了吧!
打字不容易希望能帮助你,自己也能复习一下!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2