【发布时间】:2014-06-09 19:51:01
【问题描述】:
我无法理解这里的这个 我是几周前的 Scala 初学者,尝试过但失败了 我已经阅读并尝试过有关 Actors、Futures 等的内容并没有为我工作
您能否提供一个服务器客户端示例(或至少是服务器端)的代码 假设使用从多个客户端接收字符串(即文件路径)并在线程中处理每个客户端的套接字打开连接
import java.net.{Socket, ServerSocket}
import java.util.concurrent.{Executors, ExecutorService}
import java.util.Date
import java.io._
import scala.io._
import java.nio._
import java.util._
import scala.util.control.Breaks
import java.security.MessageDigest
import java.security.DigestInputStream
import scala.util.Sorting
class NetworkService(port: Int, poolSize: Int) extends Runnable {
val serverSocket = new ServerSocket(port)
val pool: ExecutorService = Executors.newFixedThreadPool(poolSize)
def run() {
try {
var i = 0
while (true) {
// This will block until a connection comes in.
val socket = serverSocket.accept()
val in = new BufferedReader(new InputStreamReader(socket.getInputStream)).readLine
/*var f = new FileSplit(in) //FileSplit is another class that i would like each
// client's sent string to be passed as an instance of
f.move*/
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
}
}
【问题讨论】:
-
请给我发代码?你尝试过什么,你在哪里失败了?我们可以提供帮助。
-
已添加试用码您可以看看
-
“它对我不起作用”是不够的。你被困在哪里了?哪些部分工作/不工作?有什么症状?你试过什么?
-
我特别卡在从每个客户端接收线程字符串并在自己的线程(或参与者)上处理它
-
[val in = new BufferedReader(new InputStreamReader(socket.getInputStream)).readLine] 不能在while循环外处理,因为它的值会根据客户端而变化
标签: multithreading scala sockets client-server