初识python网络编程

IP地址
1、IP地址被用来给Internet上的电脑一个编号。大家日常见到的情况是每台联网的PC上都需要有IP地址,才能正常通信。我们可以把‘个人电脑’比作‘一台电话’,那么‘IP地址’就相当于‘电话号码’,而Internet中的路由器,就相当于电信局的‘程控式交换机’。
2、IP地址是一个32位的二进制数,通常被分割为4个‘8位二进制数’(也就是4个字节)。IP地址通常用‘点分十进制’表示成(a,b,c,d)的形式,其中,a,b,c,d都是0~255之间的十进制整数,比如192.168.0.1
3、windows系统在命令提示符下输入‘ipconfig'命令查看本机IP地址

————————————————————————————————————————

udp:

#发送数据

# from socket import *
# udp_socket=socket(AF_INET,SOCK_DGRAM)
# socket_data=input('请输入你要发送的数据:')
# s=('192.168.1.3',8080)
# udp_socket.sendto(socket_data.encode('gb2312'),s)
# udp_socket.close()

#发送接收数据
# from socket import *
#
# # 1. 创建udp套接字
# udp_socket = socket(AF_INET, SOCK_DGRAM)
# # 2. 准备接收方的地址
# dest_addr = ('192.168.1.3', 8080)
# # 3. 从键盘获取数据
# send_data = input("请输入要发送的数据:")
#
# # 4. 发送数据到指定的电脑上
# udp_socket.sendto(send_data.encode('gb2312'), dest_addr)
#
# # 5. 等待接收对方发送的数据
# recv_data = udp_socket.recvfrom(1024) # 1024表示本次接收的最大字节数
#
# # 6. 显示对方发送的数据
# # 接收到的数据recv_data是一个元组
# # 第1个元素是对方发送的数据 # 第2个元素是对方的ip和端口
# print(recv_data[0].decode('gb2312'))
# print(recv_data[1])
#
# # 7. 关闭套接字
# udp_socket.close()

 

需注意:

udp=socket(AF_INET,SOCK_DGRAM)
接收数据是recvfrom
需要两个参数接收,第一个是内容,第二个是ip地址和端口号
例如
r,ip=udp.recvfrom(1024)
1024代表最大接收字节数


encode('gbk')编码
decode('gbk')转码

发送sendto

 

 ——————————————————————————————————————————

tcp

from socket import *

# 创建socket
tcp_client_socket = socket(AF_INET, SOCK_STREAM)

# 目的信息
server_addr = ('192.168.1.254', 8080)
# 链接服务器
tcp_client_socket.connect(server_addr)

# 提示用户输入数据
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()


# from socket import *
#
# # 1. 创建套接字
# udp_socket = socket(AF_INET, SOCK_DGRAM)
#
# # 2. 绑定本地的相关信息,如果一个网络程序不绑定,则系统会随机分配
# local_addr = ('', 7788) # ip地址和端口号,ip一般不用写,表示本机的任何一个ip
# udp_socket.bind(local_addr)
#
# # 3. 等待接收对方发送的数据
# recv_data = udp_socket.recvfrom(1024) # 1024表示本次接收的最大字节数
#
# # 4. 显示接收到的数据
# print(recv_data[0].decode('gb2312'))
#
# # 5. 关闭套接字
# udp_socket.close()

:

———————————————————————————————————————————

listen()中的参数表示已经建立链接和半链接的总数。

在windows中这个参数是有用的,填入多少服务器端就会连接多少。

而在Linux中这个参数是无效的,Linux内核会按照资源自己计算服务器当前的适合的连接数是多少。

所以这也算是Linux系统是服务器较为成熟的选择的原因之一吧。

目的:将主动套接字变为被动套接字,通常应用于服务器端

——————————————————————————————————————————

模型:

1、应用层-传输层-网络层-网络接口层
2、应用层-传输层-网络层-数据链路层、物理层
3、应用层、会话层、表示层-传输层-网络层-数据链路层、物理层

链路层=数据链路层、物理层:
包括操作系统中的设备驱动程序、计算机中对应的网络接口卡

网络层(互联网层):
处理分组在网络中的活动,比如分组的选路
(IP、ICMP和IGMP)

传输层:
主要为两台主机上的应用提供端到端的通信
TCP和UDP

应用层:
负责处理特定的应用程序细节