网络
网络编程概述
什么是计算机网络
不同区域的计算机(广义上的) 通过通信设备与线路连接起来,
以实现数据(任何形式)的传输和共享的系统
实现不同计算机之间的联系,必须有介质连接.
最开始在一间办公室
后来一栋楼
一个城市
一个国家
全球
网络编程是什么
聊天 -à 聊天软件 QQ
Java语言是支持网络间的数据传输的,将底层的细节都封装起来了,
给程序员提供了一套标准的类库
很方便使用java语言开发可以进行网络通信的软件。
网络编程核心问题:
如何找到网络世界中的目标主机,以及目标软件
win+r cmd ipconfig 查看自己电脑的ip
如何安全可靠的进行数据传输
协议 规则
网络的一些基本知识
网络模型
OSI参考模型,是一个理想化的标准模型
分成7层
实际上的使用TCP/IP 参考模型
分成4层
应用层(http)
运输层(协议)
网络层(IP)
物理链路层(硬件设备)
网络传输数据为什么要分层
在不同的层中,对数据加入不同的头(协议,ip)
逐层分工处理
通信要素 :ip 端口 协议
目标主机,以及目标软件
Ip地址(Internet Protocol Address):在网络世界中,是计算机的地址
局域网地址:192.168.1.20 连接到路由器,会自动分配ip
广域网地址: 家里的宽带 与外界连接
本机地址:本地回环地址 127.0.0.1
端口:是计算中运行中的程序的编号,对应的是程序
Ip找主机
端口找程序
IP+端口 找到目标计算机 以及你想要的程序
端口号0-65535之间 由于0-1024被一些系统程序使用
所以我们开发的程序可以从1020-65535区间定义,
但是不能与已有的端口冲突
如何安全传输—通信协议
为了安全可靠的进行数据传输,需要对传输的内容,速率,出错之后的处理办法等进行控制
而制定的一些规约,称为协议
传输层有两个主要的协议:
TCP(传输控制协议TCP(Transmission Control Protocol))
使用TCP协议进行数据传输前,必须先要去检测网络是否通常,
客户端是否能连接到服务器端,如果能连接到,则进行数据传输,如果连接不到,会报错
采用的是3次握手的机制
Tcp是可靠的,相对udp 效率低
UDP(用户数据报协议UDP(User Datagram Protocol))
将数据封装成数据报
数据报包含 数据 自己的ip 目标ip
发送前不需要建立连接,直接发送 例如发射导弹(目标坐标)
是否发送成功,不清楚,不知道
是不安全的,但是效率高
JAVA中的两种协议下的编程
基于TCP协议的编程
服务器端:
ServerSocket serverSocket = new ServerSocket(9999);
Socket socket = serverSocket.accept();
客户端:
Socket socket = new Socket("127.0.0.1", 9999);
getInputStream() //
socket.getOutputStream();
基于网络编程实现客户端与服务器端互发消息
客户端
package hm;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.util.Scanner;
public class ClientDemo {
public static void main(String[] args) {
try { //创建客户端Socket 创建时就会连接服务器,检查网络是否通畅
Socket socket = new Socket("127.0.0.1", 9999);
while(true){
//向服务器发送消息
System.out.println("发一条消息吧:");
DataOutputStream dataOut = new DataOutputStream(socket.getOutputStream());
Scanner sc = new Scanner(System.in);
String s = sc.next();
dataOut.writeUTF(s);
DataInputStream dataIn = new DataInputStream(socket.getInputStream());
System.out.println("服务器说:"+dataIn.readUTF());
}
}catch (IOException e){
e.printStackTrace();
System.out.println("连接服务器失败");
}
}
}
服务器端
package hm;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class ServerDemo {
public static void main(String[] args) {
try {
//创建服务器
ServerSocket serverSocket = new ServerSocket(9999);
System.out.println("服务器启动成功,等待客户端连接");
//监听客户端连接
Socket s = serverSocket.accept();
System.out.println("服务器连接成功");
while(true){
//接受客户端发送的消息
DataInputStream dataIn = new DataInputStream(s.getInputStream());
String s1 = dataIn.readUTF();
System.out.println("客户端说:"+s1);
//向客户端回复信息
System.out.println("回复他一条消息吧:");
DataOutputStream dataOut = new DataOutputStream(s.getOutputStream());
Scanner scanner = new Scanner(System.in);
String s2 = scanner.next();
dataOut.writeUTF(s2);
}
}catch (IOException e){
e.printStackTrace();
System.out.println("服务器连接失败!");
}
}
}
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/2301_78168249/article/details/134817200