剛剛開始接觸python,實現了一個helloworld程式---關於udp協議的socket通訊demo。
首先服務端這邊的實現如下:
import socket, tracebackhost = '' # Bind to all interfaces port = 51500# Step1: 建立socket對象s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# Step2: 設定socket選項(可選)s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)# Step3: 綁定到某一個連接埠s.bind((host, port))# Step4: 監聽該連接埠上的串連while 1: try: message, address = s.recvfrom(8192) print "Got data from ", address s.sendto("Data is received succeefully.", address) except (KeyboardInterrupt, SystemExit): print "raise" raise except : print "traceback" traceback.print_exc()
其中,host置為空白,意思是可以綁定到所有的介面和地址,無論是哪個用戶端的請求,只要是綁定到了同樣的連接埠,那麼伺服器就可以監聽到這個請求。
在tcp串連中,監聽用戶端的請求需要用到listen或accept函數,並有一個專門的socket和遠程極其串連。
接著使我們的用戶端實現:
import socket, sys# Step1: 輸入host和port資訊host = raw_input('please input host name: ')textport = raw_input('please input textport: ')# Step2: 建立socket對象s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)try: port = int(textport)except ValueError: port = socket.getservbyname(textport, 'udp') # Step3: 開啟socket串連 s.connect((host, port))# Step4: 發送資料print "Enter data to transmit: "data = sys.stdin.readline().strip()s.sendall(data)# Step5: 接收伺服器發過來的資料print "Looking for replies; press Ctrl-C or Ctrl-Break to stop"while 1: buf = s.recv(2048) if not len(buf): break sys.stdout.write(buf)
這個例子就是這麼簡單,實現起來和C語言版的差不多。看來,只要是瞭解socket編程的,用不同的語言實現也會相差無幾。