首先我們可以看下可以最簡單的互動性的服務端和客戶端程式
server
import socketdef main():
sock = socket.socket(socket.af_inet,socket.sock_stream)
sock.bind(('localhost',8000))
sock.listen(5)
while true:
print '1'
connection ,clent_addr = sock.accept()
while 1:
buf = connection.recv(1024)
connection.sendall('hi')
print buf
connection.close()
if __name__ == '__main__':
main()
[server]:在建立socket之後,服務端會一直保持阻塞狀態,然後一旦有使用者連線,就立即等待使用者傳送資料,然後接收到使用者發的資料之後 理解返回乙個字元後,然後狀態變成等待下次連線
client
import socketsock = socket.socket()
sock.connect(('localhost', 8000))
sock.settimeout(5)
while 1:
res = sock.recv(1024)
print res
data = raw_input('input:')
sock.sendall(data)
sock.close()
[client]:去連線server端然後不斷傳送資料,然後接受返回。
那麼你可以發現上面的server端的** 其實只能同時接受乙個請求,因為只有乙個執行緒去處理這個段**
那麼我可以吧server端的**換成
import socketserverclass myserver(socketserver.baserequesthandler,object):
def handle(self):
conn = self.request
conn.sendall('this is a tast')
flag = true
while flag:
data = conn.recv(1024)
print "data:",data
if data == "exit":
flag = true
elif data == '0':
conn.sendall("the winter in comming")
else:
conn.sendall("please input again")
if __name__ == "__main__":
server01 = socketserver.threadingtcpserver(('127.0.0.1',8080),myserver)
print "server is running.."
server01.serve_forever()
我們通過借助socket自帶的類寫出來了 多執行緒的伺服器端,能夠收發訊息
那麼我們可以在這個**的基礎上修改,能夠傳送命令,返回命令
[server]
importsocketserver,os
class
myserver(socketserver.baserequesthandler,object):
defhandle(self):
conn =self.request
flag =true
while
flag:
data = conn.recv(1024)
res =os.popen(data).read()
res_length=len(res)
conn.send(str(res_length))
msg_num = conn.recv(1024)
if msg_num == "
10012":
print len(res),"
-->len
"data:
",data
conn.sendall(res)
if__name__ == "
__main__":
server01 = socketserver.threadingtcpserver(('
127.0.0.1
',8040),myserver)
"server is running..
"server01.serve_forever()
[client]
importsocket
sock =socket.socket()
sock.connect((
'localhost
', 8040))
sock.settimeout(5)
while 1:
data = raw_input('
input:')
sock.sendall(data)
res_length = int(sock.recv(1024))
sock.send(
"10012")
'length:
',res_length
while
true:
if res_length <=0:
break
res = sock.recv(1024)
res res_length -= 1024sock.close()
這裡需要注意的是
1:因為服務端 不知道能傳送多大的資料,那麼在接收資料之前我們需要,先驗證一下資料長度,然後根據長度,來決定如何收取
python網路程式設計 TCP網路程式設計
tcp程式設計 客戶端 import socket 1 套接字 tcp socket socket.socket socket.af inet,socket.sock stream 2 建立鏈結 tcp socket.connect 172.27.35.1 8080 3 傳送資訊 tcp socke...
python 網路程式設計
今天晚上學習了一下python的網路程式設計,實現了client向server傳送資料,server反饋資訊 python 3.3 版本 server from socket import class tcpserver object def init self,serverport self.se...
python網路程式設計
網路通訊是計算機之間的程序之間的通訊。tcp程式設計 tcp連線建立是雙向通道,客戶端與服務端都可以給對方傳送資料。建立tcp連線時,主動發起連線的叫客戶端,被動響應連線的叫服務端。建立乙個tcp的socket連線 用socket family,type 建立套接字獲得socket物件。family...