Python學習 Socket程式設計

2022-07-03 15:18:14 字數 3076 閱讀 4232

應用程式兩端通過「套接字」向網路發出請求或者應答網路請求。可以把socket理解為通訊的把手(hand),是乙個介面,封裝了大量方法

socket起源於unix,在unix一切皆檔案哲學的思想下,socket是一種"開啟—讀/寫—關閉"模式的實現,伺服器和客戶端各自維護乙個"檔案",在建立連線開啟後,可以向自己檔案寫入內容供對方讀取或者讀取對方內容,通訊結束時關閉檔案。socket的英文原義是「插槽」或「插座」,就像我們家裡座機一樣,如果沒有網線的那個插口,**是無法通訊的。socket是實現tcp,udp協議的介面,便於使用tcp,udp。

注意:socket不能傳送為空的字元[直接回車]

伺服器端:

# 服務端

import socket

# family=af_inet, 代表使用ipv4的ip協議

# type=sock_stream 代表使用tcp協議進行連線

server = socket.socket() # 建立socket

ip_addr = ('127.0.0.1', 9999) # 1024之前的埠,預設是os使用

server.bind(ip_addr) # 要求必須是乙個元組

server.listen(3) # 開始監聽傳入連線。在拒絕連線之前,可以掛起的最大連線數量。

while true:

conn, addr = server.accept() # 接受連線並返回(conn,address)

# 其中conn是新的套接字物件[客戶端],可以用來接收和傳送資料。

# address是連線客戶端的位址。

exit_flag = true

while exit_flag:

print('當前連線物件', addr)

# 傳送一定要有接收

try:

data = conn.recv(1024)

print('伺服器:', str(data, 'utf-8'))

inp = input('>>>:')

if inp != 'bye':

conn.send(bytes(inp, 'utf-8'))

exit_flag = true

else:

conn.send(bytes(inp, 'utf-8'))

exit_flag = false

except exception as e:

print('已關閉當前連線物件', addr, '等待連線...')

exit_flag = false

finally:

conn.close()

server.close()

客戶端:

# 客戶端

import socket

# family=af_inet, 代表使用ipv4的ip協議

# type=sock_stream 代表使用tcp協議進行連線

client = socket.socket()

ip_addr = ('127.0.0.1', 9999)

try:

client.connect(ip_addr)

exit_flag = true

while exit_flag:

# 傳送一定要有接收

inp = input('>>>:')

if inp != 'bye':

client.send(bytes(inp, 'utf-8'))

exit_flag = true

else:

client.send(bytes(inp, 'utf-8'))

exit_flag = false

info = client.recv(1024) # 最大接收1024k資料,# 傳送/接收的資料一定是byte型別

print('客戶端:', str(info, 'utf-8'))

except exception as e:

print('客戶端關閉連線', e)

finally:

client.close()

server:

import socket

import select

sk=socket.socket()

sk.bind(("127.0.0.1",8801))

sk.listen(5)

inputs=[sk,]

while true:

r,w,e=select.select(inputs,,,5)

print(len(r))

for obj in r:

if obj==sk:

conn,add=obj.accept()

print(conn)

else:

data_byte=obj.recv(1024)

print(str(data_byte,'utf8'))

inp=input('回答%s號客戶》'%inputs.index(obj))

obj.sendall(bytes(inp,'utf8'))

print('>>',r)

client:

import socket

sk=socket.socket()

sk.connect(('127.0.0.1',8801))

while true:

inp=input(">>>>")

sk.sendall(bytes(inp,"utf8"))

data=sk.recv(1024)

print(str(data,'utf8'))

android學習筆記 Socket編

android學習筆記 socket程式設計 inonoclas 十三 socket程式設計 socket基本通訊模型 使用基於tcp協議的socket 使用基於udp協議的socket socket套接字 用於描述ip位址和埠是乙個通訊鏈的控制代碼 以你公用程式通過 套接字 向網路發出請求或者應答...

silverlight中的socket程式設計注意事項

1.粘包 目前sl中的socket只能用tcp ip協議,而tcp ip本質是乙個 流 協議,也就是說資料無邊界,傳送的就是一連串的位元組 沒有資料報的概念 因此連續傳送時有所謂的 粘包 現象,詳細解釋如下 比如你設定傳送緩衝區的大小是512位元組,如果 在相隔時間極短的情況下 連續傳送次資料,第一...

python學習之dedecms exp編寫

針對織夢5.7 sp1遠端檔案包含getshell exp編寫,漏洞分析請檢視網上分析,不再贅述。exp coding utf 8 import requests import time def dada url url index url install index.php khtml,like ...