#encoding=utf-8
# 創建一個 TCP 服務器程序,這個程序會把客戶發送過來的字
# 符串加上一個時間戳(格式:'[時間]數據')返回給客戶。
from socket import *
from time import ctime
host = ''
port = 21567
bufsiz = 1024
addr = (host,port)
# ss = socket() # 創建服務器套接字
# ss.bind() # 把地址綁定到套接字上
# ss.listen() # 監聽連接
# inf_loop: # 服務器無限循環
# cs = ss.accept() # 接受客戶的連接
# comm_loop: # 通訊循環
# cs.recv()/cs.send() # 對話(接收與發送)
# cs.close() # 關閉客戶套接字
# ss.close() # 關閉服務器套接字(可選)
#創建tcp套接字,綁定,監聽
tcpServerSock = socket(AF_INET,SOCK_STREAM)#創建TCP Socket
#AF_INET 服務器之間網絡通信
#socket.SOCK_STREAM 流式socket , for TCP
tcpServerSock.bind(addr)#將套接字綁定到地址,
#在AF_INET下,以元組(host,port)的形式表示地址.
tcpServerSock.listen(5)#操作系統可以掛起的最大連接數量,至少為1,大部分為5
while True:
print 'waiting for connection'
tcpClientSock, addr2 = tcpServerSock.accept() #接受客戶的連接
#接受TCP連接並返回(conn,address),其中conn是新的套接字對象,
#可以用來接收和發送數據。
#address是連接客戶端的地址。
print 'connected from :',addr2
while True:
data = tcpClientSock.recv(bufsiz) #接收客戶端發來的數據
if not data:
break
tcpClientSock.send('[%s] %s' % (ctime(),data)) #返回給客戶端數據
tcpClientSock.close()
tcpServerSock.close()
-------------------------------------------------------------------------
#encoding=utf-8
#創建tcp客戶端
# cs = socket() # 創建客戶套接字
# cs.connect(address) # 嘗試連接address處的服務器
# comm_loop: # 通訊循環
# cs.send()/cs.recv() # 對話(發送/接收)
# cs.close() # 關閉客戶套接字
from socket import *
host = 'localhost'
port = 21567
bufsize = 1024
addr = (host,port)
tcpClientSock = socket(AF_INET,SOCK_STREAM)
tcpClientSock.connect(addr)#s.connect(address)
#連接到address處的套接字
while True:
data = raw_input('>')
if not data:
break
tcpClientSock.send(data) #像服務端發送數據
data = tcpClientSock.recv(bufsize) #接收服務端返回的數據
if not data:
break
print data
tcpClientSock.close()