上一篇文章為:→3.2.7tcp客戶端
應(yīng)用:模擬QQ聊天
客戶端參考代碼
#coding=utf-8
from socket import *
# 創(chuàng)建socket
tcpClientSocket = socket(AF_INET, SOCK_STREAM)
# 鏈接服務(wù)器
serAddr = ('192.168.1.102', 7788)
tcpClientSocket.connect(serAddr)
while True:
# 提示用戶輸入數(shù)據(jù)
sendData = raw_input("send:")
if len(sendData)>0:
tcpClientSocket.send(sendData)
else:
break
# 接收對方發(fā)送過來的數(shù)據(jù),最大接收1024個字節(jié)
recvData = tcpClientSocket.recv(1024)
print 'recv:',recvData
# 關(guān)閉套接字
tcpClientSocket.close()
服務(wù)器端參考代碼
#coding=utf-8
from socket import *
# 創(chuàng)建socket
tcpSerSocket = socket(AF_INET, SOCK_STREAM)
# 綁定本地信息
address = ('', 7788)
tcpSerSocket.bind(address)
# 使用socket創(chuàng)建的套接字默認(rèn)的屬性是主動的,使用listen將其變?yōu)楸粍拥模@樣就可以接收別人的鏈接了
tcpSerSocket.listen(5)
while True:
# 如果有新的客戶端來鏈接服務(wù)器,那么就產(chǎn)生一個信心的套接字專門為這個客戶端服務(wù)器
# newSocket用來為這個客戶端服務(wù)
# tcpSerSocket就可以省下來專門等待其他新客戶端的鏈接
newSocket, clientAddr = tcpSerSocket.accept()
while True:
# 接收對方發(fā)送過來的數(shù)據(jù),最大接收1024個字節(jié)
recvData = newSocket.recv(1024)
# 如果接收的數(shù)據(jù)的長度為0,則意味著客戶端關(guān)閉了鏈接
if len(recvData)>0:
print 'recv:',recvData
else:
break
# 發(fā)送一些數(shù)據(jù)到客戶端
sendData = raw_input("send:")
newSocket.send(sendData)
# 關(guān)閉為這個客戶端服務(wù)的套接字,只要關(guān)閉了,就意味著為不能再為這個客戶端服務(wù)了,如果還需要服務(wù),只能再次重新連接
newSocket.close()
# 關(guān)閉監(jiān)聽套接字,只要這個套接字關(guān)閉了,就意味著整個程序不能再接收任何新的客戶端的連接
tcpSerSocket.close()