38_网络编程_TCP
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("已发送") }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界