當前位置:首頁 » 編程語言 » pythonsocket包

pythonsocket包

發布時間: 2022-03-14 07:34:32

① 在python中使用socket命令是要下載這個庫嗎還是直接import socket

由於是廣泛使用的庫,所以安裝包自帶了

② python socket 發送udp和tcp的區別

Python中的 list 或者 dict 都可以轉成JSON字元串來發送,接收後再轉回來。 首先 import json然後,把 list 或 dict 轉成 JSON json_string = json.mps(list_or_dict)用socket發送過去,例如 s.sendto(json_string, address) 對方用socket接收...

③ python 2.7中有沒有socketserver這個模塊

Python提供了兩個基本的socket模塊。一個是socket,它提供了標準的BSD Socket API;另一個是socketServer,它提供了伺服器中心類,可以簡化網路伺服器的開發。
本文簡要介紹socket模塊包含的類及其使用。
1.開始了解socket模塊前,先熟悉下Python的網路編程模塊主要支持的兩種Intent協議:TCP和UDP。TCP協議是一種面向連接的可靠協議,用於建立機器之間的雙向通信流。UDP協議是一種較低級別的、以數據包為基礎的協議(無連接傳輸模式)。與TCP不同,UDP信息不可靠。
他們的區別如下圖所示:左圖為TCP連接協議,右圖為UDP連接協議

2.socket模塊的部分類方法介紹

類方法

說明

socket.socket(family, type[,proto])

創建並返回一個新的 socket對象

socket.getfqdn(name)

將使用點號分隔的 IP地址字元串轉換成一個完整的域名

socket.gethostbyname(hostname)

將主機名解析為一個使用點號分隔的 IP地址字元串

socket.gethostbyname_ex(name)

它返回一個包含三個元素的元組,從左到右分別是給定地址的主要的主機名、同一IP地址的可選的主機名的一個列表、關於同一主機的同一介面的其它IP地址的一個列表(列表可能都是空的)。

socket.gethostbyaddr(address)

作用與gethostbyname_ex相同,只是你提供給它的參數是一個IP地址字元串

Socket.getservbyname(service,protocol)

它要求一個服務名(如'telnet'或'ftp')和一個協議(如'tcp'或'udp'),返回服務所使用的埠號

socket.fromfd(fd, family, type)

從現有的文件描述符創建一個 socket對象

3.socket對象的部分方法介紹

實例方法

說明

sock.bind( (adrs, port) )

將 socket綁定到一個地址和埠上

sock.accept()

返回一個客戶機 socket(帶有客戶機端的地址信息)

sock.listen(backlog)

將 socket設置成監聽模式,能夠監聽 backlog 外來的連接請求

sock.connect( (adrs, port) )

將 socket連接到定義的主機和埠上

sock.recv( buflen[, flags] )

從 socket中接收數據,最多 buflen 個字元

sock.recvfrom( buflen[, flags] )

從 socket中接收數據,最多 buflen 個字元,同時返回數據來源的遠程主機和埠號

sock.send( data[, flags] )

通過 socket發送數據

sock.sendto( data[, flags], addr )

通過 socket發送數據

sock.close()

關閉 socket

sock.getsockopt( lvl, optname )

獲得指定 socket 選項的值

sock.setsockopt( lvl, optname, val )

設置指定 socket選項的值

4.編寫socket測試程序
(a)編寫server的步驟

第一步是創建socket對象。調用socket構造函數。如:
socket = socket.socket( family, type )
family參數代表地址家族,可為AF_INET或AF_UNIX。AF_INET家族包括Internet地址,AF_UNIX家族用於同一台機器上的進程間通信。
type參數代表套接字類型,可為SOCK_STREAM(流套接字)和SOCK_DGRAM(數據報套接字)。
第二步是將socket綁定到指定地址。這是通過socket對象的bind方法來實現的:
socket.bind( address )
由AF_INET所創建的套接字,address地址必須是一個雙元素元組,格式是(host,port)。host代表主機,port代表埠號。如果埠號正在使用、主機名不正確或埠已被保留,bind方法將引發socket.error異常。
第三步是使用socket套接字的listen方法接收連接請求。
socket.listen( backlog )
backlog指定最多允許多少個客戶連接到伺服器。它的值至少為1。收到連接請求後,這些請求需要排隊,如果隊列滿,就拒絕請求。
第四步是伺服器套接字通過socket的accept方法等待客戶請求一個連接。
connection, address = socket.accept()
調 用accept方法時,socket會時入「waiting」狀態。客戶請求連接時,方法建立連接並返回伺服器。accept方法返回一個含有兩個元素的元組(connection,address)。第一個元素connection是新的socket對象,伺服器必須通過它與客戶通信;第二個元素 address是客戶的Internet地址。
第 五步是處理階段,伺服器和客戶端通過send和recv方法通信(傳輸 數據)。伺服器調用send,並採用字元串形式向客戶發送信息。send方法返回已發送的字元個數。伺服器使用recv方法從客戶接收信息。調用recv 時,伺服器必須指定一個整數,它對應於可通過本次方法調用來接收的最大數據量。recv方法在接收數據時會進入「blocked」狀態,最後返回一個字元 串,用它表示收到的數據。如果發送的數據量超過了recv所允許的,數據會被截短。多餘的數據將緩沖於接收端。以後調用recv時,多餘的數據會從緩沖區 刪除(以及自上次調用recv以來,客戶可能發送的其它任何數據)。
傳輸結束,伺服器調用socket的close方法關閉連接。
(b)編寫client的步驟
首先創建一個socket以連接伺服器:socket =socket.socket( family, type )
使用socket的connect方法連接伺服器。對於AF_INET家族,連接格式如下:
socket.connect( (host,port) )
host代表伺服器主機名或IP,port代表伺服器進程所綁定的埠號。如連接成功,客戶就可通過套接字與伺服器通信,如果連接失敗,會引發socket.error異常。
處理階段,客戶和伺服器將通過send方法和recv方法通信。
傳輸結束,客戶通過調用socket的close方法關閉連接。
5.實例源碼:python socket半雙工聊天
(a)tcpserver.py
[python] view plain
# -*- coding: cp936 -*-
#file:tcpserver.py

