Python 網絡編程 大數據

數據庫

數據庫能做什麼?

存儲大量數據,方便檢索和訪問。

保持數據包數據信息的一致,完整。

共享和安全。

通過組合分析,產生新的所有信息。

應用程序

作用:相應操作並顯示結果,想數據庫請求數據

要求:美觀、操作簡單方便

數據庫

作用存儲數據,檢索數據、生成新的數據

要求:統一、安全、性能。

Oracle

Oracle公司的產品

產品免費、服務費收費

Sql server

針對不同用戶羣體的多個版本

易用性好

Mysql

開放源代碼

網站應用廣泛。

數據庫就是數據的倉庫

數據庫中包含表關係以及操作對象

數據存放在表中。

數據庫僅有唯一的編號,不能重複。

網絡編程

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

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

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

什麼是Socket

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

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提供有關消息的其他信息,通常可以忽略。

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

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

s.recvfrom()  接收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()  創建一個與該套接字相關連的文件

服務端

我們使用 socket 模塊的 socket 函數來創建一個 socket 對象。socket 對象可以通過調用其他函數來設置一個 socket 服務。

現在我們可以通過調用 bind(hostname, port) 函數來指定服務的 port(端口)。

接着,我們調用 socket 對象的 accept 方法。該方法等待客戶端的連接,並返回 connection 對象,表示已連接到客戶端。

客戶端

接下來我們寫一個簡單的客戶端實例連接到以上創建的服務。端口號爲 9999。

socket.connect(hosname, port ) 方法打開一個 TCP 連接到主機爲 hostname 端口爲 port 的服務商。連接後我們就可以從服務端後期數據,記住,操作完成後需要關閉連接。

 

Python Internet 模塊

協議       功能用途                         端口 模塊

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

服務器

import socket
import threading
serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serversocket.bind(("127.0.0.117", 9999))  # 綁定服務地址和端口號
print("服務器已等待")
serversocket.listen(5)  # 最多同時接收5個
msg = None  # 定義一個全局的變量,用來存儲聊天信息,臨時存儲當前搶到線程的數據
lock = threading.Lock()
mythread = threading.Condition(lock)
def server_recv(c, a):
    global msg
    while True:
        mystr = c.recv(1024)
        mythread.acquire()  # 線程同步
        msg = str(a) + mystr.decode()
        print(msg)
        mythread.notify_all()
        mythread.release()
def server_send(c, a):
    global msg
    while True:
        mythread.acquire()
        mythread.wait()
        mythread.release()
        c.send(msg.encode())
        print(msg)
while True:
    c, a = serversocket.accept()
    threading._start_new_thread(server_recv, (c, a))
    threading._start_new_thread(server_send, (c, a))
客戶端
import socket
import threading
client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
client.connect(('127.0.0.117',9999))#綁定服務器地址和端口號
print('客戶端已連接')
def myrerv(c):
    while   True:
        msg=c.recv(1024)#接受消息
        print(msg.decode())
threading._start_new_thread(myrerv,(client,))
def myinpuut():
    while   True:
        msg=input()
        client.send(msg.encode())
threading._start_new_thread(myinpuut())

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章