Python Socket使用實例
更新時間:2017年12月18日 15:49:20 作者:garfieldtom
這篇文章主要介紹了Python Socket使用實例,具有一定借鑒價值,需要的朋友可以參考下。
Python在網(wǎng)絡通訊方面功能強大,學習一下Socket通訊的基本方式
UDP通訊:
Server:
import socket
port=8081
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
#從指定的端口,從任何發(fā)送者,接收UDP數(shù)據(jù)
s.bind(('',port))
print('正在等待接入...')
while True:
#接收一個數(shù)據(jù)
data,addr=s.recvfrom(1024)
print('Received:',data,'from',addr)
Client:
import socket port=8081 host='localhost' s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) s.sendto(b'hello,this is a test info !',(host,port))
很簡單 。下面是TCP方式:
Server:
#-*- coding: utf-8 -*-
from socket import *
from time import ctime
HOST=''
PORT=12345
BUFSIZ=1024
ADDR=(HOST, PORT)
sock=socket(AF_INET, SOCK_STREAM)
sock.bind(ADDR)
sock.listen(5)
while True:
print('waiting for connection')
tcpClientSock, addr=sock.accept()
print('connect from ', addr)
while True:
try:
data=tcpClientSock.recv(BUFSIZ)
except:
print(e)
tcpClientSock.close()
break
if not data:
break
s='Hi,you send me :[%s] %s' %(ctime(), data.decode('utf8'))
tcpClientSock.send(s.encode('utf8'))
print([ctime()], ':', data.decode('utf8'))
tcpClientSock.close()
sock.close()
Client:
#-*- coding: utf-8 -*-
from socket import *
class TcpClient:
HOST='127.0.0.1'
PORT=12345
BUFSIZ=1024
ADDR=(HOST, PORT)
def __init__(self):
self.client=socket(AF_INET, SOCK_STREAM)
self.client.connect(self.ADDR)
while True:
data=input('>')
if not data:
break
self.client.send(data.encode('utf8'))
data=self.client.recv(self.BUFSIZ)
if not data:
break
print(data.decode('utf8'))
if __name__ == '__main__':
client=TcpClient()
上面的TCP方式有個問題,不能退出,好吧,我們改造一下,使這個程序可以發(fā)送quit命令以退出:
Server:
#-*- coding: utf-8 -*-
from socket import *
from time import ctime
from time import localtime
import time
HOST=''
PORT=1122 #設置偵聽端口
BUFSIZ=1024
ADDR=(HOST, PORT)
sock=socket(AF_INET, SOCK_STREAM)
sock.bind(ADDR)
sock.listen(5)
#設置退出條件
STOP_CHAT=False
while not STOP_CHAT:
print('等待接入,偵聽端口:%d' % (PORT))
tcpClientSock, addr=sock.accept()
print('接受連接,客戶端地址:',addr)
while True:
try:
data=tcpClientSock.recv(BUFSIZ)
except:
#print(e)
tcpClientSock.close()
break
if not data:
break
#python3使用bytes,所以要進行編碼
#s='%s發(fā)送給我的信息是:[%s] %s' %(addr[0],ctime(), data.decode('utf8'))
#對日期進行一下格式化
ISOTIMEFORMAT='%Y-%m-%d %X'
stime=time.strftime(ISOTIMEFORMAT, localtime())
s='%s發(fā)送給我的信息是:%s' %(addr[0],data.decode('utf8'))
tcpClientSock.send(s.encode('utf8'))
print([stime], ':', data.decode('utf8'))
#如果輸入quit(忽略大小寫),則程序退出
STOP_CHAT=(data.decode('utf8').upper()=="QUIT")
if STOP_CHAT:
break
tcpClientSock.close()
sock.close()
Client:
#-*- coding: utf-8 -*-
from socket import *
class TcpClient:
#測試,連接本機
HOST='127.0.0.1'
#設置偵聽端口
PORT=1122
BUFSIZ=1024
ADDR=(HOST, PORT)
def __init__(self):
self.client=socket(AF_INET, SOCK_STREAM)
self.client.connect(self.ADDR)
while True:
data=input('>')
if not data:
break
#python3傳遞的是bytes,所以要編碼
self.client.send(data.encode('utf8'))
print('發(fā)送信息到%s:%s' %(self.HOST,data))
if data.upper()=="QUIT":
break
data=self.client.recv(self.BUFSIZ)
if not data:
break
print('從%s收到信息:%s' %(self.HOST,data.decode('utf8')))
if __name__ == '__main__':
client=TcpClient()
注:以上代碼為Python3。
總結
以上就是本文關于Python Socket使用實例的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關專題。如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!
您可能感興趣的文章:
- python利用socketserver實現(xiàn)并發(fā)套接字功能
- Python基于socket實現(xiàn)簡單的即時通訊功能示例
- Python簡單實現(xiàn)socket信息發(fā)送與監(jiān)聽功能示例
- python通過socket實現(xiàn)多個連接并實現(xiàn)ssh功能詳解
- Python探索之SocketServer詳解
- 基于python socketserver框架全面解析
- python Socket之客戶端和服務端握手詳解
- python多線程socket編程之多客戶端接入
- Python+Socket實現(xiàn)基于TCP協(xié)議的客戶與服務端中文自動回復聊天功能示例
- python的socket編程入門
相關文章
Django ORM數(shù)據(jù)庫操作處理全面指南
本文深度探討Django ORM的概念、基礎使用、進階操作以及詳細解析在實際使用中如何處理數(shù)據(jù)庫操作,同時,我們還討論了模型深入理解,如何進行CRUD操作,并且深化理解到數(shù)據(jù)庫遷移等高級主題2023-09-09
python使用ctypes調(diào)用擴展模塊的實例方法
在本篇文章里小編給大家整理的是一篇關于python使用ctypes調(diào)用擴展模塊的實例方法內(nèi)容,需要的朋友們可以學習參考下。2020-01-01
Python Flask異步發(fā)送郵件實現(xiàn)方法解析
這篇文章主要介紹了Python Flask異步發(fā)送郵件實現(xiàn)方法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-08-08

