我在套接字编程的scala代码中有一个While循环,其中我将socket.inputstream变为变量
这里的问题是我不能在main函数或任何其他函数中使用此变量
class NetworkService(port: Int, poolSize: Int) extends Runnable {
val serverSocket = new ServerSocket(port)
val pool: ExecutorService = Executors.newFixedThreadPool(poolSize)
def run() {
try {
while (true) {
// This will block until a connection comes in.
val socket = serverSocket.accept()
val in = new BufferedReader(new InputStreamReader(socket.getInputStream)).readLine
pool.execute(new Handler(socket))
}
} finally {
pool.shutdown()
}
}
}
class Handler(socket: Socket) extends Runnable {
def message = (Thread.currentThread.getName() + "\n").getBytes
def run() {
socket.getOutputStream.write(message)
socket.getOutputStream.close()
}
}
object MyServer {
def main(args: Array[String]) {
(new NetworkService(2030, 2)).run
////////I WANT TO USE THE IN here
}
}
我想将变量作为参数传递给另一个函数
答案 0 :(得分:2)
您无法在in
例程中使用main
。从逻辑上讲,这样做是没有意义的。一方面,while循环和in
的多个值会创建多个连接,因此逻辑上没有in
的单个值在这一点上有意义。致电main
后run
。任何需要引用in
的代码都应该放在while循环中。那可能是例如包含对另一个函数的调用,在该函数中将in
作为参数传递。