Java教程 第33页 Java 实例 – ServerSocket 和 Socket 通信实例 Java 实例 以下实例演示了如何实现客户端发送消息到服务器,服务器接收到消息并读取输出,然后写出到客户端客户端接收到输出。 1、建立服务器端 服务器建立通信ServerSocket 服务器建立Socket接收客户端连接 建立IO输入流读取客户端发送的数据 建立IO输出流向客户端发送数据消息 服务器端代码: import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.ServerSocket; import java.net.Socket; public class Server { public static void main(String[] args) { try { ServerSocket ss = new ServerSocket(8888); System.out.println("启动服务器...."); Socket s = ss.accept(); System.out.println("客户端:"+s.getInetAddress().getLocalHost()+"已连接到服务器"); BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream())); //读取客户端发送来的消息 String mess = br.readLine(); System.out.println("客户端:"+mess); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream())); bw.write(mess+"\n"); bw.flush(); } catch (IOException e) { e.printStackTrace(); } } } 以上代码运行输出结果为: 启动服务器.... 2、建立客户端 创建Socket通信,设置通信服务器的IP和Port 建立IO输出流向服务器发送数据消息 建立IO输入流读取服务器发送来的数据消息 客户端代码: /* author by w3cschool.cn Main.java */ import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.net.Socket; import java.net.UnknownHostException; public class Client { public static void...
2024-04-01
Java 实例 – 获取线程状态 Java 实例 Java中的线程的生命周期大体可分为5种状态。 1. 新建状态(New):新创建了一个线程对象。 2. 就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于可运行线程池中,变得可运行,等待获取CPU的使用权。 3. 运行状态(Running):就绪状态的线程获取了CPU,执行程序代码。 4. 阻塞状态(Blocked):阻塞状态是线程因为某种原因放弃CPU使用权,暂时停止运行。直到线程进入就绪状态,才有机会转到运行状态。阻塞的情况分三种: (一)、等待阻塞:运行的线程执行wait()方法,JVM会把该线程放入等待池中。 (二)、同步阻塞:运行的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则JVM会把该线程放入锁池中。 (三)、其他阻塞:运行的线程执行sleep()或join()方法,或者发出了I/O请求时,JVM会把该线程置为阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态。 5. 死亡状态(Dead):线程执行完了或者因异常退出了run()方法,该线程结束生命周期。 以下实例演示了如何获取线程的状态: /* author by w3cschool.cn Main.java */ class MyThread extends Thread{ boolean waiting= true; boolean ready= false; MyThread() { } public void run() { String thrdName = Thread.currentThread().getName(); System.out.println(thrdName + " 启动"); while(waiting) System.out.println("等待:"+waiting); System.out.println("等待..."); startWait(); try { Thread.sleep(1000); } catch(Exception exc) { System.out.println(thrdName + " 中断。"); } System.out.println(thrdName + " 结束。"); } synchronized void startWait() { try { while(!ready) wait(); } catch(InterruptedException exc) { System.out.println("wait() 中断。"); } } synchronized void notice() { ready = true; notify(); } } public class Main { public static void main(String args[]) throws Exception{ MyThread thrd = new MyThread(); thrd.setName("MyThread #1"); showThreadStatus(thrd); thrd.start(); Thread.sleep(50);...
2024-04-01
Java 实例 – 获取本机ip地址及主机名 Java 实例 以下实例演示了如何使用 InetAddress 类的 getLocalAddress() 方法获取本机ip地址及主机名: /* author by w3cschool.cn Main.java */ import java.net.InetAddress; public class Main { public static void main(String[] args) throws Exception { InetAddress addr = InetAddress.getLocalHost(); System.out.println("Local HostAddress: "+addr.getHostAddress()); String hostname = addr.getHostName(); System.out.println("Local host name: "+hostname); } } 以上代码运行输出结果为: Local HostAddress: 192.168.1.4 Local host name: harsh Java 实例
2024-04-01
Java 实例 – 查看线程是否存活 Java 实例 以下实例演示了如何通过继承Thread类并使用currentThread()方法来检测一个线程是否存活: /* author by w3cschool.cn TwoThreadAlive.java */ public class TwoThreadAlive extends Thread { public void run() { for (int i = 0; i < 10; i++) { printMsg(); } } public void printMsg() { Thread t = Thread.currentThread(); String name = t.getName(); System.out.println("name=" + name); } public static void main(String[] args) { TwoThreadAlive tt = new TwoThreadAlive(); tt.setName("Thread"); System.out.println("before start(), tt.isAlive()=" + tt.isAlive()); tt.start(); System.out.println("just after start(), tt.isAlive()=" + tt.isAlive()); for (int i = 0; i < 10; i++) { tt.printMsg(); } System.out.println("The end of main(), tt.isAlive()=" + tt.isAlive()); } } 以上代码运行输出结果为: before start(), tt.isAlive()=false just after start(), tt.isAlive()=true name=main name=Thread name=main name=main name=main name=main name=main name=main name=main name=main name=main name=Thread name=Thread name=Thread name=Thread...
2024-04-01
Java 实例 – 获取所有线程 Java 实例 以下实例演示了如何使用 getName() 方法获取所有正在运行的线程: /* author by w3cschool.cn Main.java */ public class Main extends Thread { public static void main(String[] args) { Main t1 = new Main(); t1.setName("thread1"); t1.start(); ThreadGroup currentGroup = Thread.currentThread().getThreadGroup(); int noThreads = currentGroup.activeCount(); Thread[] lstThreads = new Thread[noThreads]; currentGroup.enumerate(lstThreads); for (int i = 0; i < noThreads; i++) System.out.println("线程号:" + i + " = " + lstThreads[i].getName()); } } 以上代码运行输出结果为: 线程号:0 = main 线程号:1 = thread1 Java 实例
2024-04-01
Java 实例 – 阶乘 Java 实例 一个正整数的阶乘(英语:factorial)是所有小于及等于该数的正整数的积,并且有0的阶乘为1。自然数n的阶乘写作n!。 亦即n!=1×2×3×…×n。阶乘亦可以递归方式定义:0!=1,n!=(n-1)!×n。 以下实例演示了 Java 阶乘代码的实现: /* author by w3cschool.cn MainClass.java */ public class MainClass { public static void main(String args[]) { for (int counter = 0; counter <= 10; counter++){ System.out.printf("%d! = %d\n", counter, factorial(counter)); } } public static long factorial(long number) { if (number <= 1) return 1; else return number * factorial(number - 1); } } 以上代码运行输出结果为: 0! = 1 1! = 1 2! = 2 3! = 6 4! = 24 5! = 120 6! = 720 7! = 5040 8! = 40320 9! = 362880 10! = 3628800 Java 实例
2024-04-01
Java 实例 – 重载(overloading)方法中使用 Varargs Java 实例 以下实例演示了如何在重载方法中使用可变参数: /* author by w3cschool.cn Main.java */ public class Main { static void vaTest(int ... no) { System.out.print("vaTest(int ...): " + "参数个数: " + no.length +" 内容: "); for(int n : no) System.out.print(n + " "); System.out.println(); } static void vaTest(boolean ... bl) { System.out.print("vaTest(boolean ...) " + "参数个数: " + bl.length + " 内容: "); for(boolean b : bl) System.out.print(b + " "); System.out.println(); } static void vaTest(String msg, int ... no) { System.out.print("vaTest(String, int ...): " + msg +"参数个数: "+ no.length +" 内容: "); for(int n : no) System.out.print(n + " "); System.out.println(); } public static void main(String args[]){ vaTest(1, 2, 3); vaTest("测试: ", 10, 20); vaTest(true, false, false); } }...
2024-04-01
Java 实例 – 方法覆盖 Java 实例 前面章节中我们已经学习了 Java 方法的重写,本文我们来看下 Java 方法覆盖的实现。 方法重载与方法覆盖区别如下: 方法重载(Overloading):如果有两个方法的方法名相同,但参数不一致,哪么可以说一个方法是另一个方法的重载。 方法覆盖(Overriding):如果在子类中定义一个方法,其名称、返回类型及参数签名正好与父类中某个方法的名称、返回类型及参数签名相匹配,那么可以说,子类的方法覆盖了父类的方法。 以下实例演示了 Java 方法覆盖(Overriding)代码的实现: /* author by w3cschool.cn Findareas.java */ public class Findareas{ public static void main (String []agrs){ Figure f= new Figure(10 , 10); Rectangle r= new Rectangle(9 , 5); Figure figref; figref=f; System.out.println("Area is :"+figref.area()); figref=r; System.out.println("Area is :"+figref.area()); } } class Figure{ double dim1; double dim2; Figure(double a , double b) { dim1=a; dim2=b; } Double area() { System.out.println("Inside area for figure."); return(dim1*dim2); } } class Rectangle extends Figure { Rectangle(double a, double b) { super(a ,b); } Double area() { System.out.println("Inside area for rectangle."); return(dim1*dim2); } } 以上代码运行输出结果为: Inside area for figure. Area is :100.0 Inside area for rectangle. Area is :45.0 Java...
2024-04-01
Java 实例 – 获取指定主机的IP地址 Java 实例 以下实例演示了如何使用 InetAddress 类的 InetAddress.getByName() 方法来获取指定主机(网址)的IP地址: /* author by w3cschool.cn GetIP.java */ import java.net.InetAddress; import java.net.UnknownHostException; public class GetIP { public static void main(String[] args) { InetAddress address = null; try { address = InetAddress.getByName ("www.w3cschool.cn"); } catch (UnknownHostException e) { System.exit(2); } System.out.println(address.getHostName() + "=" + address.getHostAddress()); System.exit(0); } } 以上代码运行输出结果为: www.w3cschool.cn=222.73.134.120 Java 实例
2024-04-01
Java 实例 – Enum(枚举)构造函数及方法的使用 Java 实例 以下实例演示了Enum(枚举)构造函数及方法的使用: /* author by w3cschool.cn Main.java */ enum Car { lamborghini(900),tata(2),audi(50),fiat(15),honda(12); private int price; Car(int p) { price = p; } int getPrice() { return price; } } public class Main { public static void main(String args[]){ System.out.println("所有汽车的价格:"); for (Car c : Car.values()) System.out.println(c + " 需要 " + c.getPrice() + " 千美元。"); } } 以上代码运行输出结果为: 所有汽车的价格: lamborghini 需要 900 千美元。 tata 需要 2 千美元。 audi 需要 50 千美元。 fiat 需要 15 千美元。 honda 需要 12 千美元。 Java 实例
2024-04-01