腳本學(xué)堂----網(wǎng)站 python實(shí)在是太方便,太易用了,三方庫(kù)的支持又全,語法又簡(jiǎn)單,對(duì)開發(fā)人員來說,實(shí)在是居家旅行,XXXX的必備利器。 python支持BSD的socket進(jìn)行網(wǎng)絡(luò)編程,其API跟C中的大同小異,先看看TCP方式的,說到網(wǎng)絡(luò)編程,肯定會(huì)設(shè)計(jì)到server和client,下面分別來看下。 TCP方式 server端 下面看一下例子: 復(fù)制代碼 代碼如下:
def tcpServer():
srvsock = socket.socket( socket.AF_INET, socket.SOCK_STREAM) srvsock.bind(('', 9527)) srvsock.listen(5) while True: clisock, (remoteHost, remotePort) = srvsock.accept() print "[%s:%s] connected" % (remoteHost, remotePort) #do something on the clisock clisock.close() if __name__ == "__main__": tcpServer() client端 復(fù)制代碼 代碼如下:
def tcpClient():
clisock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) clisock.connect(('localhost', 9527)) #I/O on this clisock #clisock.send("") #dat = clisock.recv(len) print dat if __name__ == "__main__": tcpClient() 由代碼量可見python之簡(jiǎn)單,想要將這個(gè)例子改造成一個(gè)文件傳輸器,估計(jì)只需要增加不到20行代碼即可。 UDP方式 UDP號(hào)稱無連接傳輸,全然沒有TCP那么復(fù)雜,三次握手,錯(cuò)誤重傳之類的機(jī)制都沒有,發(fā)的只管發(fā),收得只管收,收到?jīng)]有?不知道,順序不對(duì)怎么辦?不管!就是這樣,但是速度就要比TCP高得多了。在對(duì)數(shù)據(jù)幀要求不是很高的地方,這確實(shí)是很好用的,比如網(wǎng)絡(luò)上的視頻傳輸,音頻傳輸?shù)取?/p> server端 復(fù)制代碼 代碼如下:
def udpServer():
address = ('', 9527) srvsock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) srvsock.bind(address) #data,addr = srvsock.recvfrom(2048) if __name__ == "__main__": udpServer() 需要注意的是,server中address元組中的引號(hào)表示可以接受任何地址來的數(shù)據(jù)報(bào),TCP例子中的則表示可以接受任意地址發(fā)起的連接。 client端 復(fù)制代碼 代碼如下:
def udpClient():
address = ('localhost', 9527) clisock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) #clisock.sendto(data, address) if __name__ == "__main__": udpClient() 文中給出的例子已經(jīng)具有網(wǎng)絡(luò)程序的基本結(jié)構(gòu),在實(shí)際應(yīng)用中,應(yīng)該自行擴(kuò)展對(duì)socket的處理,socket說到底跟文件句柄,文件描述符,管道描述符等都是一個(gè)概念,可以對(duì)其進(jìn)行I/O處理,事實(shí)上,在UNIX類系統(tǒng)中,對(duì)socket的操作跟對(duì)文件句柄的操作沒有任何形式上的差異。 |
|