新手入门 请老师指点 Runnable 里重写的Run方法不被执行 高手指点一二

重写 RUN方法里的 代码不被执行 请老师指点。


package com.sairui.shixian;

import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.rmi.ConnectIOException;

public class Yunxing {
	 public void yx() {
		try {
			System.out.println("服务器启动。。。");
			ServerSocket serverSocket = new ServerSocket(8859);	
		 while (true) {
			Socket socket=serverSocket.accept();
			new Thread(new connio(socket)).start();		
		}
		} catch (IOException e) {
			e.printStackTrace();
		}
	 }
	}

class connio implements Runnable{
	private Socket socket;
	
	
	connio (Socket kehuduanSocket){
		this.socket=kehuduanSocket;
		System.out.println("客户端接入:"+socket);
	}
	@Override
	public void run() {
		try {
			InputStream ins= socket.getInputStream();
			byte[] data=new byte[128];
			ins.read(data);
		    String str= new String(data);
		    System.out.println(str);
		 
		
		}catch (Exception e) {
			e.printStackTrace();
		}		
	}	
}

 

 你看的教程里现在的代码应该是在实现一个简单的 web server吧,你的代码是没问题的,但是你没有理解这一部分到底是在教啥。

下面这一句作用是等待客户端的请求到达,啥意思呢?意思就是必须有客户端来访问你实现的这个服务端才行。

最简单的方法就是浏览器里访问 `http://127.0.0.1:8859`

Socket socket=serverSocket.accept();

 

 

建议入门的话不要从网络编程开始学,直接学这个需要不少知识储备的,很多教程视频都是面向有一定基础的人的,可能出教程的人随口说的一个词一句话就导致没基础的人懵逼很长时间

accept()阻塞了吧。一直在等,下面的就不执行了。

把它close掉应该就能下去了。

所以,看看书,学学socket编程怎么搞。

package com.sairui.shixian;

import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.rmi.ConnectIOException;

public class Yunxing {
     public void yx() {
        try {
            System.out.println("服务器启动。。。");
            ServerSocket serverSocket = new ServerSocket(8859);    
         while (true) {
            Socket socket=serverSocket.accept();
            new Thread(new connio(socket)).start();        
        }
        } catch (IOException e) {
            e.printStackTrace();
        }
     }
    }

class connio implements Runnable{
    private Socket socket;
    
    
    connio (Socket kehuduanSocket){
        this.socket=kehuduanSocket;
        System.out.println("客户端接入:"+socket);
    }
    @Override
    public void run() {
        System.out.println("run方法执行");
        try {
            InputStream ins= socket.getInputStream();
            byte[] data=new byte[128];
            ins.read(data);
            String str= new String(data);
            System.out.println(str);
         
        
        }catch (Exception e) {
            e.printStackTrace();
        }        
    }    
}

 

服务器启动。。。
客户端接入:Socket[addr=/192.168.18.166,port=7500,localport=8859]
run方法执行
 

老师 run方法里面的try{}代码块不执行呢

是很懵逼

关键是如图代码:

  

图中  1 是在等待接受客户端发来的信息,客户端没有发信息,会一直阻塞在1,不会执行2,2没有执行那么start()方法就不会执行,

自然run()方法也不会执行,这块儿理解的话看看多线程编程就行。

执行情况是:client------>server-->accept()-->start()-->run()

当我在client输入123456,服务器端执行情况如下:

这是不是就理解了为什么没执行

有问题可以私信,以上希望能帮到你....