☰
java学习笔记(二十)——网络编程
2026/10/26 1:27:47 网站建设 项目流程

文章目录

  • 基本的通信架构
    • CS
    • BS
  • 网络通信三要素
    • IP地址
    • 端口号
    • 协议
      • 传输层的两个通信协议(UDP和TCP)
  • CS
    • UDP通信
    • TCP通信
    • CS架构(群聊)
  • BS

基本的通信架构

CS

BS

网络通信三要素

IP地址



  • IP地址的代表类是谁?
    InetAddress类

  • 如何获取本机IP对象
    public static InetAddress getLocalHost()

  • 如何判断与该IP地址对象是否互通?
    public boolean isReachable(int timeout)

端口号


唯一标识正在计算机设备上运行的进程(程序)

协议

传输层的两个通信协议(UDP和TCP)


TCP通信协议的特点是什么样的?

  • 它是一种面向连接的可靠通信协议。

  • 传输前,采用“三次握手”方式建立连接,点对点的通信,所以可靠。

  • 在连接中可进行大数据量的传输。 通信效率较低。

UDP协议的特点是什么

  • 用户数据报协议(User Datagram Protocol)
  • UDP是面向无连接,不可靠传输的通信协议。
  • 速度快,有大小限制一次最多发送64K,数据不安全,易丢失数据

CS

UDP通信


客户端

服务端

TCP通信

客户端

TCP通信,客户端的代表类是谁?
Socket类
public Socket(String host , int port)

TCP通信,如何使用Socket管道发送、接收数据 ?
OutputStream getOutputStream():获得字节输出流对象(发)
InputStream getInputStream():获得字节输入流对象(收)

服务端

服务端实现步骤
创建ServerSocket对象,注册服务端端口。
调用ServerSocket对象的accept()方法,等待客户端的连接,并得到Socket管道对象。
通过Socket对象调用getInputStream()方法得到字节输入流、完成数据的接收。
释放资源:关闭socket管道

CS架构(群聊)

端口转发

Client

package TCP; import java.io.DataOutputStream; import java.io.IOException; import java.io.OutputStream; import java.net.*; import java.util.Scanner; public class Client { static void main() throws IOException { InetAddress ip1=InetAddress.getLocalHost(); System.out.println(ip1); Socket socket=new Socket(ip1,8888); Scanner sc=new Scanner(System.in); OutputStream os=socket.getOutputStream(); DataOutputStream dos=new DataOutputStream(os); new ClientReader_Thread(socket).start(); while (true) { String msg=sc.nextLine(); if(msg.equals("exit")){ System.out.println("退出了客户端,欢迎下次光临"); break; } dos.writeUTF(msg); } dos.close(); socket.close(); } }

ClientReader

package TCP; import java.io.DataInputStream; import java.io.IOException; import java.io.InputStream; import java.net.Socket; public class ClientReader_Thread extends Thread{ private Socket socket; public ClientReader_Thread(Socket socket){ this.socket=socket; } @Override public void run() { InputStream is = null; try { is = socket.getInputStream(); } catch (IOException e) { throw new RuntimeException(e); } DataInputStream dis = new DataInputStream(is); while (true) { try { String msg = dis.readUTF(); System.out.println(msg); System.out.println("————————————"); } catch (IOException e) { System.out.println("自己下线了"+socket.getRemoteSocketAddress()); break; } } } }

Server

package TCP; import java.io.DataInputStream; import java.io.IOException; import java.io.InputStream; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; public class Server { public static ArrayList<Socket> onlineSockets=new ArrayList<>(); static void main() throws IOException { System.out.println("服务端已启动"); ServerSocket serverSocket= new ServerSocket(8888); while (true) { Socket socket=serverSocket.accept(); onlineSockets.add(socket); System.out.println("有人上线了"+socket.getRemoteSocketAddress()); SeverReader_Thread thread=new SeverReader_Thread(socket); thread.start(); } } }

ServerReader

package TCP; import java.io.*; import java.net.Socket; public class SeverReader_Thread extends Thread{ private Socket socket; public SeverReader_Thread(Socket socket){ this.socket=socket; } @Override public void run() { InputStream is = null; try { is = socket.getInputStream(); } catch (IOException e) { throw new RuntimeException(e); } DataInputStream dis = new DataInputStream(is); while (true) { try { String msg = dis.readUTF(); System.out.println(msg); sendToall(msg); System.out.println("————————————"); } catch (IOException e) { System.out.println("有人下线了"+socket.getRemoteSocketAddress()); Server.onlineSockets.remove(socket); break; } } } private void sendToall(String msg) throws IOException { for (Socket onlineSocket : Server.onlineSockets) { OutputStream os=onlineSocket.getOutputStream(); DataOutputStream dos=new DataOutputStream(os); dos.writeUTF(msg); dos.flush(); } } }

BS

package BS; import java.io.DataOutputStream; import java.io.IOException; import java.io.OutputStream; import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket; import java.net.UnknownHostException; public class Server { static void main() throws IOException { InetAddress ip1=InetAddress.getLocalHost(); System.out.println(ip1); ServerSocket serverSocket=new ServerSocket(1145); while (true) { Socket socket=serverSocket.accept(); System.out.println(socket.getRemoteSocketAddress()); new ServerReader_Thread(socket).start(); } } }
package BS; import java.io.DataOutputStream; import java.io.IOException; import java.io.OutputStream; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; public class ServerReader_Thread extends Thread{ Socket socket=new Socket(); public ServerReader_Thread(Socket socket){ this.socket=socket; } @Override public void run(){ OutputStream os= null; try { os = socket.getOutputStream(); } catch (IOException e) { throw new RuntimeException(e); } PrintWriter printWriter=new PrintWriter(os); printWriter.println("HTTP/1.1 200 OK"); printWriter.println("Content-Type: text/html; charset=UTF-8"); printWriter.println(); printWriter.println("<div>王顺喜欢玩galgame<div>"); printWriter.flush(); try { socket.close(); } catch (IOException e) { throw new RuntimeException(e); } } }

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询