[英]Socket programming in python - Timestamps
from socket import *
from time import ctime
HOST = 'localhost'
PORT = 21567
BUFSIZ = 1024
ADDR = (HOST, PORT)
tcpSerSock = socket(AF_INET, SOCK_STREAM)
tcpSerSock.bind(ADDR)
tcpSerSock.listen(5)
while True:
print 'waiting for connection...'
tcpCliSock, addr = tcpSerSock.accept()
print "...connected from:", addr
while True:
data = tcpCliSock.recv(BUFSIZ)
if not data:
break
tcpCliSock.send("[%s] %s" % (ctime(), data))
tcpCliSock.close()
tcpSerSock.close()
我清除了一些錯誤。 我正在關注Core Python Application一書。 我需要知道循環中會發生什么?
tcpCliSock, addr = tcpSerSock.accept()
這行代碼的作用是什么? “等待連接?” 與誰和如何? 沒有其他參數可以連接東西! 這個listen()到底如何工作? 簡要說明該程序。 謝謝
文檔中的Python套接字HOWTO中介紹了所需的內容。 這是Python 2版本:
http://docs.python.org/2/howto/sockets.html
簡短的版本是您發布的代碼是一台簡單的服務器,該服務器被配置為響應來自單獨進程(可能在另一台計算機上)的請求,該進程向其發送一小部分數據。 該服務器發回帶有時間戳的數據。
socket.listen()
用於設置套接字以接收傳入的連接。 連接請求進入短隊列,並按順序處理。 socket.accept()
檢查該偵聽隊列中是否有傳入連接,如果存在,它將為另一台計算機打開一個新套接字,以處理該連接。 連接結束后,第一個客戶端的新套接字關閉,服務器套接字移至隊列中的下一個連接以進行處理。
要使該服務器執行任何操作,您需要使用某些客戶端程序打開正確的端口並向其發送消息。 對於簡單的事情,如果您的計算機上安裝了telnet
則可以嘗試使用它。 運行此服務器,然后嘗試:
telnet localhost 21567
在同一台機器上,然后開始輸入一些文本。 您應該看到響應。 我的輸出看起來像這樣:
$ telnet localhost 21567
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
j
[Sun Sep 15 11:58:27 2013] j
jkl
[Sun Sep 15 11:58:29 2013] jkl
fdjksla;
[Sun Sep 15 11:58:30 2013] fdjksla;
fdjkasl;fjdksal;fjkdsa;
[Sun Sep 15 11:58:32 2013] fdjkasl;fjdksal;fjkdsa;
注意:您必須在“ HOST
字段中輸入主機名才能起作用。 嘗試使用'localhost'
,看看是否有幫助。 另外,我相信如果您將localhost
用作HOST
參數,則可能無法接收來自其他計算機的連接。 在這種情況下,您需要在網絡上使用自己的本地主機名或IP地址。
我已經使用固定的縮進和'localhost'
HOST
參數的'localhost'
編輯了OP,並測試了它是否可以在另一個shell中與telnet
,如我在此所述。
我還注意到,此代碼永遠不會到達服務器套接字的close()
。 如果要關閉服務器並有條不紊地退出,則希望在外部while
循環中的某處break
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.