python 網路程式設計 03

2022-04-10 12:59:36 字數 3057 閱讀 2935

首先我們可以看下可以最簡單的互動性的服務端和客戶端程式

server

import socket

def 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 socket

sock = 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 socketserver

class 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]

import

socketserver,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

"print

"data:

",data

conn.sendall(res)

if__name__ == "

__main__":

server01 = socketserver.threadingtcpserver(('

127.0.0.1

',8040),myserver)

print

"server is running..

"server01.serve_forever()

[client]

import

socket

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")

print

'length:

',res_length

while

true:

if res_length <=0:

break

res = sock.recv(1024)

print

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...