初识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
应用层:
负责处理特定的应用程序细节
原文:https://www.cnblogs.com/sll-csdn/p/10809694.html