Java教程

网络编程(一)

本文主要是介绍网络编程(一),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

软件开发架构

软件开发,分为C/S架构 和 B/S架构

C/S架构 C:client 客户端 S:sever 服务端

B/S架构 B:browser 浏览段 S:sever服务端 

本质上,B/S架构也是C/S架构

 

OSI七层协议

七层划分为:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。

五层划分为:应用层、传输层、网络层、数据链路层、物理层。

四层划分为:应用层、传输层、网络层、网络接口层。

 

网络层

IP协议:规定了接入互联网的任何一台计算机都要有有个ip地址

ip地址:
    ipv4:
        最小:0.0.0.0
        最大:255.255.255.255
        本机回环地址:127.0.0.1 (就是自己在自己电脑上,找自己的ip地址)
    ipv6:表示的范围非常大
        
# ip地址能够确定世界上任何一台接入互联网的计算机

公网IP和内网IP

公网IP :需要购买付费的,比如 阿里云,腾讯云,华为云等等

内网IP :以192.168 打头的IP地址

传输层

TCP协议和UDP协议都是属于传输层的

端口(port):
    范围:0-65535
    基本使用:
        0-1024是系统默认使用的
        1024-8000 是常用软件使用的 3306, 8000, 5000
        以后我们自己开大的软件端口号要使用8000以后的

 

一个端口在同一时刻不能同时使用

 

ip+port能够表示世界上唯一一台计算机上的唯一一个应用正在执行

 

常用熟知的端口号

TCL协议

也叫流式协议,可靠协议

里面包含了 三次握手 四次挥手

三次握手 目的是为了建立连接

四次挥手 目的是在关闭连接前确认前面的数据已经传输完成,所以需要多一次

 

面试题: 为什么连接时三次握手,关闭连接时四次挥手

 

UDP协议

是不可靠协议

并且没有传输通道一说(说明这个协议并不安全)

比如说:远程协助软件

 

TCP:数据安全可靠,但是速度相对于UDP来说稍慢

UDP:数据传输速度快,但是不安全

 

socket编程

我们把socket翻译成套接字,socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作,抽象为几个简单的接口供应层调用已实现进程在网络中的通信

 

 

基于TCP协议的套接字编程

翻译一下,要用python代码来实现以下套接字的工作流程

套接字的工作流程(下图,超级重要)

 

 

服务端

import socket

# 1 先实例化对象 socker()
# 2 不过不传参数,代表的是TCP协议:SOCK_STRAM
# 3 如果是UDP协议,那就把参数type =
# 用变量sever接收,产生对象
sever = socket.socket()

# 绑定一个端口,一个服务端,用于对外交流
sever.bind(('127.0.0.1', 8001))

# 监听,数字代表半连接池里面的 会话间 等待数量
sever.listen(3)
print('开始接收客户端消息')

# 怎么接收,接受到的是什么
# 用socket实例化的对象的sever,里面的accept方法来接受数据,
# 点进去看源码,看可以看到return的返回值是 包含2个值的元组,可以用解压赋值
# return返回的2个值,sock指的是当前连接的客户端对象,addr:客户端地址
sock, addr = sever.accept()

# 接受客户发过来的消息,所以用sock
# 括号里的1024代表的是 接收数据的最大字节数
# 粘包现象,如果客户传过来有1025个数据,多了1个,一次接收不完,那就是成为粘包现象
data = sock.recv(1024)
print('这个是客户端数据', data)

# 给客户端返回数据
sock.send(data.upper())

# 传输完成,关闭连接
sock.close()

sever.close()

服务端

import socket
client = socket.socket()

# 连接
client.connect(('127.0.0.1', 8001))

# 传出数据
client.send('helloworld'.encode('utf-8'))

# 接收数据
data = client.recv(1024)
print('已经收到服务端的数据', data)

# 关闭连接
client.close()

 

这篇关于网络编程(一)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!