1. 程式人生 > >我的第十一篇博客---初識python網絡編程

我的第十一篇博客---初識python網絡編程

put 表示 網絡層 inter 設備 應用層 地址 imp 提示符

初識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

應用層:
負責處理特定的應用程序細節

我的第十一篇博客---初識python網絡編程