我使用Scala的远程演员编写了一个程序。我的第一步是创建一个通过loopback(127.0.0.1)进行通信的客户端和服务器,它运行良好。当我尝试在同一网络上的两个站之间进行通信时,服务器不会捕获任何内容。我在本地和远程客户端程序之间唯一改变的是服务器的IP地址。
以下是客户端代码:
case class Post(msg: String)
object Client extends Application {
val client = new ClientRemote
client.sendMessage
}
class ClientRemote extends Actor {
val server = select(Node("127.0.0.1", 9010), 'name) //' or server IP
def sendMessage(): Unit = {
server ! Post("Hello!")
}
def act() {
// do something
}
}
这是服务器代码:
case class Post(msg: String)
object Server extends Application {
val server = new ServerRemote
server.start
}
class ServerRemote extends Actor {
def act() {
alive(9010)
println("server is started!")
register('name, self) //' register to port
loop {
react {
case Post(msg) => println(msg)
}
}
}
}
有人知道为什么这些程序不起作用或对解决方案有任何想法吗?
感谢
答案 0 :(得分:0)
您可以在客户端和服务器代码的开头添加“scala.actors.Debug.level = 3”,以获取有关actor子系统正在执行的操作的更多信息。例如,这将告诉您消息是否已收到但是已丢弃,或者是否在其他端口上侦听,等等。
答案 1 :(得分:0)
我对Java的了解比我对Scala的了解更多,但是你可以通过类加载器将Post案例类的重复定义视为不同的类吗?