做网站首页,免费人脉推广,绝对域名做网站,wordpress海淘一、网络编程的基本概念 :
1. 网络 就是将不同区域的电脑连接到一起#xff0c;组成局域网、城域网或广域网。把分部在不同地理区域的计算机于专门的外部设备用通信线路 互联成一个规模大、功能强的网络系统#xff0c;从而使众多的计算机可以方便地互相传递信息#xff0c…一、网络编程的基本概念 :
1. 网络 就是将不同区域的电脑连接到一起组成局域网、城域网或广域网。把分部在不同地理区域的计算机于专门的外部设备用通信线路 互联成一个规模大、功能强的网络系统从而使众多的计算机可以方便地互相传递信息共享硬件、软件、数据信息等资源。
2. 计算机网络 通过传输介质、通信设施和网络通信协议将地理位置相同的具有独立功能的多台计算机及其外部设备连起来实现资源共享 和数据传输的系统。
3. 通信协议
计算机网路中实现通信必须有一些通信协议的规定对传输代码、代码结构、传输控制步骤出错控制等制定标准。
4. 通信接口
为了使两个节点之间能进行对话必须在他们之间建立通信工具即接口使彼此之间能进行信息交换。
5. 网络分层 1. 由于结点之间联系很复杂在指定协议时把复杂成份分解成一些简单的成份再将他们复合起来。最常用的复合方式是层次 方式即同层间可以通信、上一层可以调用下一层而与再下一层不发生关系 2. TCP/IP是一个协议族也是按照层次划分共四层应用层传输层互连网络层接口层(物理数据链路层) 3. OSI网络通信协议模型是一个参考模型而TCP/IP协议是事实上的标准。TCP/IP协议参考了OSI模型但是并没有严格按照OSI规 定的七层标准去划分而只划分了四层这样会更简单点当划分太多层时你很难区分某个协议是属于哪个层次的 二、网络编程三要素
1. IP地址 要想让网络中的计算机能够互相通信必须为计算机指定一个标识号通过这个标识号来指定要接受数据的计算机和识别发送 的计算机而IP地址就是这个标识号也就是设备的标识。
1.1 IP地址分为两大类
IPv4是给每个连接在网络上的主机分配一个32bit地址。按照TCP/IP规定IP地址用二进制来表示每个IP地址的 长32bit也就是4个字节。IPv6由于互联网的蓬勃发展IP地址的需求量愈来愈大但是网络地址资源有限使得IP的分配越发紧张。为了扩 大地址空间通过IPv6重新定义地址空间采用128bit地址长度每16个字节一组分成8组十六进制数这就解决 了网络地址资源数量不够的问题。
1.2 InetAddress类 (在Java中使用InetAddress类代表IP) 常用的方法
String getHostAddress ()返回IP地址字符串以文本表现形式String getHostName ()返回此IP地址的主机名Byte[] getAddress ()返回此InetAddress对象的原始IP地址 2. 端口
2.1 概念 网络的通信本质上是两个应用程序的通信每台计算机都有很多的应用程序。IP地址是唯一的标识网络的设备端口 号就是唯一标识设备中的应用程序也就是应用程序的标识。 2.2 端口号 用两个字节表示的整数它的取值范围是0~65535。其中0~1023之间的端口号用于一些知名的网络服务和应用普通 的应用程序需要使用1024以上的端口号。如果端口号被另外一个服务或应用所占用会导致当前程序启动失败。 2.3 IntetSocketAddress类 包含IP和端口信息常用于Socket通信。此类实现套接字数字地址IP地址端口号不依赖任何协议。 常用的方法
InetAddress getAddress()获得InetAddressInt getPort ()获取端口号String getHostName获取主机名 三、协议 通过计算机网络可以使多台计算机实现连接位于同一网络中的计算机进行连接和通信时需要遵守一定的规则这就好比在道 路中形势的汽车一定要遵守交通规则一样。在计算机网路中这些连接和通信的规则被称为网络通信协议。它对数据的传输格式、传 输速率、传输步骤做了统一规定通信双方必须同时遵守才能完成数据交换。
3.1 UDP协议
用户数据报协议User Datagram ProtocolUDP是预无线通信协议即在数据传输时数据的发送端和接受端不建立逻辑连接。简单来说当一台计算机向另外一台计算机 发送数据时发送端不会确认接受端是否存在就会发送出数据同样接受端在收到数据时夜不会向发送端反馈是否收到数 据由于使用UDP协议消耗资源少通信效率高所以通常都会用于音频、视频和普通数据的传输例如视频会议通常采用UDP协议因为这种情况即使偶尔丢失一两个数据包也不会对接受结果产生太大影响。但是在使用UDP 协议传送数据时由于UDP的面向无连接性不能保证数据的完整性因此在传输重要数据时不建议使用UDP协议。 3.2 TCP协议
传输控制协议Transmission Control ProtocolTCP协议是面向连接的通信协议即传输数据之前在发送端和接受端建立逻辑连接然后再传输数据它提供了两台计算机之 间可靠无差错的数据连接。在TCP连接中必须明确客户端于服务端由于客户端向服务端发出连接请求每次连接的创建都需要 经过“三次握手” 3.3 三次握手
TCP协议中在发送数据的准备阶段客户端与服务器之间的三次交互以保证连接的可靠性
第一次握手 客户端向服务器发送连接请求等待服务器确认
第二次握手 服务器向客户端回送一个响应通知客户端收到了连接请求
第三次握手 客户端再次向服务器发送确认信息确认连接 完成三次握手连接建立后客户端和服务器就可以开始进行数据传输了。由于这种面向连接的特性TCP协议可以保证传输数据 的安全所以应用非常广泛。例如上传文件下载文件、浏览网页。 3.3.1 TCP通信原理 TCP通信协议是一种可靠的网络协议它在通信的两端各建立一个Socket对象从而在通信的两端形成网络虚拟链路一旦建 立了虚拟的网络链路两端的程序就可以通过虚拟链路进行通信。
使用基于TCP协议的Socket网络编程实现使用Socket对象来代表两端的通信端口TCP协议基于请求-响应模式第一次主动发起的程序被客户端Client程序第一次通讯中等待连接的程序被服务器Serser程序利用IO流实现数据的传输 四、TCP实现步骤聊天案例
1. 步骤
1、在服务端指定一个端口号来创建ServerSocket并使用accept方法进行侦听这将阻塞服务器线程等待用户请求。
2、在客户端指定服务的主机IP和端口号来创建socket并连接服务端ServerSocket此时服务端accept方法被唤醒同时返回一个 和客户端通信的socket。
3、在客户端和服务端分别使用socket来获取网络通信输入/输出流并按照一定的通信协议对socket进行读/写操作。
4、通信完成后在客户端和服务端中分别关闭socket。 2. 服务器端
创建ServerSocketint port对象 在Socket上使用accept方法监听客户端的连接请求阻塞等待连接功能接受并处理请求信息 • 将处理结果返回给客户端关闭流和Socket对象 3. 客户端
创建SocketStrng host int port对象向服务器发送连接请求 • 向服务端发送服务请求 • 接受服务结果服务响应关闭流和Socket对象 4. ServerSocket类
常用构造器 ServerSocketint port 创建绑定到指定端口的服务器套接字 常用方法 Socket accept 侦听要连接到此套接字并接受它
Java为客户端提供了Socket类为服务器端提供了ServerSocket类 构造方法
SocketInetAddress address int portaddressIP地址 port端口号
创建流套接字并将其连接到指定IP地址的指定端口号
常用方法
OutoutStream getOutputStream返回套接字的输出流InputStream getInputStream 返回套接字的输入流Void shutdownOutput禁用套接字的输出流 5. 利用实现客户端于服务器无线聊天功能
1. 服务器
package com.net;import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;/*** 服务器* author 云村小威** 2023年7月19日 下午10:02:11*/
public class Server {public static void main(String[] args) throws Exception {System.out.println(⁎⁎⁎⁎⁎⁎服务端⁎⁎⁎⁎⁎⁎);/* 创建服务器连接对象 */ServerSocket ss new ServerSocket(6666);System.out.println(服务器已开启等待连接...);/* 调用accept方法客服端没有启动连接不能执行下一步阻塞功能 */Socket server ss.accept();System.out.println(客户端连接成功);/* 获取输入流读取客户端发送的数据 */InputStream inputStream server.getInputStream();BufferedReader br new BufferedReader(new InputStreamReader(inputStream));/* 获取输出流向客户端回写数据 */Scanner zw new Scanner(System.in);OutputStream outputStream server.getOutputStream();BufferedWriter bw new BufferedWriter(new OutputStreamWriter(outputStream));while (true) {String readLine br.readLine();System.out.println(客户端 readLine);if (拜拜.equals(readLine)) {System.out.println(再见);break;}System.out.println(请输入发送到客户端的内容);String test zw.next();/* 向客户端写入内容 */bw.write(test);bw.newLine();bw.flush();if (拜拜.equals(test)) {System.out.println(再见);break;}}/* 关闭资源 */bw.close();outputStream.close();br.close();inputStream.close();server.close();ss.close();}
}2. 客户端
package com.net;import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.util.Scanner;/*** 客户端* author 云村小威** 2023年7月19日 下午10:02:00*/
public class Client {public static void main(String[] args) throws Exception {System.out.println(⁕⁕⁕⁕⁕客户端⁕⁕⁕⁕⁕);/* 创建Socket对象请求连接 */Socket client new Socket(InetAddress.getByName(127.0.0.1), 6666);System.out.println(服务器连接成功...);/* 获取输出流对象向服务器写入数据 */OutputStream outputStream client.getOutputStream();BufferedWriter bw new BufferedWriter(new OutputStreamWriter(outputStream));/* 获取输入流对象读取服务器数据 */InputStream inputStream client.getInputStream();BufferedReader br new BufferedReader(new InputStreamReader(inputStream));/* 向服务器发送信息 */Scanner zw new Scanner(System.in);while (true) {System.out.println(请输入发送到服务器的内容);String test zw.next();/* 向服务器写入内容 */bw.write(test);bw.newLine();bw.flush();if (拜拜.equals(test)) {System.out.println(再见);break;}/* 每次读取一个字节数组 */String content br.readLine();System.out.println(服务器 content);if (拜拜.equals(content)) {System.out.println(再见);break;}}/* 关闭资源 */br.close();inputStream.close();bw.close();outputStream.close();client.close();}
}3. 控制台版 效果 感谢您的观看我会在本专栏持续更新后续更新多线程等知识。接下来就可以利用多线程实现窗体实时无线聊天功能请敬请期待吧