网络通信
UDP
1.1 网络通信的概念 两台机器进行通信
1.2 ip地址
1.1 什么是地址
飞秋通信能够准确的给想要的人发送消息每个人都有一个唯一的ip地址
ip地址:目的用来标记网络上的一台电脑
1.2 ip地址的作用
ip地址在网络上标识唯一电脑
1.3 查看ip地址
windwos:cmd(快捷键windows + R)->ipconfig
linux:ifconfig(ctrl + a 快速回到行首)
1.4 ip的分类
192.168.33.xx 前三组是网络号 后一组是主机号(但是不是绝对的)
最大值是255(所以理论上有一个局域网最多有256个机器,一般情况下满足不了)
1.5 端口号
一台机器上程序的唯一标识
进程
一个程序运行起来就是一个进程(运行起来的程序)
端口是怎样分配的:
知名端口:80 端口分配了给HTTP 21 端口分配给FTP
1.6 socket:网络通信(今天所有的网络通信都是用socket)
套接字:(插排,插口)
注:因UDP不常用 就不代码演示了
TCP
TCP 协议:传输控制协议
区别:
UDP:写信模型(不需要建立连接世界发送数据,每一封信都需要写上ip、端口号,不是很安全,数据有可能丢)
TCP:打电话模型 是在建立连接的基础上才会发送数据(数据一般不会丢失)
TCP 通信步骤:
1. 创建连接
2. 数据传送
3. 终止连接
TCP 可靠传输机
TCP 客户端
所谓的服务器:就是提供服务的一端,而客户端,就是需要服务的一端
代码演示:(Python版本 注意格式问题)
def main():
# 1. 创建tcp的套接字
tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 2. 连接服务器
server_ip = input("请输入需要连接的服务器ip")
server_port = int(input("请输入需要连接的服务器port"))
server_addr = (server_ip, server_port)
tcp_socket.connect(server_addr)
#tcp_socket.connect(("192.168.20.58", 8080))
# 3. 发送/解释数据
send_data = input("请输入要发送的数据")
tcp_socket.send(send_data.encode("utf-8"))
# 4. 关闭套接字
tcp_socket.close()
if name == ‘main’:
main()
TCP 服务器
生活中的电话机(例子)
如果想让别人能够正常的给你打通电话,需要你做以下几件事情:
1. 买个手机
2. 插上电话卡
3. 设计手机为正常的接听状态
4. 静静的等着别人给你打电话
tcp
和上面打电话的流程是一样的 在程序中,如果想要完成一个tcp服务器的功能,流程如下:
1. socket 创建一个套接字
2. bind 绑定 ip 和 port
3. listen 使套接字变为可以被动链接
4. accept 等待客户端吧链接
5. recv/send 接收发送数据
TCP客户端和服务器通信的原理(自己的理解)
首先服务器创建一个监听套接字,这个套接字主要用来负责监听客户端请求
当客户端发送请求,监听套接字会生成一个新的套接字用来和客户端进行通信
代码演示(Python版本)
import socket
def main():
# 1. socket 创建一个套接字
tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 2. bind 绑定ip和port
tcp_socket.bind(("", 7890))
# 3. listen 使套接字变为可以被动链接
tcp_socket.listen(128)
# 4. 等待客户端进行链接
new_client_socket, client_addr = tcp_socket.accept()
# 5. 接收客户端的请求
recv_date = new_client_socket.recv(1024)
# 6. 回送数据给客户端
new_client_socket.send("hahahaha".encode("utf-8"))
# 7. 关闭
tcp_socket.close()
new_client_socket.close()
if name == ‘main’:
main()