网络通信-UDP——TCP
ip地址(网络地址和主机地址):用来在网络中标记一台电脑,比如192.168.1.1;在本地局域网上是唯一的。
分类:
1. A类IP地址:1.0.0.1-126.255.255.254
2. B类IP地址:128.1.0.1-191.255.255.254
3. C类IP地址:192.0.1.1-223.255.255.254
4. D类地址用于多点广播:224.0.0.1-239.255.255.254
5. E类IP地址:1111开始,为将来使用保留
6. 私有ip:局域网使用
7. 10.0.0.0~10.255.255.255
8. 172.16.0.0~172.31.255.255
9. 192.168.0.0~192.168.255.255
10. 127.0.0.1~127.255.255.255用于回路测试,127.0.0.1可以代表本机IP地址
网络管理命令
ping:测试远程主机连通性
ifconfig:显示所有网卡信息
端口:0到65535 不同的端口对应不同的服务
- HTTP(万维网服务)、FTP(文件传输)、SMTP(电子邮件)等
分配
知名端口(Well Known Ports):程序使用知名端口需要有root权限[0到1023]
80端口分配给HTTP服务
21端口分配给FTP服务
动态端口(Dynamic Ports)[1024到65535]动态分配,程序 关闭则释放
查看端口:netstat -an |lsof -i [tcp/udp]:2425
socket[套接字]不同主机进程间通信的一种方式
电脑之间通信
进程号PID来标识进程,但在网络传输中利用ip地址、协议和端口来标识网络中的进程。
创建socket
import socket
socket.socket(AddressFamily,Type)
- AddressFamily:可选AF_INEF(Internet进程间通信,常用)或AF_UNIX(用于同一台机器进程之间的通信)
- Type:套接字类型,SOCK_STREAM(流式套接字,用于TCP协议)或者SOCK_DGRAM(数据报套接字,用于UDP协议)
创建一个TCP套接字
import socket
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.close()
```
创建一个UDP套接字
import socket
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
s.close()
```
UDP网络程序 类似写信
- 创建套接字
- 发送、接受套接字
from socket import *
udp_socket = socket(AF_INET,SOCK_DGREAM)
dest_addr = ('192.168.1.103',8080) # 元组,不可修改,存放IP地址和端口
send_data = imput("请输入要发送的数据:")
udp_socket.sendto(send_data.encode('utf-8'),dest_addr) #编码发送
resv_data = udp_socket.recvfrom(1024) #1024表示本次接收的最大字节数
print(recv_data[0].decode('gbk'))#解码打印
print(recv_data[1])
udp_socket.close() #关闭套接字
- str.encode()
- bytes.decode()
TCP传输控制协议(英语:Transmission Control Protocol,缩写为 TCP)类似打电话
创建连接、数据传送、终止连接
- 发送应答机制
- 超时重传
- 错误校验
- 流量控制和阻塞管理
from socket import *
tcp_client_socket = socket(AF_INET, SOCK_STREAM)# 创建socket
# 目的信息
server_ip = input("请输入服务器ip:")
server_port = int(input("请输入服务器port:"))
# 链接服务器
tcp_client_socket.connect((server_ip, server_port))
# 提示用户输入数据
send_data = input("请输入要发送的数据:")
tcp_client_socket.send(send_data.encode("gbk"))
# 接收对方发送过来的数据,最大接收1024个字节
recvData = tcp_client_socket.recv(1024)
print('接收到的数据为:', recvData.decode('gbk'))
# 关闭套接字
tcp_client_socket.close()
- socket创建一个套接字
- bind绑定ip和port
- listen使套接字变为可以被动链接
- accept等待客户端的链接
- recv/send接收发送数据
网友评论