網絡編程(socket)
阿新 • • 發佈:2018-05-18
接受 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)