关于一个ServerSocket的问题!高手帮帮!
我这几天在看孙鑫讲题的一个服务器和客户端发信息的一个课程!
里面有一个程序是这样的:
class Server extends Thread{
private Socket s;
public Server(Socket s){
this.s=s;//1.他这样表试的意思是什么?
}
public void run(){
//2.这里是Thread的默认方法,可是为什么要用呢.我却不是很明白
try{
OutputStream ou = s.getOutputStream();
InputStream in = s.getInputStream();
ou.write( "用户你好 ".getBytes());
byte[] b = new byte[100];
in.read(b);
System.out.println(new String(b, 0, b.length));
s.close();
ou.close();
in.close();
}catch(Exception ce){
ce.printStackTrace();
}
}
public static void main(String[] args) {
if (args.length > 0)
serve();
else
client();
}
public static void serve() {
try {
ServerSocket ss = new ServerSocket(5000);
while(true){
Socket s=ss.accept();
new Server(s).start();//3.还有这里的声明
}
}catch (Exception ce) {
ce.printStackTrace();
}
}
上面三个问题,真是把我搞晕了.我看了一天的Thread讲解,可是孙鑫讲得很死板,我理解起来困难!
希望有高手指点!
------解决方案--------------------1 this.s=s;表示把方法形参的Socket类型的s赋值给该类的Socket类型的s,由于变量名相同,所以类里的s用this修饰下。
2 Thread的run方法表示运行该线程的时候调用该run方法
3 new Server(s).start(),前部分new Server(s)表示new了一个对象,然后调用该对象的start方法。start方法就是执行线程,即执行线程里的run代码段!
------解决方案--------------------应该先看erve()方法
在主函数中 如果有参数的话就调用erve()方法
新建一个服务器socket把这个socket传给Server的一个实例 就是new Server(s)
这个socket的引用就给了 this.s 在run方法中使用这个socket
这个Server继承了Thread 类
当然就要重写run方法