Scala编写的简单Socket聊天程序

这几天被Scala吸引住了,去图书馆借了本《快学Scala》,发现很funny~,然后无意在youtube上看到一个关于scala的socket编程。于是跟着学习,整理了一下代码,如下:

服务器代码:

package com.server

import java.net.{ServerSocket,Socket}
import java.io.BufferedInputStream
import java.io.BufferedOutputStream
import java.io.PrintStream
import java.io.InputStream
import collection.mutable
import java.io.InputStreamReader
import java.io.BufferedReader
/**
 * 基于Socket的简单聊天服务器,实现代理功能,加入客户端自定义名字。利用Scala中的Actor实现并发。
 * @author 邓慧
 */
object SimpleNet {
  case class User(sock:Socket,is:BufferedReader,ps:PrintStream,name:String)
  def main(args : Array[String]) : Unit = { 
    val users = new mutable.ArrayBuffer[User] with mutable.SynchronizedBuffer[User]
    val ss = new ServerSocket(4444) 
    actors.Actor.actor{
      while(true){
        val sock = ss.accept()
        val is = new BufferedReader(new InputStreamReader(sock.getInputStream()))
        val os = new PrintStream(sock.getOutputStream())
       actors.Actor.actor{
          os.println("what's your name?")
          users += User(sock,is,os,is.readLine())      
        }
      } 
    }
    while(true){
      for(user <- users){
        if(user.is.ready()){
          val input = user.is.readLine()
          for(user2 <- users){
            user2.ps.println(user.name+":"+input)
          }
        }
      }
    }
  }
}

本人觉得这好简洁,java的确太冗余了。


客户端代码:

package com.client

import java.net.Socket
import java.io.BufferedReader
import java.io.InputStreamReader
import java.io.PrintStream
/**
 * simple聊天客户端,发送和接受字符串
 */
object ChatClient {
  def main(args : Array[String]): Unit={
    val host = "localhost"
    val port = 4444
    val sock = new Socket(host,port)
    val is = new BufferedReader(new InputStreamReader(sock.getInputStream()))
    val os = new PrintStream(sock.getOutputStream())
    actors.Actor.actor{
      while(true){
        if(is.ready()){
          val output = is.readLine()
          println(output)
        }
      }
    }
    while(true){
      val input = readLine
      os.println(input)
    }
  }
}




  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值