package com.itcast.b23.net.udp;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
class Sender implements Runnable //相当于话筒
{
private DatagramSocket ds;
private String host; //目的主机
private int port;
public Sender(DatagramSocket ds, String host, int port)
{
this.ds = ds;
this.host = host;
this.port = port;
}
@Override
public void run()
{
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));
try
{
InetAddress remoteIp = InetAddress.getByName(host);
//byte[] buf = new byte[1024];
DatagramPacket dp = null;
String line = null;
System.out.println("read key input:");
while(null != (line=br.readLine()))
{
dp = new DatagramPacket(line.getBytes(), line.length(), remoteIp, port);
ds.send(dp);
if("886".equals(line))
{
//Receiver.Running = false; // 关闭听筒
break;//话筒本身关闭, 听筒尚未关闭;对方的886,才能使听筒关闭
}
}
System.out.println("readed key input.");
//br.close();
//ds.close();
}
catch (UnknownHostException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
finally
{ try
{
if(br != null)
br.close();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
finally
{
ds.close();
}
}
}
}
class Receiver implements Runnable //相当于听筒
{
//public static boolean Running = true;//关闭对方,必须发消息,通知到对方
private DatagramSocket ds;
//private int port; //监听的端口,在形参中已指定
public Receiver(DatagramSocket ds)
{
this.ds = ds;
//this.port = port;
}
@Override
public void run()
{
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf, buf.length);
while(true)
{
try
{
System.out.println(ds.getPort()+" listening:");
ds.receive(dp);
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
String remoteIp = dp.getAddress().getHostAddress();
int remotePort = dp.getPort();
byte[] rawData = dp.getData();
String data = new String(rawData, 0, dp.getLength());
if("886".equals(data))
break;
System.out.println(remoteIp+":"+remotePort+" say:>"+data);
}
}
}
class ChatDemo
{
/**
* @param args
* @throws SocketException
* @throws InterruptedException
*/
public static void main(String[] args) throws SocketException, InterruptedException
{
int s_port = Integer.parseInt(args[0]);// 源端口
int d_port = Integer.parseInt(args[1]);//目的端口
DatagramSocket rs = new DatagramSocket(d_port);
DatagramSocket ss = new DatagramSocket();
new Thread(new Sender(ss, "localhost", s_port)).start();//话筒开启
Thread.sleep(500);
new Thread(new Receiver(rs)).start();//听筒开启
}
}
------- android培训 、 java培训 、期待与您交流! ----------