socket是乙個模組, 又稱套接字,用來封裝 網際網路協議(應用層以下的層)。
socket可以實現網際網路協議 應用層以下的層 的工作,提高開發效率。
import socket
寫socket套接字:
使用如下:client.py
'''
啟動服務端後再啟動客戶端
'''import socket
#1.買手機
client = socket.socket() #拿到乙個手機物件
#2.撥號
client.connect(('127.0.0.1',9527)) #客戶端的ip和port必須與伺服器一致
print('client is running')
#3.通訊迴圈
#講話給對方聽
while true:
send_data = input('客戶端》:')
client.send(send_data.encode('utf-8')) #只能發bytes型別
data = client.recv(1024)
if data.decode('utf-8') == 'q':
break
if len(data) == 0:
break
print(data.decode('utf-8'))
#4.斷開連線
client.close()
server.py
'''
先啟動套接字服務端
注意: 客戶端傳送一次訊息,服務端就得接受一次,再傳送訊息。
'''import socket
#1.買手機
server = socket.socket() #拿到乙個手機物件
# print(server) # server是用來收發鏈結請求,建立鏈結
#2.綁手機卡
server.bind(('127.0.0.1',9527)) #0-65535 #本地回環位址 ---》'127.0.0.1'
#3.開機(半連線池)
server.listen(5) #同一時刻,最大請求數為5個 實際==6
print('sever is running')
#4.等待**請求
#conn:指的是服務端往客戶端的管道
#conn,addr = server.accept() #(雙向連線的套接字物件,存放客戶端ip和埠的小元組)
# print(conn) #conn代表雙向鏈結,用來收發鏈結
#5.迴圈實現可接受多個使用者訪問
while true:
#等待**接入 --->接入客戶端
# conn: 指的是服務端往客戶端的管道
conn,addr = server.accpt()
print(addr)
#實現迴圈通訊
while true:
try: #監聽**塊是否有異常出現
# 接受對方講話的內容
# data --->客戶端傳送過來的訊息
data = conn.recv(1024) #1024接受的最大位元組數bytes
if len(data) == 0:
break
if data.decode('utf-8') == 'q':
break
print(data.decode('utf-8'))
send_data = input('伺服器》:')
#伺服器往客戶端傳送訊息
conn.send(send_data.encode('utf-8'))
# 捕獲異常資訊,並列印 # e: 報錯資訊
except exception as e:
print(e)
break
#6.掛**連線
conn.close()
版本一:簡單版
client.py
import socket
client = socket.socket()
client.connect(('127.0.0.1',9500))
print('client is running')
while true:
msg = input('客戶端:').encode('utf-8')
client.send(msg)
data = client.recv(1024)
print(data)
server.py
import socket
from threading import thread
#封裝成函式
def communicate(conn):
while true: #通訊迴圈
try:
data = conn.recv(1024)
if len(data) == 0:
break
print(data.decode('utf-8'))
conn.send('好啊'.encode('utf-8'))
except exception as e:
print(e)
break
conn.close()
def server(backlog=5):
server = socket.socket()
server.bind(('127.0.0.1',9500))
server.listen(backlog)
while true: #鏈結迴圈
conn,addr = server.accept()
print(addr)
t = thread(target=communicate,args=(conn,))
t.start()
if __name__ == '__main__':
t = thread(target=server)
t.start()
版本二:半連線池版
client.py
import socket
client = socket.socket()
client.connect(('127.0.0.1',9500))
print('client is running')
while true:
msg = input('客戶端:').encode('utf-8')
client.send(msg)
data = client.recv(1024)
print(data)
server.py
import socket
from concurrent.futures import threadpoolexecutor
server = socket.socket()
server.bind(('127.0.0.1',9500))
server.listen(5)
#封裝成乙個函式
def run(conn):
while true:
try:
data = conn.recv(1024)
if len(data) == 0:
break
print(data.decode('utf-8'))
conn.send('好啊'.encode('utf-8'))
except exception as e:
print(e)
break
conn.close()
if __name__ == '__main__':
print('server is running')
pool = threadpoolexecutor(100)
while true:
conn,addr = server.accept()
pool.submit(run,conn)
python socket套接字程式設計
服務端 import socket phone socket.socket socket.af inet,socket.sock stream phone.bind 127.0.0.1 8000 phone.listen 5 conn,addr phone.accept msg conn.recv ...
Python socket套接字程式設計
要求 我們自己想寫一款可以資料互動的程式 只要涉及到遠端資料互動必須要操作osi七層,所以有現成的模組直接實現 socket模組 架構啟動要先啟動服務端再啟動客戶端 import socket 匯入模組的兩種方式 import句式 from.import.句式 pip3 install 模組名 版本...
python socket(套接字)小談
1 udp的看法 import socket udp servers content socket.socket socket.af inet,socket.sock dgram udp servers content.sendto hello,boy 127.0.0.1 8087 udp cont...