Python socket套接字通訊

2022-05-06 21:30:07 字數 4115 閱讀 7607

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...