我无法理解这个问题 我是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
}
}
答案 0 :(得分:2)
您有多种选择。你可以做同样的旧java风格的应用程序,基本上只使用java标准库和scala语法。
也许这会有所帮助:Scala equivalent of python echo server/client example?
你只需要在新线程中编写处理每个套接字(你从accept()得到的套接字)的逻辑。
但是我不建议直接使用普通的旧java方法。有很棒的图书馆可以为你处理。例如Akka:
http://doc.akka.io/docs/akka/2.3.3/scala/io-tcp.html
我还会敦促你阅读关于期货的内容,因为它们对于做同步异步非常有用。