日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python socket编程_Python学习记录-socket编程

發布時間:2023/12/2 python 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python socket编程_Python学习记录-socket编程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. OSI七層模型詳解

2. Python socket

什么是 Socket?

Socket又稱”套接字”,應用程序通常通過”套接字”向網絡發出請求或者應答網絡請求,使主機間或者一臺計算機上的進程間可以通訊。

Python 提供了兩個級別訪問的網絡服務:

低級別的網絡服務支持基本的 Socket,它提供了標準的 BSD Sockets API,可以訪問底層操作系統Socket接口的全部方法。

高級別的網絡服務模塊 SocketServer, 它提供了服務器中心類,可以簡化網絡服務器的開發。

3. socket()函數

Python 中,我們用 socket()函數來創建套接字,語法格式如下:?socket.socket([family[, type[, proto]]])

參數

family: 套接字家族可以使AF_UNIX或者AF_INET

type: 套接字類型可以根據是面向連接的還是非連接分為SOCK_STREAM或SOCK_DGRAM

protocol: 一般不填默認為0.

Socket 對象(內建)方法

函數

描述

服務器端套接字

s.bind()

綁定地址(host,port)到套接字, 在AF_INET下,以元組(host,port)的形式表示地址。

s.listen()

開始TCP監聽。backlog指定在拒絕連接之前,操作系統可以掛起的最大連接數量。該值至少為1,大部分應用程序設為5就可以了。

s.accept()

被動接受TCP客戶端連接,(阻塞式)等待連接的到來

客戶端套接字

s.connect()

主動初始化TCP服務器連接,。一般address的格式為元組(hostname,port),如果連接出錯,返回socket.error錯誤。

s.connect_ex()

connect()函數的擴展版本,出錯時返回出錯碼,而不是拋出異常

公共用途的套接字函數

s.recv()

接收TCP數據,數據以字符串形式返回,bufsize指定要接收的最大數據量。flag提供有關消息的其他信息,通??梢院雎浴?/p>

s.send()

發送TCP數據,將string中的數據發送到連接的套接字。返回值是要發送的字節數量,該數量可能小于string的字節大小。

s.sendall()

完整發送TCP數據,完整發送TCP數據。將string中的數據發送到連接的套接字,但在返回之前會嘗試發送所有數據。成功返回None,失敗則拋出異常。

s.recvform()

接收UDP數據,與recv()類似,但返回值是(data,address)。其中data是包含接收數據的字符串,address是發送數據的套接字地址。

s.sendto()

發送UDP數據,將數據發送到套接字,address是形式為(ipaddr,port)的元組,指定遠程地址。返回值是發送的字節數。

s.close()

關閉套接字

s.getpeername()

返回連接套接字的遠程地址。返回值通常是元組(ipaddr,port)。

s.getsockname()

返回套接字自己的地址。通常是一個元組(ipaddr,port)

s.setsockopt(level,optname,value)

設置給定套接字選項的值。

s.getsockopt(level,optname[.buflen])

返回套接字選項的值。

s.settimeout(timeout)

設置套接字操作的超時期,timeout是一個浮點數,單位是秒。值為None表示沒有超時期。一般,超時期應該在剛創建套接字時設置,因為它們可能用于連接的操作(如connect())

s.gettimeout()

返回當前超時期的值,單位是秒,如果沒有設置超時期,則返回None。

s.fileno()

返回套接字的文件描述符。

s.setblocking(flag)

如果flag為0,則將套接字設為非阻塞模式,否則將套接字設為阻塞模式(默認值)。非阻塞模式下,如果調用recv()沒有發現任何數據,或send()調用無法立即發送數據,那么將引起socket.error異常。

s.makefile()

創建一個與該套接字相關連的文件

4. TCP socket通信流程

Socket是網絡編程的一個抽象概念。通常我們用一個Socket表示“打開了一個網絡鏈接”,而打開一個Socket需要知道目標計算機的IP地址和端口號,再指定協議類型即可。

以下是TCP socket通信流程圖

以下是python偽代碼

以下是一個基本的tcp socket服務端和客戶端代碼示例

#!/usr/bin/env python# _*_coding:utf-8_*_'''

* Created on 2017/5/23 21:59.

* @author: Chinge_Yang.

'''# 服務器端import socket

server = socket.socket()

server.bind(('localhost', 6969)) ?# 綁定要監聽的端口

server.listen() ?# 監聽

conn, addr = server.accept() ?# 等待連接# conn是客戶端連接過來,在服務端生成的一個連接實例

data = conn.recv(1024) ?# 1024字節

print("recv:", data)

conn.send(data.upper())

server.close()

#!/usr/bin/env python# _*_coding:utf-8_*_'''

* Created on 2017/5/23 21:55.

* @author: Chinge_Yang.

'''# 客戶端import socket

client = socket.socket() ?# 聲明socket類型,同時生成socket鏈接對象

client.connect(('localhost', 6969))

client.send("Hello world!".encode("utf-8"))

data = client.recv(1024) ?# 1024字節

print("recv:", data.decode())

client.close()

socket server并發實例

import socketserver ?# 導入socketserver模塊class MyServer(socketserver.BaseRequestHandler): ?# 創建一個類,繼承自socketserver模塊下的BaseRequestHandler類

def handle(self): ?# 要想實現并發效果必須重寫父類中的handler方法,在此方法中實現服務端的邏輯代碼(不用再寫連接準備,包括bind()、listen()、accept()方法)

while 1:

conn = self.request

addr = self.client_address

# 上面兩行代碼,等于 conn,addr = socket.accept(),只不過在socketserver模塊中已經替我們包裝好了,還替我們包裝了包括bind()、listen()、accept()方法

while 1:

accept_data = str(conn.recv(1024), encoding="utf8")

print(accept_data)

if accept_data == "byebye":

break

send_data = bytes(input(">>>>>"), encoding="utf8")

conn.sendall(send_data)

conn.close()if __name__ == '__main__':

sever = socketserver.ThreadingTCPServer(("127.0.0.1", 8888),

MyServer) ?# 傳入 端口地址 和 我們新建的繼承自socketserver模塊下的BaseRequestHandler類 ?實例化對象

sever.serve_forever() ?# 通過調用對象的serve_forever()方法來激活服務端

import socket

sk = socket.socket()

sk.connect(("127.0.0.1", 8888)) ?# 主動初始化與服務器端的連接while True:

send_data = input("輸入發送內容:")

sk.sendall(bytes(send_data, encoding="utf8"))

if send_data == "byebye":

break

accept_data = str(sk.recv(1024), encoding="utf8")

print("".join(("接收內容:", accept_data)))

sk.close()

5. Python Internet 模塊

以下列出了 Python 網絡編程的一些重要模塊:

協議

功能用處

端口號

Python 模塊

HTTP

網頁訪問

80

httplib, urllib, xmlrpclib

NNTP

閱讀和張貼新聞文章,俗稱為”帖子”

119

nntplib

FTP

文件傳輸

20

ftplib, urllib

SMTP

發送郵件

25

smtplib

POP3

接收郵件

110

poplib

IMAP4

獲取郵件

143

imaplib

Telnet

命令行

23

telnetlib

Gopher

信息查找

70

gopherlib, urllib

本文轉自 ygqygq2 51CTO博客,原文鏈接:http://blog.51cto.com/ygqygq2/1930545,如需轉載請自行聯系原作者

總結

以上是生活随笔為你收集整理的python socket编程_Python学习记录-socket编程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。