Java学习笔记--网络编程--练习在线咨询
2020-06-04 07:50
253 查看
接收方
import java.net.DatagramPacket; import java.net.DatagramSocket; //在线咨询的雏形 public class UdpReceiveDemo01 { public static void main(String[] args) throws Exception { DatagramSocket datagramSocket = new DatagramSocket(6666); while (true) { //准备接收包裹 byte[] buffer = new byte[1024]; DatagramPacket datagramPacket = new DatagramPacket(buffer,0,buffer.length); datagramSocket.receive(datagramPacket);//阻塞式接受包裹 //断开链接 byte[] data=datagramPacket.getData(); String sdata=new String(data,0,datagramPacket.getLength());//注意 这里不能用data的长度,因为字节数组长度以及固定,即便输入了bye下面的equals也不会停止 System.out.println(sdata); if (sdata.equals("bye")){ break; } } datagramSocket.close(); } }
发送方
import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetSocketAddress; public class UdpSenderDemo01 { public static void main(String[] args) throws Exception { DatagramSocket datagramSocket = new DatagramSocket(8888); //准备数据:控制台读取System.in BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); while (true){ String s = reader.readLine(); byte[] data=s.getBytes(); DatagramPacket datagramPacket = new DatagramPacket(data,0,data.length,new InetSocketAddress("localhost",6666)); datagramSocket.send(datagramPacket); if (s.equals("bye")){ break; } } datagramSocket.close(); } }
多线程改进:
发送线程:
import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetSocketAddress; public class TalkSend implements Runnable{ /* 多线程改进 发送线程 */ BufferedReader reader =null; DatagramSocket socket =null; private int fromPort; private String toIP; private int toPort; public TalkSend(int fromPort, String toIP, int toPort) { this.fromPort = fromPort; this.toIP = toIP; this.toPort = toPort; try{ socket=new DatagramSocket(fromPort); reader = new BufferedReader(new InputStreamReader(System.in)); }catch (Exception e){ e.printStackTrace(); } } @Override public void run() { //准备数据:控制台读取System.in while (true){ try{ String s = reader.readLine(); byte[] data=s.getBytes(); DatagramPacket datagramPacket = new DatagramPacket(data,0,data.length,new InetSocketAddress(this.toIP,this.toPort)); socket.send(datagramPacket); if (s.equals("bye")){ break; } }catch (Exception e){ e.printStackTrace(); } } socket.close(); } }
接收线程:
import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketException; public class TalkReceive implements Runnable{ /* 多线程改进 接收线程 */ DatagramSocket datagramSocket =null; private int port; private String msgFrom; public TalkReceive(int port,String msgFrom) { this.port = port; this.msgFrom=msgFrom; try { datagramSocket =new DatagramSocket(port); } catch (SocketException e) { e.printStackTrace(); } } @Override public void run() { while (true) { //准备接收包裹 try { byte[] buffer = new byte[1024]; DatagramPacket datagramPacket = new DatagramPacket(buffer,0,buffer.length); datagramSocket.receive(datagramPacket);//阻塞式接受包裹 //断开链接 byte[] data=datagramPacket.getData(); String sdata=new String(data,0,datagramPacket.getLength());//注意 这里不能用data的长度,因为字节数组长度以及固定,即便输入了bye下面的equals也不会停止 System.out.println(msgFrom+":"+sdata); if (sdata.equals("bye")){ break; } } catch (IOException e) { e.printStackTrace(); } } datagramSocket.close(); } }
实际应用:
老师方:
public class TalkTeacher { public static void main(String[] args) { new Thread(new TalkSend(5555,"localhost",8888)).start(); new Thread(new TalkReceive(9999,"学生")).start(); } }
学生方:
public class TalkStudent { public static void main(String[] args) { //开启两个线程 new Thread(new TalkSend(7777,"localhost",9999)).start(); new Thread(new TalkReceive(8888,"老师")).start(); } }
相关文章推荐
- Java UDP 网络编程 示例 -Java学习笔记(30)
- java学习笔记-网络编程
- Java学习笔记之网络编程(二):TCP
- 黑马程序员---java学习笔记之网络编程
- Java学习笔记之网络编程
- 网络编程4--毕向东java基础教程视频学习笔记
- java基础之网络编程(学习笔记)
- java学习笔记------Java网络编程三
- [学习笔记]Java网络编程之TCP通讯
- [零散篇]Java学习笔记---Java的Socket网络编程以及多线程
- Java 网络编程 学习笔记一 基础知识
- java学习笔记(3):网络编程
- Java网络编程---I/O部分学习笔记整理
- Java 网络编程——Java学习笔记27
- 网络编程3--毕向东java基础教程视频学习笔记
- Java 网络编程 TCP vs UDP -Java学习笔记(31)
- Java网络编程学习笔记(4)非阻塞通信
- JAVA学习笔记(六十)- 网络编程登录实例
- Java学习笔记之网络编程
- Java学习笔记之网络编程基础-根据域名自动到DNS上获取IP地址