服務端
#_*_ coding:utf-8 _*_
#導入socket子產品
import socket
# 建立socket對象
sk = socket.socket()
#綁定偵聽的IP和端口号
ip_port = ('192.168.9.213',9999)
sk.bind(ip_port)
#最大連接配接數
sk.listen(5)
#接受請求,接受請求的時候可以擷取到用戶端的socket對象,以及用戶端的IP和端口
#通過while循環,讓服務端一直接受用戶端請求
print "正在等待用戶端請求"
while True:
conn ,address = sk.accept() # conn變量存儲的是用戶端的socket對象(conn就是用戶端),變量address存儲的是用戶端的IP位址和端口
print "已發生請求的用戶端,IP:%s 端口:%s" % (address[0], address[1])
#給用戶端發一條資訊内容
conn.send('hello word!') #給用戶端發送消息
#一直偵聽用戶端發送過來的消息
while True:
client_data = conn.recv(1024) #接受用戶端發送過來的消息
print client_data
if client_data == 'exit':
break
conn.send('sb') #向用戶端發送消息
conn.close()
用戶端#_*_ coding:utf-8 _*_
#導入socket子產品
import socket
#建立socket對象
client = socket.socket()
#連接配接伺服器
ip_port = ('192.168.9.213',9999)
client.connect(ip_port) #和服務端建立連接配接
while True:
#擷取資料
data = client.recv(1024) #接受服務端發送過來的消息
print data #列印服務端發送過來的消息
#向服務端發送消息
inp = raw_input('client data:')
client.send(inp) # 向服務端發送消息
if inp == 'exit':
break
執行過程
執行過程
1、服務端偵聽
2、用戶端和服務端建立連接配接
3、服務端向用戶端發送一條消息“hello world!”
4、用戶端接受消息
5、接着,用戶端可以輸入消息,發送給服務端
6、服務端接收用戶端發送過來的消息
7、然後向用戶端發送一條消息“sb”
8、用戶端接收消息
9、用戶端可以輸入消息,發送給服務端
10、服務端接收用戶端發送過來的消息
11、然後向用戶端發送一條消息“sb”
12....一直循環
直到用戶端輸入的是“exit”發送給服務端
服務端判斷,如果用戶端發送過來的消息是exit,那麼就停止偵聽用戶端發送過來的消息,這時候用戶端也和服務端斷開連接配接
補充一個服務端,實作可以同時處理多個用戶端請求(異步多線程服務端)#_*_ coding:utf-8 _*_
import SocketServer
class MyServer(SocketServer.BaseRequestHandler):
def setup(self):
pass
def handle(self):
#print self.request,self.client_address,self.server
conn = self.request
conn.send('hello word!') #給用戶端發一條資訊内容
# 一直偵聽用戶端發送過來的消息
flag = True
while flag:
client_data = conn.recv(1024) #接受用戶端發送過來的消息,1024代表最多隻能在緩沖區拿資料的大小,緩沖區預設為8K
print client_data
conn.send('sb') # 向用戶端發送消息
if client_data == 'exit':
print '連接配接的用戶端已斷開'
flag = False
conn.close()
def finish(self):
pass
if __name__ == "__main__":
server = SocketServer.ThreadingTCPServer(('192.168.9.213',9999),MyServer) #偵聽的IP和端口号
server.serve_forever()