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 }
posted @ 2019-07-30 20:27  东小东  阅读(305)  评论(1)    收藏  举报