Java网络编程–UDP实现双用户通信(多线程)
功能:使用UDP实现两个用户的持续通信
分析:
1.双方都是既要发送信息也要接收信息,因此需要使用多线程
2.双方接收和发送的操作是一样的,可以单独写成类并实现 Runnable 接口
3.双方都需要多次发送和接收,可用while(true)来循环接收/发送数据
4.以发送了信息“bye”为对话结束(跳出while循环)的条件,但是一方发送“bye”只能结束该方的发送信息的线程和对方接收信息的线程
代码:
1.MsgSend.java
//封装发送行为信息的类
/**
* UDP发送信息的步骤:
* 1.创建DatagramSocket对象,代表Udp的一个套接字,指定该发送所占用的接口
* 2.创建需要发送的信息,并将其转换成字节数组
* 3.创建DatagramPacket对象,封装字节数组,并指定要发送到的主机+端口
* 4.调用DatagramSocket的send()方法发送数据报包
* 5.关闭资源
*/
package udp.cmmunication;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketException;
import java.util.Scanner;
/**
* @author Zqr
*
*/
public class MsgSend implements Runnable {
private int port; // 该发送方所占用的接口
private int toPort; // 发送数据报时接收方用于接收的端口
private String name; // 发送方姓名
private DatagramSocket datagramSocket; // 该端口号为发送方占用的端口号
private Scanner sc = null; //控制台输入
// 构造方法
public MsgSend(int port, int toPort, String name) {
this.setPort(port);
this.setToPort(toPort);
this.setName(name);
try {
this.datagramSocket = new DatagramSocket(this.port);
sc = new Scanner(System.in);
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public