----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
因为聊天内容允许出现误差,并且要求速度快, 这里就要用到UDP通信协议,因为有收数据的部分也有发数据的部分,这两部分要同时执行,就要用到多线程技术,一个线程收一个线程发,因为收和发动作不一致,所以定义2个run方法,
import java.net.*;
//输出端
{
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("127.0.0.1"),10001); //将信息封装成包
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 date = new String(dp.getData(),0,dp.getLength());
System.out.println(ip+""+date);
}
}
catch (Exception e)
{
throw new RuntimeException("接收失败");
}
}
}
class ChatDemn
{
public static void main(String[] args)throws Exception
{
DatagramSocket sendsocket = new DatagramSocket();
DatagramSocket receivesocket = new DatagramSocket(10001);
new Thread(new Send(sendsocket)).start();
new Thread(new Rece(receivesocket)).start();
}
}
通过写这个小程序,出现了很多单词拼写错误,特别是方法的大小写问题,类名接口名多单词组成 所有单词 首字母大写;变量名 多单词组成时,首字母小写,往后每个单词首字母大写。
----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------