欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python基于socket實(shí)現(xiàn)TCP客戶端和服務(wù)端

 更新時(shí)間:2022年04月11日 19:20:01   作者:程序員班長  
這篇文章主要介紹了Python基于socket實(shí)現(xiàn)的TCP客戶端和服務(wù)端,以及socket實(shí)現(xiàn)的多任務(wù)版TCP服務(wù)端,下面相關(guān)操作需要的小伙伴可以參考一下

一、基于socket實(shí)現(xiàn)的TCP客戶端

import socket
?
# 建立socket對(duì)象
# 參數(shù)一表示IP地址類型(AF_INET為IPV4,AF_INET6為IPV6),參數(shù)二表示連接的類型(SOCK_STREAM表示TCP形式,SOCK_DGRAM表示UDP形式)
client_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM) ?# 代表(ipv4,TCP)
?
# 連接服務(wù)器(元組中填目標(biāo)ip地址和端口號(hào))
client_socket.connect(('127.0.0.1',7777))
# 準(zhǔn)備數(shù)據(jù),需要轉(zhuǎn)換為二進(jìn)制數(shù)據(jù),encode()中填寫的是本地的字符串編碼格式,mac、linux填utf-8
data='hello'.encode('gbk')
# 向服務(wù)器發(fā)送數(shù)據(jù)
client_socket.send(data)
# 接收數(shù)據(jù),必須要指定接收數(shù)據(jù)的大小,單位字節(jié),最大4096,即4k
recv_data=client_socket.recv(1024)
# 接收的數(shù)據(jù)要進(jìn)行decode()解碼,發(fā)送的時(shí)候用啥編碼就填啥編碼
recv_data=recv_data.decode('gbk')
print(recv_data)
# 關(guān)閉連接
client_socket.close()

二、基于socket實(shí)現(xiàn)的TCP服務(wù)端

import socket
# 建立socket對(duì)象
server_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 如果服務(wù)器是一次性的,如果服務(wù)器結(jié)束后馬上重新啟動(dòng)會(huì)出現(xiàn)一個(gè)錯(cuò)誤,原因是地址和端口沒有被釋放
# OSError: [Errno 48] Address already in use
# 如果想馬上釋放,要設(shè)置一下socket選項(xiàng)
server_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True)
# 綁定IP和端口,如果在綁定IP時(shí)沒有給定IP,默認(rèn)是綁定本地IP
server_socket.bind(('',7777))
# 設(shè)置監(jiān)聽(最大監(jiān)聽數(shù)),設(shè)置完后服務(wù)端會(huì)進(jìn)入被動(dòng)模式,不能主動(dòng)連接客戶端,只能被動(dòng)地等待客戶端的連接
server_socket.listen(128)
# 等待客戶端連接,連接上后,函數(shù)會(huì)返回客戶端的Socket對(duì)象和地址信息
client_socket,ip_port=server_socket.accept()
print(f'客戶端{(lán)ip_port[0]}使用端口{ip_port[1]}連接成功...')
# 接收客戶端數(shù)據(jù)
data=client_socket.recv(1024)
# 查看客戶端發(fā)送的數(shù)據(jù)長度
if len(data)!=0:
? ? data=data.decode('gbk')
? ? print(f'客戶端{(lán)ip_port[0]}使用端口{ip_port[1]}發(fā)送是數(shù)據(jù)是{data}')
else:
? ? print(f'客戶端{(lán)ip_port[0]}使用端口{ip_port[1]}關(guān)閉了連接')
?
# 給客戶端發(fā)送數(shù)據(jù)
data='你好'.encode('gbk')
client_socket.send(data)
# 關(guān)閉客戶端
client_socket.close()
# 關(guān)閉服務(wù)端
server_socket.close()

三、socket實(shí)現(xiàn)的多任務(wù)版TCP服務(wù)端

import socket
import threading
?
?
def client_task(client_socket,ip_port):
? ? print(ip_port,'加入連接')
? ? # 持續(xù)接收客戶端的消息
? ? while True:
? ? ? ? data=client_socket.recv(1024).decode('gbk')
? ? ? ? if len(data)!=0:
? ? ? ? ? ? print(f'客戶端{(lán)ip_port[0]}發(fā)來的信息是{data}')
? ? ? ? else:
? ? ? ? ? ? print(f'客戶端{(lán)ip_port[0]}已經(jīng)斷開連接')
? ? ? ? ? ? break
? ? ? ? send_data=('Hello--'+data).encode('gbk')
? ? ? ? client_socket.send(send_data)
?
?
if __name__ == '__main__':
? ? server_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
? ? server_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True)
? ? server_socket.bind(('',7777))
? ? server_socket.listen(128)
? ? # 循環(huán)接收客戶連接
? ? while True:
? ? ? ? client_socket,ip_port=server_socket.accept() ? ?# 會(huì)一直等待接收連接
? ? ? ? t_client=threading.Thread(target=client_task,args=(client_socket,ip_port))
? ? ? ? t_client.setDaemon(True)
? ? ? ? t_client.start()

