java学习笔记(二十)——网络编程

发布时间:2026/10/26 1:28:23
java学习笔记(二十)——网络编程 文章目录基本的通信架构CSBS网络通信三要素IP地址端口号协议传输层的两个通信协议(UDP和TCP)CSUDP通信TCP通信CS架构(群聊)BS基本的通信架构CSBS网络通信三要素IP地址IP地址的代表类是谁InetAddress类如何获取本机IP对象public static InetAddress getLocalHost()如何判断与该IP地址对象是否互通public boolean isReachable(int timeout)端口号唯一标识正在计算机设备上运行的进程程序协议传输层的两个通信协议(UDP和TCP)TCP通信协议的特点是什么样的?它是一种面向连接的可靠通信协议。传输前采用“三次握手”方式建立连接点对点的通信所以可靠。在连接中可进行大数据量的传输。 通信效率较低。UDP协议的特点是什么用户数据报协议(User Datagram Protocol)UDP是面向无连接不可靠传输的通信协议。速度快有大小限制一次最多发送64K数据不安全易丢失数据CSUDP通信客户端服务端TCP通信客户端TCP通信客户端的代表类是谁Socket类public Socket(String host , int port)TCP通信如何使用Socket管道发送、接收数据 ?OutputStream getOutputStream()获得字节输出流对象发InputStream getInputStream()获得字节输入流对象收服务端服务端实现步骤创建ServerSocket对象注册服务端端口。调用ServerSocket对象的accept()方法等待客户端的连接并得到Socket管道对象。通过Socket对象调用getInputStream()方法得到字节输入流、完成数据的接收。释放资源关闭socket管道CS架构(群聊)端口转发Clientpackage 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 ip1InetAddress.getLocalHost(); System.out.println(ip1); Socket socketnew Socket(ip1,8888); Scanner scnew Scanner(System.in); OutputStream ossocket.getOutputStream(); DataOutputStream dosnew DataOutputStream(os); new ClientReader_Thread(socket).start(); while (true) { String msgsc.nextLine(); if(msg.equals(exit)){ System.out.println(退出了客户端欢迎下次光临); break; } dos.writeUTF(msg); } dos.close(); socket.close(); } }ClientReaderpackage 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.socketsocket; } 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; } } } }Serverpackage 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 ArrayListSocket onlineSocketsnew ArrayList(); static void main() throws IOException { System.out.println(服务端已启动); ServerSocket serverSocket new ServerSocket(8888); while (true) { Socket socketserverSocket.accept(); onlineSockets.add(socket); System.out.println(有人上线了socket.getRemoteSocketAddress()); SeverReader_Thread threadnew SeverReader_Thread(socket); thread.start(); } } }ServerReaderpackage TCP; import java.io.*; import java.net.Socket; public class SeverReader_Thread extends Thread{ private Socket socket; public SeverReader_Thread(Socket socket){ this.socketsocket; } 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 osonlineSocket.getOutputStream(); DataOutputStream dosnew DataOutputStream(os); dos.writeUTF(msg); dos.flush(); } } }BSpackage 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 ip1InetAddress.getLocalHost(); System.out.println(ip1); ServerSocket serverSocketnew ServerSocket(1145); while (true) { Socket socketserverSocket.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 socketnew Socket(); public ServerReader_Thread(Socket socket){ this.socketsocket; } Override public void run(){ OutputStream os null; try { os socket.getOutputStream(); } catch (IOException e) { throw new RuntimeException(e); } PrintWriter printWriternew PrintWriter(os); printWriter.println(HTTP/1.1 200 OK); printWriter.println(Content-Type: text/html; charsetUTF-8); printWriter.println(); printWriter.println(div王顺喜欢玩galgamediv); printWriter.flush(); try { socket.close(); } catch (IOException e) { throw new RuntimeException(e); } } }

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询