网络编程-udp通信
package com.it.www;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
class Send implements Runnable{
private DatagramSocket datagramSocket ;
Send(DatagramSocket datagramSocket){
this.datagramSocket = datagramSocket;
}
@Override
public void run() {
// TODO Auto-generated method stub
try {
//创建一个字符输入流
InputStreamReader in = new InputStreamReader(System.in);
//创建一个包装类,把字符流放到缓存中
BufferedReader buff = new BufferedReader(in);
String line = null;
while((line = buff.readLine()) != null)
{
if("885".equals(line))
break;
byte[] dataLine = line.getBytes();// 字符串数据转化为字节数据
DatagramPacket datagramPacket =
new DatagramPacket(dataLine, dataLine.length, InetAddress.getByName("127.0.0.1"), 10001);
datagramSocket.send(datagramPacket);
}
datagramSocket.close();
} catch (Exception e) {
// TODO: handle exception
throw new RuntimeException("发送端失败");
}
}
}
class Receive implements Runnable{
DatagramSocket datagramSocket ;
public Receive(DatagramSocket datagramSocket) {
// TODO Auto-generated constructor stub
this.datagramSocket = datagramSocket;
}
@Override
public void run() {
// TODO Auto-generated method stub
try {
while(true)
{
byte[] data = new byte[1024];
//声明一个字节包,用来存放接收对方的数据
DatagramPacket datagramPacket =
new DatagramPacket(data, data.length);
//通古socket服务将收到的数据存到数据包中
datagramSocket.receive(datagramPacket);
//获取对方的主机地址
System.out.println(datagramPacket.getAddress().getHostAddress());
//获取对方发送的数据
String dataString =
new String(datagramPacket.getData(),0,datagramPacket.getLength());
System.out.println("dataString ="+dataString);
}
} catch (Exception e) {
// TODO: handle exception
throw new RuntimeException("接收失败");
}
}
}
public class UdpCommunicate{
public static void main(String[] args) throws Exception {
DatagramSocket sendDatagramSocket = new DatagramSocket();
DatagramSocket receivedDatagramSocket = new DatagramSocket(10001);
new Thread(new Send(sendDatagramSocket)).start();
new Thread(new Receive(receivedDatagramSocket)).start();
}
}