线程
进程由线程组成,多线程可以实现多个任务的同时运行,是网络编程的必要一环
普通线程
1 class Mythread implements Runnable{ 2 private String name; 3 public Mythread(String nn){ 4 this.name=nn;//对象标识 5 } 6 7 @Override 8 public void run() { 9 启动线程后自动执行的内容 10 for(int i=0;i<100;i++) { 11 try { 12 Thread.sleep(200); 13 System.out.println(name+"===>"+i); 14 } catch (InterruptedException e) { 15 e.printStackTrace(); 16 } 17 } 18 } 19 } 20 21 class Main{ 22 static main(String[] args) { 23 Thread t1=new Thread(new Mythread("A"));创建线程对象1 24 Thread t2=new Mythread("B"));创建线程对象2 25 t1.start();启动线程 26 t2.start(); 27 28 }
匿名线程
3 匿名线程----------- new Thread() { 5 6 7 8 9 Thread.sleep(20010 System.out.println("===>"+11 } 12 13 } 14 } 16 }.start();启动 18 }
TCP编程
TCP客户端
连接服务器,可以实现连接错误判断、接收错误判断、服务器关闭判断
import java.io.InputStream; 2 java.io.OutputStreamWriter; 3 java.io.PrintWriter; 4 java.net.Socket; MySocket{ 6 Socket sock; 7 InputStream reader; PrintWriter writer; 9 private boolean Runtobool; 10 启动socket客户端 11 MySocket() { 12 连接socket 13 { 14 sock=new Socket("192.168.2.110",800115 writer=new PrintWriter(new OutputStreamWriter(sock.getOutputStream()));获取输出流 16 reader=sock.getInputStream();获取输入流获取输入流 17 写数据,发送数据 18 writer.write("-东小东-" writer.flush(); 20 开始读数据 21 Runtobool=true; 22 startServ(); 23 }(Exception e){ 24 Runtobool=false25 System.out.println("open socket err" } 28 接收数据函数 29 startServ(){ 30 匿名线程 31 Thread(){ 32 run(){ 33 34 接收缓冲区 35 byte[] bytes = new byte[1024]; 36 while(Runtobool){ 37 接收函数,此函数会阻塞 38 while((reader.read(bytes,bytes.length))!=-1){ 39 String datax=new String(bytes,"gbk"40 System.out.println("收到数据:"+datax); 41 bytes = byte[1024];清空数组的内容,必须 42 43 接收为空时进入 44 System.out.println("server break err"45 Runtobool=46 47 }48 Runtobool=49 System.out.println("rev socket err"50 }} 51 }.start(); 52 53 54 55 56 MySocket(); 57 58 }
TCP服务器
实现单个客户端接入
java.net.ServerSocket; 6 ServerSocket sockser; 12 13 14 15 16 sockser=new ServerSocket(8001);监听端口8001 17 sock=sockser.accept();阻塞等待客户接入 18 writer=19 reader=sock.getInputStream();21 writer.write("-东小东-"23 24 Runtobool=25 26 }27 Runtobool=28 System.out.println("open socket err"29 30 31 32 39 40 41 42 String datax=43 System.out.println(sock.getRemoteSocketAddress()+"==>收到数据:"+44 bytes = 45 46 47 System.out.println("client server break err"48 Runtobool=49 50 }51 Runtobool=52 System.out.println("rev socket err"55 56 58 59 60 61 }
TCP服务器改进版
可同时接收多个连接
11 14 ServerSocket sockser=while(16 Socket sock=sockser.accept(); startServ(sock); 19 }20 System.out.println("open socket err" } 23 }.start(); 24 25 26 startServ(Socket sock){ 27 28 PrintWriter writer=29 InputStream reader=sock.getInputStream();30 31 writer.write("-东小东-"32 writer.flush(); 33 34 35 36 boolean Runtobool=; 37 38 39 ]; 40 41 42 43 String datax=44 System.out.println(sock.getRemoteSocketAddress()+"==>收到数据:"+45 bytes = 47 48 System.out.println("client server break err"49 Runtobool=51 }52 Runtobool=53 System.out.println("rev socket err" }} }.start(); 56 57 }(Exception e) { 58 System.out.println("异常-----"59 61 62 63 64 65 66 }