6.网络通信

2019-01-18  本文已影响0人  这是李金辉呀

网络通信-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 不同的端口对应不同的服务

分配

知名端口(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)
  1. AddressFamily:可选AF_INEF(Internet进程间通信,常用)或AF_UNIX(用于同一台机器进程之间的通信)
  2. 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网络程序 类似写信

  1. 创建套接字
  2. 发送、接受套接字
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() #关闭套接字
  1. str.encode()
  2. bytes.decode()

TCP传输控制协议(英语:Transmission Control Protocol,缩写为 TCP)类似打电话

创建连接、数据传送、终止连接

  1. 发送应答机制
  2. 超时重传
  3. 错误校验
  4. 流量控制和阻塞管理
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()
  1. socket创建一个套接字
  2. bind绑定ip和port
  3. listen使套接字变为可以被动链接
  4. accept等待客户端的链接
  5. recv/send接收发送数据
上一篇下一篇

猜你喜欢

热点阅读