1. 程式人生 > >python網路程式設計學習(1)

python網路程式設計學習(1)

CHAPTER 1

gethostname:獲取主機名

gethostbyame(host_name):獲取host_name的IP地址,其中host_name可以為網址

inet_aton(ip_addr):將IP地址轉為十六進位制

inet_ntoa(packed_ip_addr):將十六進位制的IP地址轉化為原來的格式 如127.0.0.1

getservbyport(port,protocalname):通過埠號以及協議(TCP/UDP)來確定服務,如80對應http

gettimeout():獲取超時時間

settimeout(100):設定超時時間

getsocketopt(socket.SOL_SOCKET,socket.SO_SNDBUF) 獲取緩衝區大小

setsocketopt(socket.SOL_SOCKET, socket.SO_SNDBUF\SO_RCVBUF, 4096)設定緩衝區大小

setblocking(0/1):0為非阻塞模式,1為阻塞模式, 注意後面要把套接字繫結到指定埠

       例如 sock.bind(('127.0.0.1',0))

setsocketopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)#允許重用套接字



SNTP客戶端程式:(從網路時間伺服器獲取並列印當前時間)

import socket
import struct
import sys
import time

NTP_SERVER = "0.uk.pool.ntp.org"

TIME1970 = 2208988800L
def sntp_client():
    client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    data = '\x1b' + 47 * '\0'
    client.sendto(data, (NTP_SERVER, 123)) #把資料傳送到NTP_SERVER
    data, address = client.recvfrom

( 1024 ) #接受1024位元組資料
    if data:
        print 'Response received from:', address
        t = struct.unpack( '!12I', data )[10] #!12I表示從網路中得到12個整數型別的資料
        t -= TIME1970
        print '\tTime=%s' % time.ctime(t)
if __name__ == '__main__':

    sntp_client()   

回顯伺服器則是利用上述的組合而成,分為一個伺服器,一個客戶端。客戶端做的傳送資料和得到response,伺服器則是要允許重用,socket繫結以及監聽,而後呼叫accept函式來輸出data和address((host,port))