【需求】:实现双方聊天(收数据和发数据)
【技术】:网络编程、IO流、多线程
【代码】:
1,发送端代码
package network;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class MysendRun implements Runnable {
private DatagramSocket ds;
public MysendRun(DatagramSocket ds) {
this.ds = ds;
}
/**
* UDP发送端
* @throws Exception
*/
public void mySend() throws Exception {
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("localhost"),10000);
ds.send(dp);
if("bye".equals(line))
break;
}
ds.close();
}
@Override
public void run() {
try {
mySend();
} catch (Exception e) {
System.out.println("发送端异常!!");
}
}
}
2、接收端代码
package network;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class MyReceiveRun implements Runnable {
private DatagramSocket ds;
public MyReceiveRun(DatagramSocket ds) {
this.ds = ds;
}
/**
* UDP接收端
* @throws IOException
*/
public void myReceive() throws IOException {
while (true) {
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf, buf.length);
ds.receive(dp);
String ip = dp.getAddress().getHostAddress();
int pot = dp.getPort();
String text = new String(dp.getData(),0,dp.getLength());
if (text.equals("bye")) {
System.out.println(ip+"……退出聊天室");
break;
}
System.out.println(ip+":"+pot+":"+text);
}
ds.close();
}
@Override
public void run() {
try {
myReceive();
} catch (IOException e) {
System.out.println("接收端数据异常!!");
}
}
}
3、主方法
package network;
import java.net.DatagramSocket;
import java.net.SocketException;
public class NetworkTest1 {
public static void main(String[] args) throws SocketException{
DatagramSocket dsr = new DatagramSocket(10000);
DatagramSocket dss1 = new DatagramSocket(666);
MyReceiveRun mr = new MyReceiveRun(dsr);
MysendRun ms = new MysendRun(dss1);
Thread t1 = new Thread(mr);
Thread t2 = new Thread(ms);
t1.start();
t2.start();
}
}
【测试截图】