/** 导包 */
/**
* 需求:通过UDP传输方式,将一段文字数据发送出去
* 思路:
* 1.建立UDPSocket服务
* 2.提供数据
* 3.通过Socket服务的发送功能,将数据包发送出去
* 4.关闭资源
* 2018年3月23日
*/
public class UDPSend {
* 需求:通过UDP传输方式,将一段文字数据发送出去
* 思路:
* 1.建立UDPSocket服务
* 2.提供数据
* 3.通过Socket服务的发送功能,将数据包发送出去
* 4.关闭资源
* 2018年3月23日
*/
public class UDPSend {
public static void main(String[] args) {
try {
//1.创建UDP服务。通过DatagramScoket对象
DatagramSocket ds = new DatagramSocket();
//2.确定数据并封装成包
try {
//1.创建UDP服务。通过DatagramScoket对象
DatagramSocket ds = new DatagramSocket();
//2.确定数据并封装成包
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line = null;
while((line = br.readLine()) != null) {
byte [] bytes = line.getBytes();
DatagramPacket dp = new DatagramPacket(data, data.length, InetAddress.getByName("192.168.1.111"), 4372);
//3.通过scoket服务将已有数据包发送
ds.send(dp);
//4.关闭
ds.close();
} catch (SocketException e) {
e.printStackTrace();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
String line = null;
while((line = br.readLine()) != null) {
byte [] bytes = line.getBytes();
DatagramPacket dp = new DatagramPacket(data, data.length, InetAddress.getByName("192.168.1.111"), 4372);
//3.通过scoket服务将已有数据包发送
ds.send(dp);
//4.关闭
ds.close();
} catch (SocketException e) {
e.printStackTrace();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/**
* 需求:
* 定义一个应用程序,用于接收udp协议传输的数据并处理
*
* 思路:
* 1.定义udp socket 服务,通常会监听一个端口,
* 2.定义一个数据包,因为要存储接受到的字节数据,
* 数据包中有更多功能可以提取字节数据中的不同数据信息
* 3.通过socket服务的receive方法将收到的数据存入到已定义好的数据包中
* 4.通过数据包对象的特有功能,将这些不同的对象取出,打印在控制台上
* 5.关闭资源
*/
public class UDPReceive {
* 需求:
* 定义一个应用程序,用于接收udp协议传输的数据并处理
*
* 思路:
* 1.定义udp socket 服务,通常会监听一个端口,
* 2.定义一个数据包,因为要存储接受到的字节数据,
* 数据包中有更多功能可以提取字节数据中的不同数据信息
* 3.通过socket服务的receive方法将收到的数据存入到已定义好的数据包中
* 4.通过数据包对象的特有功能,将这些不同的对象取出,打印在控制台上
* 5.关闭资源
*/
public class UDPReceive {
public static void main(String[] args) {
//1.定义udp socket 服务,建立端点
DatagramSocket das;
try {
das = new DatagramSocket(4372);
//2.定义数据包,用于存储;
byte [] buf = new byte[1024];
DatagramPacket dap = new DatagramPacket(buf, buf.length);
//3.通过服务的receive的方法将收到的数据存储到数据包中
das.receive(dap);//阻塞式方法
//4.通过数据包的方法获取其中的数据
String IP = dap.getAddress().getHostAddress();
String data = new String (dap.getData(),0,dap.getLength());
int port = dap.getPort();
//5.关闭
das.close();
System.out.println("ip:" + IP + "\n数据:" + data + "\n端口:" + port);
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
//1.定义udp socket 服务,建立端点
DatagramSocket das;
try {
das = new DatagramSocket(4372);
//2.定义数据包,用于存储;
byte [] buf = new byte[1024];
DatagramPacket dap = new DatagramPacket(buf, buf.length);
//3.通过服务的receive的方法将收到的数据存储到数据包中
das.receive(dap);//阻塞式方法
//4.通过数据包的方法获取其中的数据
String IP = dap.getAddress().getHostAddress();
String data = new String (dap.getData(),0,dap.getLength());
int port = dap.getPort();
//5.关闭
das.close();
System.out.println("ip:" + IP + "\n数据:" + data + "\n端口:" + port);
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
聊天实例:
/**
* 编写一个聊天程序
* 有数据接受部分和发数据部分
* 两部分需要同时执行---多线程
*一个线程控制收,一个控制发
*
*因为收和发动作是不一样的,所以要定义两个run方法
*而且这两个方法要定义在不同的类中
*/
* 两部分需要同时执行---多线程
*一个线程控制收,一个控制发
*
*因为收和发动作是不一样的,所以要定义两个run方法
*而且这两个方法要定义在不同的类中
*/
public class ChatDemo_多线程 {
public static void main(String[] args) {
try {
DatagramSocket sendScoket = new DatagramSocket();
DatagramSocket receScoket = new DatagramSocket(4372);
new Thread(new Send(sendScoket)).start();
new Thread(new Receive(receScoket)).start();
} catch (SocketException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
try {
DatagramSocket sendScoket = new DatagramSocket();
DatagramSocket receScoket = new DatagramSocket(4372);
new Thread(new Send(sendScoket)).start();
new Thread(new Receive(receScoket)).start();
} catch (SocketException e) {
e.printStackTrace();
}
}
}
/**
* 发送类
*
* @author LSD
*
* 2018年3月26日
*/
class Send implements Runnable{
* 发送类
*
* @author LSD
*
* 2018年3月26日
*/
class Send implements Runnable{
private DatagramSocket das;
public Send(DatagramSocket das) {
this.das = das;
}
@Override
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 [] bytes = line.getBytes();
DatagramPacket dap = new DatagramPacket(bytes,bytes.length,InetAddress.getByName("192.168.1.111"),4372);
public Send(DatagramSocket das) {
this.das = das;
}
@Override
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 [] bytes = line.getBytes();
DatagramPacket dap = new DatagramPacket(bytes,bytes.length,InetAddress.getByName("192.168.1.111"),4372);
das.send(dap);
}
}catch (Exception e) {
throw new RuntimeException("发送端失败!");
}
}
}
}
}catch (Exception e) {
throw new RuntimeException("发送端失败!");
}
}
}
/**
* 接收类
*/
class Receive implements Runnable{
* 接收类
*/
class Receive implements Runnable{
private DatagramSocket das;
public Receive(DatagramSocket das) {
this.das = das;
}
@Override
public void run() {
try {
while(true) {
byte [] bytes = new byte [1000];
DatagramPacket dap = new DatagramPacket(bytes, bytes.length);
das.receive(dap);
String data = new String(dap.getData(),0,dap.getLength());
String ip = dap.getAddress().getHostAddress();
int port = dap.getPort();
System.out.println("ip:" + ip + "\n数据:" + data + "\n端口:" + port);
}
} catch (Exception e) {
throw new RuntimeException("接收失败!");
}
}
}
public Receive(DatagramSocket das) {
this.das = das;
}
@Override
public void run() {
try {
while(true) {
byte [] bytes = new byte [1000];
DatagramPacket dap = new DatagramPacket(bytes, bytes.length);
das.receive(dap);
String data = new String(dap.getData(),0,dap.getLength());
String ip = dap.getAddress().getHostAddress();
int port = dap.getPort();
System.out.println("ip:" + ip + "\n数据:" + data + "\n端口:" + port);
}
} catch (Exception e) {
throw new RuntimeException("接收失败!");
}
}
}