1、面向?qū)ο蟀姹?/h3>
'''
基于socket實(shí)現(xiàn)的多任務(wù)版TCP服務(wù)端(面向?qū)ο螅?
'''
?
import socket
import threading
?
class SocketServer(object):
? ? def __init__(self, port):
? ? ? ? self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
? ? ? ? self.server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
? ? ? ? self.server_socket.bind(('', port))
? ? ? ? self.server_socket.listen(128)
?
?
? ? def start(self):
? ? ? ? # 循環(huán)接收客戶連接
? ? ? ? while True:
? ? ? ? ? ? client_socket, ip_port = self.server_socket.accept() ?# 會(huì)一直等待接收連接
? ? ? ? ? ? t_client = threading.Thread(target=self.client_task, args=(client_socket, ip_port))
? ? ? ? ? ? t_client.setDaemon(True)
? ? ? ? ? ? t_client.start()
?
? ? def client_task(self,client_socket, ip_port):
? ? ? ? print(ip_port, '加入連接')
? ? ? ? # 持續(xù)接收客戶端的消息
? ? ? ? while True:
? ? ? ? ? ? data = client_socket.recv(1024).decode('gbk')
? ? ? ? ? ? if len(data) != 0:
? ? ? ? ? ? ? ? print(f'客戶端{(lán)ip_port[0]}發(fā)來的信息是{data}')
? ? ? ? ? ? else:
? ? ? ? ? ? ? ? print(f'客戶端{(lán)ip_port[0]}已經(jīng)斷開連接')
? ? ? ? ? ? ? ? break
? ? ? ? ? ? send_data = ('Hello--' + data).encode('gbk')
? ? ? ? ? ? client_socket.send(send_data)
?
?
if __name__ == '__main__':
? ?server_socket=SocketServer(7777)
? ?server_socket.start()

到此這篇關(guān)于Python基于socket實(shí)現(xiàn)TCP客戶端和服務(wù)端的文章就介紹到這了,更多相關(guān)socket實(shí)現(xiàn) TCP客戶端和服務(wù)端內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python創(chuàng)建Excel表和讀取Excel表的基本操作

    Python創(chuàng)建Excel表和讀取Excel表的基本操作

    這篇文章主要介紹了Python創(chuàng)建Excel表和讀取Excel表的基本操作,文中通過代碼示例和圖文結(jié)合的方式講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-07-07
  • Python文件的應(yīng)用之序列化與反序列化詳解

    Python文件的應(yīng)用之序列化與反序列化詳解

    為了簡化數(shù)據(jù)類型的寫入和獲取,今天我們來學(xué)習(xí)一個(gè)新的知識(shí)點(diǎn)——序列化。通過學(xué)習(xí)序列化,可以不必過分擔(dān)心寫入文件的數(shù)據(jù)類型是什么,并且讀取文件也可以非常輕松的還原數(shù)據(jù)類型。感興趣的可以了解一下
    2022-03-03
  • python腳本設(shè)置超時(shí)機(jī)制系統(tǒng)時(shí)間的方法

    python腳本設(shè)置超時(shí)機(jī)制系統(tǒng)時(shí)間的方法

    這篇文章主要介紹了python腳本設(shè)置超時(shí)機(jī)制系統(tǒng)時(shí)間的方法,感興趣的小伙伴們可以參考一下
    2016-02-02
  • Python列表生成式和字典生成式實(shí)例

    Python列表生成式和字典生成式實(shí)例

    這篇文章主要介紹了Python列表生成式和字典生成式實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Python中弱引用的神奇用法與原理詳解

    Python中弱引用的神奇用法與原理詳解

    弱引用在很多語言中都存在,最常用來解決循環(huán)引用問題,下面這篇文章主要給大家介紹了關(guān)于Python中弱引用的神奇用法與原理的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04
  • Python Handler處理器和自定義Opener原理詳解

    Python Handler處理器和自定義Opener原理詳解

    這篇文章主要介紹了Python Handler處理器和自定義Opener原理詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • Python 3.x對(duì).CSV數(shù)據(jù)按任意行、列讀取的過程

    Python 3.x對(duì).CSV數(shù)據(jù)按任意行、列讀取的過程

    這篇文章主要介紹了Python 3.x對(duì).CSV數(shù)據(jù)按任意行、列讀取的過程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。
    2022-05-05
  • 如何從Python 程序中運(yùn)行 PowerShell 腳本

    如何從Python 程序中運(yùn)行 PowerShell 腳本

    Windows PowerShell 由數(shù)十個(gè)內(nèi)置 cmdlet 組成,它們提供了豐富的功能集,本文將重點(diǎn)討論從 Python 代碼執(zhí)行 PowerShell 邏輯,感興趣的朋友跟隨小編一起看看吧
    2023-10-10
  • Django中密碼的加密、驗(yàn)密、解密操作

    Django中密碼的加密、驗(yàn)密、解密操作

    這篇文章主要介紹了Django中密碼的加密、驗(yàn)密、解密操作,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-12-12
  • 利用python繪制線型圖

    利用python繪制線型圖

    這篇文章主要介紹了利用python繪制線型圖,文章圍繞主題的相關(guān)資料展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的下伙伴可以參考一下
    2022-06-06

最新評(píng)論