网络编程例题
UDP聊天案例
1.分别建立一个接受端作为聊天内容的接收,创建多个客服端发送信息
接受端
public static void main(String[] args) throws IOException { //定义一个指定端口的接收端对象,开放端口接受数据 DatagramSocket server = new DatagramSocket(9985); //定义一个字节数组接收数据 byte[] bys = new byte[1024]; //接受数据报对象 DatagramPacket packet = new DatagramPacket(bys,bys.length); InetAddress addr = packet.getAddress(); //显示数据信息 System.out.println("等待接受数据..."); while(true){ server.receive(packet); //packet.getdata获取数据报中的数据 //packet.getLength()获取数据报中的数据长度 String str = new String(packet.getData(),0,packet.getLength()); System.out.println("来自"+addr+"的数据: "+str); } }
发送端
public static void main(String[] args) throws IOException { InetAddress addr = InetAddress.getByName("localhost"); //创建发送数据的端口 DatagramSocket client = new DatagramSocket(3000); //通过键盘输入发送信息 while(true){ Scanner sc = new Scanner(System.in); String str = sc.nextLine(); if(!str.equals("886")){ //封装成数据报 DatagramPacket packet = new DatagramPacket(str.getBytes(),str.length(),addr,9985); //发送数据 client.send(packet); }else{ client.close(); break; } } }
2.与线程结合使用
//接受端 class ChatReciver implements Runnable{ private DatagramSocket server; ChatReciver(){ } ChatReciver(DatagramSocket server){ this.server = server; } @Override public void run() { try{ byte[] bys = new byte[1024]; DatagramPacket packet = new DatagramPacket(bys,bys.length); while(true){ //接受数据 server.receive(packet); String str = new String(packet.getData(),0,packet.getLength()); System.out.println("来自"+packet.getAddress()+"的信息: "+str); } }catch (IOException e) { e.printStackTrace(); } } } //发送端 class chatSend implements Runnable{ private DatagramSocket client; private int targerport; public chatSend(){ } public chatSend(DatagramSocket client,int targerport){ this.client=client; this.targerport=targerport; } @Override public void run() { Scanner sc = new Scanner(System.in); while(true){ String str = sc.nextLine(); byte[] bys = str.getBytes(); try { DatagramPacket packet = new DatagramPacket(bys,bys.length, InetAddress.getByName("127.0.0.1"),targerport); client.send(packet); } catch (IOException e) { e.printStackTrace(); } } } } public class chatSystem { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入服务启动端口"); int serverport = sc.nextInt(); System.out.println("请输入对象目标端口"); int targerport = sc.nextInt(); System.out.println("聊天系统启动"); try{ DatagramSocket socket = new DatagramSocket(serverport); //分别启动发送端和接受端 new Thread(new ChatReciver(socket),"接受服务").start(); new Thread(new chatSend(socket,targerport),"发送服务").start(); new Thread(new chatSend(socket,targerport),"发送服务").start(); } catch (SocketException e) { e.printStackTrace(); } } }
TCP案列
客服端
public static void main(String[] args) throws IOException { //创建Socket对象,并指定服务器端 Socket client = new Socket(InetAddress.getLocalHost(),9985); //获取服务端的数据并打印 InputStream is = client.getInputStream(); byte[] bys = new byte[1024]; int len ; while((len=is.read(bys))!= -1){ System.out.println(new String(bys,0,len)); } is.close(); client.close(); }
服务端
public static void main(String[] args) throws IOException { //指定端口号的服务端对象 ServerSocket server = new ServerSocket(9985); while(true){ //接收数据 Socket client =server.accept(); System.out.println("连接成功,开始交互数据"); //获取客户端的输出流对象 OutputStream os = client.getOutputStream(); //输出数据 os.write("已收到".getBytes()); try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } os.close(); client.close(); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构