1

好的,我以前用 Java 完成过线程,但我认为应该正确的事情是给我这个错误


package com.mdog.tcpserver;
import java.net.*;
import java.io.*;

public class ServerDriver {


     public static void main(String[] args) throws IOException {

         ServerSocket serverSocket = null;
         boolean listening = true;

         /* bind welcome socket to port */
         try {
             serverSocket = new ServerSocket(1313);
         } catch (IOException e) {
             System.err.println("Could not listen on port: 1313.");
             System.exit(1);
         }


         /* assign thread to each client */
         while(listening){
         new ServerWorker(serverSocket.accept()).start();
         }

         /* close the socket and quit */
         serverSocket.close();
         return;
 }
}





---------


package com.mdog.tcpserver;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

public class ServerWorker implements Runnable {

    private Socket socket = null;

 public ServerWorker(Socket s){
  super();
  this.socket = s;
 }



 public void run() {

         (stuff happens)

    } 
}



错误在这一行“new ServerWorker(serverSocket.accept()).start();” 它说......“方法 start() 对于类型 ServerWorker 是未定义的”

4

2 回答 2

3

new Thread(new ServerWorker(serverSocket.accept())).start()

http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Thread.html#start%28%29

于 2011-01-15T20:24:38.197 回答
1

抱歉,我不知道如何在评论中添加评论。但

在一段时间循环中启动新线程???我想这段代码会在一秒钟内崩溃

是错的。接受()块。为每个新套接字(也称为连接客户端)创建新线程(或将作为已经给出的正确答案指出)。与任何其他循环相比,在 while 循环中启动新线程没有任何问题,只要在这种情况下它是合适的。

于 2011-01-15T20:43:41.580 回答