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))