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

歡迎訪問 生活随笔!

生活随笔

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

python

python3模块socket怎么安装_Python中socket模块的使用方法(一)

發布時間:2025/4/16 python 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python3模块socket怎么安装_Python中socket模块的使用方法(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

socket(中文名稱:套接字)是應用層與傳輸層(TCP/UDP協議)的接口。是對TCP/IP的封裝。是操作系統的通信機制。應用程序通過socket進行網絡數據的傳輸。Python中的socket是我們常用的模塊,當然還有socketserver模塊(對socket模塊的進一步封裝)

socket 通信方式,常用的主要是兩種

TCP

UDP

下面以一個例子來介紹Socket編程。服務端文件base_socket_server.py,客戶端文件base_socket_clent.py。該例子主要介紹了socket的單連接最簡單的用法,要深入使用??春罄m文章

在使用socket模塊進行編碼之前我們先介紹一個socket的參數

family(地址簇):

socket.AF_INET IPv4(默認)

socket.AF_INET6 IPv6

socket.AF_UNIX用于單一的Unix系統進程間通信

type(類型):

socket.SOCK_STREAM 流式socket TCP協議(默認)

socket.SOCK_DGRAM 數據報式socket UDP協議

socket.SOCK_RAW 原始套接字

socket.SOCK_RDM 可靠UDP

socket.SOCK_SEQPACKET 可靠的連接數據包服務

1.socket最基本用法

服務端base_socket_server.py

# -*- coding: utf-8 -*-

# 導入socket模塊

import socket

# 創建實例

# 默認AF_INET,SOCK_STREAM可以不填寫

sk = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

# 定義綁定的ip和port

ip_port = ("127.0.0.1",8000)

#綁定監聽

sk.bind(ip_port)

# 監聽

sk.listen()

print("等待接受數據..........")

# 接受數據

sock,addr = sk.accept()

# 獲取從客戶端發過來的數據

# 一次獲取1k的數據

# python3.x以上的版本。網絡數據的發送接受都是byte類型。

# 如果發送的數據是str類型則需要進行編解碼

data = sock.recv(1024)

str_data = data.decode("utf8")

print(str_data)

# 給客戶端返回數據

msg = "服務端返回的數據:"+str_data

sock.send(msg.encode())

# 主動關閉連接

sock.close()

這段代碼的意思是開啟一個socket服務,客戶端發送過來消息后。經過服務端的處理后。再返回給客戶端,然后斷開連接。接下來看客戶端的代碼。

客戶端base_socket_client.py

# -*- coding: utf-8 -*-

import socket

# 創建實例

# 默認AF_INET,SOCK_STREAM可以不填寫

client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

# 定義綁定的ip和port

ip_port = ("127.0.0.1",8000)

#綁定監聽

client.connect(ip_port)

# 給服務器發送數據

str = input("輸入數據:")

client.send(str.encode("utf8"))

data = client.recv(1024)

print(data.decode())

client.close()

客戶端的代碼的意思是,開啟連接,連接到指定端口,用戶輸入數據發送到服務端,然后接受服務端返回的數據。最后再關閉這個連接

運行結果如下:

image

image

2.客服端連續消息發送

上面兩個文件最后都關閉了連接,我們怎么保持消息的連續發送呢?僅僅是不做關閉就可以了嗎?即使我們注釋掉base_socket_server.py文件里的st.close()。就會發現依舊是不可以的。我們怎么實現一次連接,就可以持續發送呢,我們可以在一次連接成功后做一個while true的循環,這樣我們就可以持續發送消息了。下面是對代碼的進一步改寫。

服務端base_socket_server.py改寫后的代碼

# -*- coding: utf-8 -*-

# 導入socket模塊

import socket

# 創建實例

# 默認AF_INET,SOCK_STREAM可以不填寫

sk = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 定義綁定的ip和port

ip_port = ("127.0.0.1", 8000)

# 綁定監聽

sk.bind(ip_port)

# 監聽

sk.listen()

while True:

print("等待接受數據..........")

# 接受數據

sock, addr = sk.accept()

message = "連接成功"

sock.send(message.encode("utf8"))

while True:

# 獲取從客戶端發過來的數據

# 一次獲取1k的數據

# python3.x以上的版本。網絡數據的發送接受都是byte類型。

# 如果發送的數據是str類型則需要進行編解碼

data = sock.recv(1024)

str_data = data.decode("utf8")

print(str_data)

if str_data == "exit":

break

# 給客戶端返回數據

msg = "服務端返回的數據:" + str_data

sock.send(msg.encode("utf8"))

# 主動關閉連接

sock.close()

客戶端base_socket_client.py改寫后的代碼

# -*- coding: utf-8 -*-

import socket

# 創建實例

# 默認AF_INET,SOCK_STREAM可以不填寫

client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 定義綁定的ip和port

ip_port = ("127.0.0.1", 8000)

# 綁定監聽

client.connect(ip_port)

while True:

# 接受消息

data = client.recv(1024)

print(data.decode("utf8"))

# 給服務器發送數據

input_str = input("輸入數據:")

client.send(input_str.encode("utf8"))

if input_str == "exit":

break

運行結果如下:

image

image

這樣便實現了一個用戶連續發送信息連接不斷開的要求,即使這樣當一個用戶連接的時候,另一個用戶是不能連接的。我們怎樣才能進行多連接呢?這里我們就會用到多線程了,每一個用戶連接開啟一個線程。就能保證多用戶同時連接了。

3. 多用戶連接

上面也提到了,在實際應用中,我們需要多個用戶連接的,我們可以通過開啟線程的方式進行多用戶連接

服務端middle_socket_server.py

# -*- coding: utf-8 -*-

# 導入socket、threading模塊

import socket

import threading

# 創建實例

# 默認AF_INET,SOCK_STREAM可以不填寫

sk = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 定義綁定的ip和port

ip_port = ("127.0.0.1", 8000)

# 綁定監聽

sk.bind(ip_port)

# 監聽

sk.listen()

# 定義線程執行函數

def handle_sock(sock,addr):

message = "連接成功"

sock.send(message.encode("utf8"))

while True:

# 獲取從客戶端發過來的數據

# 一次獲取1k的數據

# python3.x以上的版本。網絡數據的發送接受都是byte類型。

# 如果發送的數據是str類型則需要進行編解碼

data = sock.recv(1024)

str_data = data.decode("utf8")

print(str_data)

if str_data == "exit":

break

# 給客戶端返回數據

msg = "服務端返回的數據:" + str_data

sock.send(msg.encode("utf8"))

# 主動關閉連接

sock.close()

while True:

print("等待接受數據..........")

# 接受數據

sock, addr = sk.accept()

client_thread = threading.Thread(target=handle_sock,args=(sock,addr))

client_thread.start()

客戶端middle_socket_client.py

# -*- coding: utf-8 -*-

import socket

# 創建實例

# 默認AF_INET,SOCK_STREAM可以不填寫

client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 定義綁定的ip和port

ip_port = ("127.0.0.1", 8000)

# 綁定監聽

client.connect(ip_port)

while True:

# 接受消息

data = client.recv(1024)

print(data.decode("utf8"))

# 給服務器發送數據

input_str = input("輸入數據:")

client.send(input_str.encode("utf8"))

if input_str == "exit":

break

運行結果如下:

image

image

image

提到多連接我們不得不提另一個模塊socketserver。

4.socketserver模塊的使用

socketserver模塊是對socket的封裝。它也可以進行用戶的多連接(其內部實現源碼也使用了threading模塊)。使用起來更加方便。

服務端socketserver_socket_server.py

# -*- coding: utf-8 -*-

# 導入模塊

from socketserver import BaseRequestHandler,ThreadingTCPServer

# 定義類

class MyServer(BaseRequestHandler):

# 重寫handle方法

def handle(self):

# 定義連接對象

conn = self.request

message = "連接成功"

conn.send(message.encode())

while True:

# 接受客戶端消息

data = conn.recv(1024)

# 打印接受的消息

print(data.decode("utf8"))

#如果接受到exit的消息,則進行循環的退出

if data == b'exit':

break

conn.send(data)

conn.close()

if __name__ == "__main__":

# 創建多線程實例

server = ThreadingTCPServer(("127.0.0.1",8000),MyServer)

# 開啟socketserver異步多線程

server.serve_forever()

客戶端base_socket_client.py

# -*- coding: utf-8 -*-

import socket

# 創建實例

# 默認AF_INET,SOCK_STREAM可以不填寫

client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 定義綁定的ip和port

ip_port = ("127.0.0.1", 8000)

# 綁定監聽

client.connect(ip_port)

while True:

# 接受消息

data = client.recv(1024)

print(data.decode("utf8"))

# 給服務器發送數據

input_str = input("輸入數據:")

client.send(input_str.encode("utf8"))

if input_str == "exit":

break

運行結果如下:

image

image

image

總結

以上是生活随笔為你收集整理的python3模块socket怎么安装_Python中socket模块的使用方法(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

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