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