import java.io._
import java.net.{InetAddress, ServerSocket, Socket}
// 获取 InetAddress 实例
object InetAddressTest extends App {
// 通过 域名/IP地址 获取 ip对象
private val address: InetAddress = InetAddress.getByName("www.baidu.com")
println(s"通过域名获取ip对象 : ${address}")
private val address1: InetAddress = InetAddress.getByName("110.242.68.4")
println(s"通过ip获取ip对象 : ${address1}")
// 获取本地 ip对象
private val localHost: InetAddress = InetAddress.getLocalHost
println(s"获取本地ip对象 : ${localHost}")
// 获取 域名(hostname)
private val hostName: String = address1.getHostName
println(hostName)
// 获取 IP地址
private val ip: String = address.getHostAddress
println(ip)
// 测试是否可以达到 该主机
private val bool: Boolean = localHost.isReachable(10)
println(bool)
}
// 实现TCP 网络编程
// 案例一 客户端发送信息给服务端,服务端将接收到的信息打在控制台
object ServerSocketTest extends App {
//1. 创建ServerSocket,指定端口号
private val serverSocket = new ServerSocket(8899)
//2. 获取Socket实例
private val socket: Socket = serverSocket.accept
//3. 获取输入流
private val inputStream: InputStream = socket.getInputStream
//4. 读取数据
private val bytes = new Array[Byte](1024)
private var i: Int = inputStream.read(bytes)
while (i != -1) {
println(s"客户端发送的数据 :${new String(bytes, 0, i)}")
i = inputStream.read(bytes)
}
//5. 获取客户端信息
println(s"客户端信息 IP:${socket.getInetAddress} hostname:${socket.getInetAddress.getHostName}")
//5. 关闭资源
inputStream.close
socket.close
serverSocket.close
println("接收完毕")
}
object ClientTest extends App {
//1. 创建Socket对象,指明服务器端ip和端口号
private val address: InetAddress = InetAddress.getByName("127.0.0.1")
private val socket = new Socket(address, 8899)
//2. 获取输出流
private val outputStream: OutputStream = socket.getOutputStream
//3. 写出数据
outputStream.write("你好,大王...".getBytes)
//4. 关闭资源
outputStream.close
socket.close
println("已发送")
}
// 案例二 客户端发送文件给服务端,服务端将文件报错到本地
object ServerSocketTest1 extends App {
//1. 创建ServerSocket,指定端口号
private val serverSocket = new ServerSocket(8899)
//2. 获取Socket实例
private val socket: Socket = serverSocket.accept
//3. 获取输入流
private val inputStream: InputStream = socket.getInputStream
//4. 读取数据 + 保存到本地
private val fileOutputStream = new FileOutputStream("sparkcore/src/main/data/yann架构图3.png")
private val bytes = new Array[Byte](1024)
private var i: Int = inputStream.read(bytes)
while (i != -1) {
fileOutputStream.write(bytes, 0, i)
i = inputStream.read(bytes)
}
//5. 获取客户端信息
println(s"客户端信息 IP:${socket.getInetAddress} hostname:${socket.getInetAddress.getHostName}")
//5. 关闭资源
inputStream.close
socket.close
serverSocket.close
println("接收完毕")
}
object ClientTest1 extends App {
//1. 创建Socket对象,指明服务器端ip和端口号
private val address: InetAddress = InetAddress.getByName("127.0.0.1")
private val socket = new Socket(address, 8899)
//2. 获取输出流
private val outputStream: OutputStream = socket.getOutputStream
//3. 读取图片数据 + 写入数据
private val fileInputStream = new FileInputStream("sparkcore/src/main/data/yarn架构图.png")
private val bytes = new Array[Byte](1024)
private var i: Int = fileInputStream.read(bytes)
while (i != -1) {
outputStream.write(bytes, 0, i)
i = fileInputStream.read(bytes)
}
//4. 关闭资源
outputStream.close
socket.close
println("已发送")
}
// 案例三 客户端发送消息,服务端接收消息后响应(聊天室)
object ServerSocketTest2 extends App {
//1. 创建ServerSocket,指定端口号
private val serverSocket = new ServerSocket(8899)
println("服务器已开启")
//2. 获取Socket实例
private val socket: Socket = serverSocket.accept
//3. 获取输入流 输出流
private val reader = new BufferedReader(new InputStreamReader(socket.getInputStream))
private val writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream))
//4. 读取数据
private var mes: String = reader.readLine
while (mes != null) {
println(s"${socket.getInetAddress.getHostName} : ${mes}")
mes = reader.readLine
}
//5. 关闭资源
reader.close
writer.close
socket.close
serverSocket.close
println("接收完毕")
}
object ClientTest2 extends App {
//1. 创建Socket对象,指明服务器端ip和端口号
private val address: InetAddress = InetAddress.getByName("127.0.0.1")
private val socket = new Socket(address, 8899)
println("客户端已开启")
//3. 获取输入流 输出流
private val reader = new BufferedReader(new InputStreamReader(socket.getInputStream))
private val writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream))
// 获取 stdin
private val stdin: BufferedReader = new BufferedReader(new InputStreamReader(System.in))
//4. 读取数据
println("请输入...按q退出")
private var line: String = stdin.readLine
while (line.contains("q") != true) {
writer.write(line + "\n")
writer.flush
line = stdin.readLine
println("发送成功")
}
//4. 关闭资源
stdin.close
reader.close
writer.close
socket.close
println("已发送")
}