Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 使用socket的Scala客户机-服务器多线程_Multithreading_Scala_Sockets_Client Server - Fatal编程技术网

Multithreading 使用socket的Scala客户机-服务器多线程

Multithreading 使用socket的Scala客户机-服务器多线程,multithreading,scala,sockets,client-server,Multithreading,Scala,Sockets,Client Server,我在这里想不起这个 我是Scala的初学者,刚出生几周,尝试过,但失败了 我读过并尝试过关于演员、未来等的书籍,但这些都不适合我 您能否提供一个服务器客户端示例(或至少是服务器端)的代码 假设使用一个套接字打开连接,该套接字从多个客户端接收字符串(即文件路径),并在一个线程中处理每个客户端 import java.net.{Socket, ServerSocket} import java.util.concurrent.{Executors, ExecutorService} import j

我在这里想不起这个 我是Scala的初学者,刚出生几周,尝试过,但失败了 我读过并尝试过关于演员、未来等的书籍,但这些都不适合我

您能否提供一个服务器客户端示例(或至少是服务器端)的代码 假设使用一个套接字打开连接,该套接字从多个客户端接收字符串(即文件路径),并在一个线程中处理每个客户端

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

}
}

你有几个选择。您可以使用相同的java风格的应用程序,基本上只使用java标准库和scala语法

也许这有助于:

您只需要编写逻辑来处理新线程中的每个套接字(从accept()获得的套接字)

然而,我不建议直接使用普通的旧java方法。有很多很好的库可以为您处理这些问题。例如阿克卡:


我还想敦促您阅读有关futures的内容,因为它们对于异步操作非常有用。

这里是Scala中TCP服务器与Akka IO的示例:plz zend me da codez?你尝试了什么?你在哪里失败了?我们可以提供帮助。添加了试用代码,您可以看看“它对我不起作用”是不够的。你被困在哪里?哪些部件工作/不工作?症状是什么?您尝试过什么?我特别擅长从每个客户端接收线程字符串,并在其自己的线程(或参与者)上处理它。[val in=new BufferedReader(new InputStreamReader(socket.getInputStream)).readLine]不能在while循环之外处理,因为它的值会根据客户端的不同而变化