![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
计算机网络
伊颦伊笑
人的悲欢并不相通
展开
-
网络多线程——多用户即时通信系统(13)——服务端推送新闻
服务端服务端推送消息/新闻,本质其实就是群发消息在服务器启动一条独立线程,专门负责推送新闻在服务器端添加 Utility 工具类在服务端新建 SendNewsToAllService 类package com.qqserver.service;import com.qqcommon.Message;import com.utils.Utility;import java.io.IOException;import java.io.ObjectOutputStream;im原创 2021-10-20 16:37:07 · 185 阅读 · 1 评论 -
网络多线程——多用户即时通信系统(12)——发文件
客户端客户端先把文件 a.jpg 读取到客户端,字节数组把文件对应的字节数组封装到 message 对象【包含文件内容、sender、getter】将 message 对象发送给服务端在接收到包含有文件的消息后,将将该文件保存到磁盘服务端服务端接收到 message 对象拆解 message 对象的 getterId,获取该用户的通信线程把 message 对象转发给指定用户.在服务端和客户端进行“消息”扩展MessageType 接口:Message 类:在客户端新原创 2021-10-20 16:07:22 · 195 阅读 · 0 评论 -
网络多线程——多用户即时通信系统(11)——群聊代码实现
QQView:在服务端和客户端添加新的消息类型MessageClientService 中添加新方法 /** * @param content 内容 * @param senderId 发送者 */ public void sendMessageToAll(String content, String senderId){ // 构建 Message Message message = new Message();原创 2021-10-19 20:46:19 · 163 阅读 · 0 评论 -
网络多线程——多用户即时通信系统(10)——私聊代码实现
客户端接收用户希望给某个其它在线用户聊天的内容。将消息构建成 Message 对象,通过对应的 socket 发送给服务器在他的线程(通信线程中),读取到发送的 message 消息,并显示即可服务端可以读取到客户端发送给某个客户的消息从管理线程的集合中,根据 message 对象的 getterId 获取到对应线程的 socket然后将 message 对象转发给指定客户QQView创建 MessageClientService 类,来提供和消息相关的方法package原创 2021-10-19 16:17:32 · 319 阅读 · 0 评论 -
网络多线程——多用户即时通信系统(9)——无异常退出系统
客户端在客户端的 UserClientService 类中编写 logout 方法 // 1. 验证用户登录 .... // 2. 向服务器端请求在线用户列表 .... // 3. 编写方法,退出客户端,并给服务端发送一个退出系统的 Message 对象 public void logout(){ Message message = new Message(); message.setMesType(MessageType.M.原创 2021-10-14 21:05:10 · 146 阅读 · 0 评论 -
网络多线程——多用户即时通信系统(8)——拉取在线用户列表:服务端
在 ManageServerConnectClientThread 中编写方法,返回在线用户列表 // 编写方法,返回在线用户列表 public static String getOnlineUser(){ // 通过 keySet() 方法进行遍历 Set<String> keys = map.keySet(); String onlineUserList = ""; for (String key : key原创 2021-10-14 19:25:02 · 180 阅读 · 0 评论 -
网络多线程——多用户即时通信系统(7)——拉取在线用户列表:客户端
在客户端和服务端的 MessageType 中添加几个新类型 String MESSAGE_COMM_MES = "3"; // 普通信息报 String MESSAGE_GET_ONLINE_FRIEND = "4"; // 获取在线用户列表 String MESSAGE_RETURN_ONLINE_FRIEND = "5"; // 返回在线用户列表 String MESSAGE_CLIENT_EXIT = "6"; // 客户端请求退出客户端部分:拉取在线用原创 2021-10-14 18:50:19 · 197 阅读 · 0 评论 -
网络多线程——多用户即时通信系统(6)——设计可登录用户集合
启动多个客户端:在 QQServer 中创建一个集合,存放多个用户,如果是这些用户登录,就认为是合法的// 创建一个集合,存放多个用户,如果是这些用户登录,就认为是合法的 // HashMap 没有处理线程安全,因此在多线程下是不安全的 // ConcurrentHashMap 实现了同步处理,多线程下是安全的 // private static HashMap<String, User> validUsers = new HashMap<>(原创 2021-10-14 16:12:09 · 166 阅读 · 0 评论 -
网络多线程——多用户即时通信系统(5)——服务端
QQServerpackage com.qqserver.service;import com.qqcommon.Message;import com.qqcommon.MessageType;import com.qqcommon.User;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.net.ServerSocke.原创 2021-10-14 15:14:55 · 187 阅读 · 0 评论 -
网络多线程——多用户即时通信系统(4)——客户端线程管理部分
UserClientServicepackage com.qqclient.service;import com.qqcommon.Message;import com.qqcommon.MessageType;import com.qqcommon.User;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.net.Ine原创 2021-10-14 14:09:26 · 146 阅读 · 0 评论 -
网络多线程——多用户即时通信系统(3)——客户端线程部分
设计客户端部分的线程,线程持有 Socket 对象UserClientServicepackage com.qqclient.service;import com.qqcommon.Message;import com.qqcommon.MessageType;import com.qqcommon.User;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutput原创 2021-10-14 11:31:17 · 172 阅读 · 0 评论 -
网络多线程——多用户即时通信系统(2)——客户端界面部分
客户端复制一份 Utility.java 工具类到 com.qqclient.utils 包下:Utility 代码:package com.qqclient.utils;/** 工具类的作用: 处理各种情况的用户输入,并且能够按照程序员的需求,得到用户的控制台输入。*/import java.util.*;/** */public class Utility { //静态属性。。。 private static Scanner scanner = new S原创 2021-10-14 11:28:23 · 415 阅读 · 0 评论 -
网络多线程——多用户即时通信系统(1)——公共部分
需求分析用户登录拉取在线用户列表无异常退出(服务端、客户端)私聊群聊发文件服务器推送新闻通信系统示意图客户端和服务端共有的类:Message、UserUser 类:package com.qqcommon;import java.io.Serializable;/** * @Author: Gin * @Description: 表示一个用户 / 客户信息 * @Modified By: Gin * @Date: Created in 15:04 2021/1原创 2021-10-14 10:21:27 · 181 阅读 · 0 评论 -
网络多线程——网络编程练习
TCP 练习使用字符流的方式,编写一个客户端程序和服务器端程序,客户端发送 “name”,服务器端接收到后,返回 "我是nova ",nova是你自己的名字客户端发送 “hobby”,服务器端接收到后,返回 “编写java程序”不是这两个问题,回复 “你说啥呢”服务端package net.udp;import java.io.*;import java.net.ServerSocket;import java.net.Socket;/** * @Author: Gin *原创 2021-10-12 17:16:38 · 347 阅读 · 0 评论 -
网络多线程——UDP网络通信编程
基本介绍类 DatagramSocket【数据报套接字】 和 DatagramPacket【数据包 / 数据报】 实现了基于 UDP协议网络程序。UDP数据报通过数据报套接字 DatagramSocket 发送和接收,系统不保证UDP数据报一定能够安全送到目的地,也不能确定什么时候可以抵达。DatagramPacket 对象封装了 UDP 数据报,在数据报中包含了发送端的 IP 地址和端口号以及接收端的 IP 地址和端口号。UDP 协议中每个数据报都给出了完整的地址信息,因此无须建立发送方和接收方原创 2021-10-12 15:03:01 · 638 阅读 · 0 评论 -
网络多线程——TCP网络通讯不为人知的秘密
TCP网络通讯不为人知的秘密当客户端连接到服务端后,实际上客户端也是通过一个端口和服务端进行通讯的,这个端口是 TCP/IP 来分配的原创 2021-10-09 23:47:48 · 66 阅读 · 0 评论 -
网络多线程——netstat
netstat 指令netstat -an:可以查看当前主机的网络情况,包括端口监听情况和网络连接情况netstat -an | more:可以分页显示,按 空格键 以逐页显示netstat -anb:使用管理员权限开启 dos 控制台,输入此指令可以查看每个端口被哪个应用所监听说明:LISTENING 表示某个端口在监听如果有一个外部程序(客户端)连接到该端口,就会显示一条连接信息可以输入 ctrl + c 退出指令...原创 2021-10-09 19:56:54 · 520 阅读 · 0 评论 -
网络多线程——网络上传文件
应用案例:客户端上传一张图片到服务端编写一个服务端,和一个客户端服务器端在 8888 端口监听客户端连接到服务端,发送一张图片:e:\baidu.png服务器端接收到客户端发送的图片,保存到 src 下,发送 “收到图片” 再退出客户端接收到服务端发送的 “收到图片”,再退出分析:设计一个 StreamUtils 工具类package net;import java.io.*;/** * @Author: Gin * @Description: * @Modified原创 2021-10-09 19:35:54 · 216 阅读 · 0 评论 -
网络多线程——TCP网络通信编程
应用案例 1 (使用字节流)编写一个服务器端和一个客户端服务器端在9999端口监听客户端连接到服务器端,发送 “hello,server”,然后退出服务器端接收到客户端发送的信息,输出,并退出代码实现服务端代码package net;import java.io.IOException;import java.io.InputStream;import java.net.ServerSocket;import java.net.Socket;/** * @Author原创 2021-10-09 14:36:08 · 287 阅读 · 0 评论 -
网络多线程——Socket
Socket 基本介绍套接字(Socket)开发网络应用程序被广泛采用,以至于成为事实上的标准。通信的两端都要有 Socket,是两台机器间通信的端点网络通信其实就是 Socket 间的通信。Socket 允许程序把网络连接当成一个流,数据在两个 Socket 间通过 IO 传输。一般主动发起通信的应用程序属客户端,等待通信请求的为服务端TCP网络通信编程基本介绍基于 客户端-服务端 的网络通信底层使用的是 TCP/IP 协议应用场景举例:客户端发送数据,服务端接受并显示控制台基原创 2021-10-09 12:32:02 · 129 阅读 · 0 评论 -
网络多线程——InetAddress
InetAddress 类 相关方法获取本机 InetAddress 对象:getLocalHost根据指定主机名/域名获取 ip 地址对象:getByName获取 InetAddress 对象的主机名:getHostName获取InetAddress对象的地址:getHostAddresspackage net;import java.net.InetAddress;import java.net.UnknownHostException;/** * @Author: Gin原创 2021-10-09 11:23:27 · 122 阅读 · 0 评论 -
网络多线程——TCP 和 UDP
TCP 和UDPTCP协议:传输控制协议使用TCP协议前,须先建立TCP连接,形成传输数据通道传输前,采用 “三次握手” 方式,是可靠的TCP 协议进行通信的两个应用进程:客户端、服务端在连接中可进行大数据量的传输传输完毕,需释放己建立的连接,效率低UDP协议:用户数据协议将数据、源、目的封装成数据包,不需要建立连接每个数据包的大小限制在 64K 内,不适合传输大量数据因无需连接,故是不可靠的发送数据结束时无需释放资源(因为不是面向连接的),速度快举例:发短信...原创 2021-10-09 11:02:20 · 162 阅读 · 0 评论 -
网络多线程——网络通信协议
协议(TCP/IP)TCP/IP(Transmission ControlProtocol/lnternet Protocol)的简写中文译名为传输控制协议 / 因特网互联协议,又叫网络通讯协议,这个协议是 Internet最基本的协议、Internet国际互联网络的基础,简单地说,就是由网络层的IP协议和传输层的TCP协议组成的。协议的理解总的来说就是一句话:数据的组织形式,就是协议如下图:用户数据通过多个协议,最后封装为以太网帧...原创 2021-10-09 10:50:01 · 231 阅读 · 0 评论 -
网络多线程——域名和端口
域名www.baidu.com好处:为了方便记忆,解决记 ip 的困难概念:将 ip 地址映射成域名,这里怎么映射上,HTTP协议端口号概念:用于标识计算机上某个特定的网络程序表示形式:以整数形式表示,端口范围:0 ~ 65535【 2 个字节表示端口:0 ~ 2^16-1】0 ~ 1024 号端口已经被占用,比如:ssh 22,ftp 21,smtp 25,http 80常见的网络程序端口号:tomcat:8080,mysql:3306,oracle,1521,sqlserver:1原创 2021-10-09 10:41:55 · 85 阅读 · 0 评论 -
网络多线程——ip 地址
ip 地址概念:用于唯一标识网络中的每台计算机 / 主机查看 ip 地址:ipconfigip 地址的表示形式:点分十进制:xxx.xxx.xxx.xxx每一个十进制数的范围:0 ~ 255ip 地址的组成 = 网络地址 + 主机地址,比如:192.168.16.69IPv6 是互联网工程任务组设计的用于替代 IPv4 的下一代 IP 协议,其地址数量号称可以为全世界的每一粒沙子编上一个地址由于 IPv4 最大的问题在于网络地址资源有限,严重制约了互联网的应用原创 2021-10-09 10:35:21 · 173 阅读 · 0 评论