1. 程式人生 > >網絡編程(socket)

網絡編程(socket)

接受 enc 連接 Language 號碼 encode font 完成 簡單的

socket簡介

Socket是應用層與TCP/IP協議族通信的中間軟件抽象層,它是一組接口。在設計模式中,Socket其實就是一個門面模式,它把復雜的TCP/IP協議族隱藏在Socket接口後面,對用戶來說,一組簡單的接口就是全部。

socket通信套路

當通過socket建立起2臺機器的連接後,本質上socket只幹2件事,一是收數據,一是發數據,沒數據時就等著。

socket 建立連接的過程跟我們現實中打電話比較像,打電話必須是打電話方和接電話方共同完成的事情,我們分別看看他們是怎麽建立起通話的

接電話方:

1.首先你得有個電話

2.你的電話要有號碼

3.你的電話必須連上電話線

4.開始在家等電話

5.電話鈴響了,接起電話,聽到對方的聲音

打電話方:

1.首先你得有個電話

2.輸入你想撥打的電話

3.等待對方接聽

4.say “hi 約麽,我有七天酒店的打折卡噢~”

5.等待回應——》響應回應——》等待回應。。。。

把它翻譯成socket通信

接電話方(socket服務器端):

1.首先你得有個電話\(生成socket對象\)

2.你的電話要有號碼\(綁定本機ip+port\)

3.你的電話必須連上電話線\(連網\)

4.開始在家等電話\(開始監聽電話listen\)

5.電話鈴響了,接起電話,聽到對方的聲音\(接受新連接\)

打電話方(socket客戶端):

1.首先你得有個電話\(生成socket對象\)

2.輸入你想撥打的電話\(connect 遠程主機ip+port\)

3.等待對方接聽

4.say “hi 約麽,我有七天酒店的打折卡噢~”\(send\(\) 發消息。。。\)

5.等待回應——》響應回應——》等待回應。。。。



用程序實現
服務端程序
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import socket

phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  # 生成套接字類型,這裏 指定了鏈接方式 AF_INET(ipv4),tcp鏈接類型(SOCK_STREAM)

phone.bind((127.0.0.1, 8080))  # 綁定服務端IP及端口 ,端口範圍0-65535  1-1024 為系統使用,定義端口需要避開常用端口,防止沖突

phone.listen(10)  # 最大鏈接數
print(
starting....) #phone.accept() # 程序進行監聽,捕捉客戶端發起的鏈接請求 conn,client_addr = phone.accept() #獲取客戶端鏈接套接字並賦值給 conn , 客戶端信息賦值給 client_addr data=conn.recv(1024) #接收數據最大值,單位 bytes, 對應客戶端的發送信息 conn.send(服務端的信息.encode(utf-8)) #發送值,對應客戶端的收取 conn.close() #關閉鏈接 phone.close() #關閉程序 #輸出 starting....

客戶端程序

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import socket

phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #定義與服務端一樣的通信類型

phone.connect((127.0.0.1,8080))  #填寫服務端IP地址及端口,進行鏈接

phone.send(客戶端的信息.encode(utf-8))#因為傳輸都是已bytes 進行傳輸,所以先要進行解碼, 這裏為什麽不用使用別的套接字進行傳輸,\
#  是因為之前已經指定了服務端的信息,  所以phone可以直接用來發送接收數據

data = phone.recv(1024) #同理接收 服務器端信息

print(data.decode(utf-8)) #同樣編譯

phone.close() #關閉鏈接


#輸出

服務端的信息





網絡編程(socket)