笔记(十七):网络编程

    科技2025-12-26  12

    网络编程

    C\S与B\S架构TCP与UDPJava网络编程在线聊天室

    C\S与B\S架构

    C\S: Client\Server,即客户端\服务器; B\S: Browser\Server,即浏览器\服务器,本质上,浏览器就是一个标准化的客户端。

    TCP与UDP

    谈网络一定要线讲述两种网络协议: TCP:可靠传输协议(既保证信息发送成功,也保证信息接受成功,否则就重新发送) 传输的信息必须保证送达计算机,但是速度慢,占资源多

    UDP:不可靠传输协议(只保证信息发送成功,不保证信息接受成功) 传输的信息不保证送达目标计算机,但是速度快,及时性强,占用资源少

    Java网络编程

    Socket类: 封装了TCP协议的通讯细节,使得我们使用它就可以完成与远端计算机的TCP连接以及数据传输,并且完成数据传输是基于两条流的读写进行的。

    在线聊天室

    客户端代码

    package com.tedu.socket; import java.io.BufferedWriter; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.io.UnsupportedEncodingException; import java.net.Socket; import java.util.Scanner; public class Client { /* * java.net.socket * Socket封装了TCP通信细节,我们只需要明确IP地址和端口号 * 像服务器端发送输出流(输入流)即可 */ private Socket socket; public Client() { try { /* * 实例化Socket需要俩个参数 * 1.服务器服务端IP地址 * 2.服务器端,端口号 * * 只要实例化成功就是连接成功 * 如果连接失败就会出现异常 * */ System.out.println("正在连接服务器……"); //socket = new Socket("localhost", 8088); socket = new Socket("172.114.52.93",8088); System.out.println("已连接服务器……"); } catch (Exception e) { e.printStackTrace(); } } /** * 具体控制客户端说话的方法 */ public void start() { /* * 发送信息,需要输出流 * 输出到服务端 */ try { OutputStream os = socket.getOutputStream(); OutputStreamWriter osw = new OutputStreamWriter(os,"utf-8"); BufferedWriter bw = new BufferedWriter(osw); PrintWriter pw = new PrintWriter(bw,true); Scanner sc = new Scanner(System.in); while(true) { String line = sc.nextLine(); pw.println(line); } } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { Client client = new Client(); client.start(); } }

    package com.tedu.socket;

    import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket;

    /**

    聊天室服务器端@author Wildmess

    */ public class Server {

    /* * java.net.ServerSocket * 服务器端运行这个类的对象 * 1.申请服务端口 * 2.能够监听客户端发送过来的信息 */ private ServerSocket server; private PrintWriter[] allout = {}; public Server() { try { /* * 实例化ServerSocket对象 * 向操作系统申请端口 * 如果这个端口被占用就会发生异常 */ System.out.println("服务器正在启动……"); server = new ServerSocket(8088); InetAddress ip = InetAddress.getLocalHost(); System.out.println("服务器"+ ip +"启动完毕"); } catch (Exception e) { e.printStackTrace(); } } public void start() { /* * 返回值使用一个Socket * server.accept() * 这个方法是一个阻塞方法,调用后,程序暂停等待客户端的信息发送过来 * 没有信息过来就一直等 */ try { System.out.println("等待客户端连接……"); Socket socket = server.accept();//等价于正常情况下的Scanner System.out.println("客户端连接了……"); //从socket中获取输入流 InputStream is = socket.getInputStream(); InputStreamReader isr = new InputStreamReader(is,"utf-8"); BufferedReader br = new BufferedReader(isr); String line=null; while((line= br.readLine()) != null) { System.out.println(line); } } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { Server server = new Server(); server.start(); }

    }

    Processed: 0.020, SQL: 9