import socket
from time import ctime
import sys

bufsize = 1024
host = '127.0.0.1'
port = 8100
address = (host,port)

server_sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server_sock.bind(address)
server_sock.listen(1)

while True:
print 'waiting for connection...'
clientsock,addr = server_sock.accept()
print 'received from :',addr

while True:
data = clientsock.recv(bufsize)
print ' 收到---->%s\n%s' %(ctime(),data)
data = raw_input("發送----->")
clientsock.send(data)
clientsock.close()

server_sock.close()
(b)tcpclient.py
[python] view plain
## -*- coding: cp936 -*-
##file:tcpclient.py

from socket import *
from time import ctime

bufsize = 1024
host = '127.0.0.1'
port = 8100
addr = (host,port)

client_sock = socket(AF_INET,SOCK_STREAM)
client_sock.connect(addr)

while True:
data = raw_input("發送---->")
if not data:
break
else:
client_sock.send(data)
data = client_sock.recv(bufsize)
print '收到---->%s\n%s' %(ctime(),data)

client_sock.close()

④ 有沒有好的python socket框架推薦

不用激動,Django Channel的那個是WebSocket。Socket.io基於WebSocket和HTTP pull ,不是完全僅僅WS的實現。

⑤ Python socket模塊的send和recv

只是第一次接收的數據吧 不過如果數據超過1024,那第二次還是接著從緩沖區接數據
你可以自己寫代碼測試一下

⑥ Python的socket模塊中的bind

port中文埠,可以任意寫,一般要寫大於1000的,比如8080啥的。

⑦ 求助,求python關於socket協議打包和解包相關方法

_socket 是用c封裝的so文件 socket.py 會import _socket 的 所有東西 所有 _socket 有的 socket 也會有
一般 直接用socket 而不用 _socket

⑧ python socket recv 到的一個數據包中有 print repr出來有16進的有正常的字元串

struct包裡面有pack和unpack,字元串之間可以用+連接起來。

⑨ python socket 服務端多次發,客戶端當一次收,怎麼解決這個問題

TCP協議是流式傳輸協議,本來就沒有什麼次的概念,TCP包是底層實現,上層看到的就是數據流,流的特徵就是連續不斷。
你要區分每一條消息,可以參考建立在TCP連接之上的HTTP協議是怎麼做的。
當然了,最簡單的方法還是發送終結符/分段符

⑩ 如何通過python實現簡單socket通信

Python中實現socket通信,socket通信的服務端比較復雜,而客戶端非常簡單,所以客戶端基本上都是用sockct模塊實現,而服務端用有很多模塊可以使用。

熱點內容
編程懟人 發布:2025-01-16 00:53:08 瀏覽:759
建立共享伺服器地址 發布:2025-01-16 00:26:40 瀏覽:565
android開機動畫修改 發布:2025-01-16 00:26:26 瀏覽:872
怎麼解壓pc版游戲 發布:2025-01-16 00:16:32 瀏覽:122
v9更新到91有方舟編譯器嗎 發布:2025-01-16 00:11:49 瀏覽:500
AB系統編程 發布:2025-01-16 00:09:37 瀏覽:621
存儲過程如何遍歷一個表的數據 發布:2025-01-16 00:08:34 瀏覽:875
apkso反編譯 發布:2025-01-15 23:53:20 瀏覽:6
買的騰訊伺服器是裝在電腦上嗎 發布:2025-01-15 23:25:58 瀏覽:412
如何查看電腦的配置是不是i5 發布:2025-01-15 23:24:21 瀏覽:435