一、python server(**是藍色部分,注釋為黑色字型)
[color=blue]#!/usr/bin/python
import socket
import re
import os[/color]
#第一步是建立socket物件。呼叫socket建構函式 socket = socket.socket( family, type )
#family引數代表位址家族,可為af_inet或af_unix。af_inet家族包括internet位址,af_unix家族用於同一臺機器上的程序間通訊。
#type引數代表套接字型別,可為sock_stream(流套接字)和sock_dgram(資料報套接字)。
[color=blue]a=socket.socket(socket.af_inet,socket.sock_stream)[/color]
#由af_inet所建立的套接字,address位址必須是乙個雙元素元組,格式是(host,port)。host代表主機,port代表埠號。如果埠號正在使用、主機名不正確或埠已被保留,bind方法將引發socket.error異常。
[color=blue]a.bind(("127.0.0.1",8888))[/color]
#第三步是使用socket套接字的listen方法接收連線請求。socket.listen( backlog )
#backlog指定最多允許多少個客戶連線到伺服器。它的值至少為1。收到連線請求後,這些請求需要排隊,如果佇列滿,就拒絕請求。
[color=blue]a.listen(1)[/color]
#迴圈監聽
[color=blue]while(1):[/color]
#第四步是伺服器套接字通過socket的accept方法等待客戶請求乙個連線。connection, address = socket.accept()
#呼叫accept方法時,socket會時入「waiting」狀態。客戶請求連線時,方法建立連線並返回伺服器。
#accept方法返回乙個含有兩個元素的 元組(connection,address)。第乙個元素connection是新的socket物件,伺服器必須通過它與客戶通訊;第二個元素 address是客戶的internet位址。
[color=blue]cs,ca=a.accept()[/color]
#第五步是處理階段,伺服器和客戶端通過send和recv方法通訊(傳輸資料)。
#呼叫recv 時,伺服器必須指定乙個整數,它對應於可通過本次方法呼叫來接收的最大資料量。recv方法在接收資料時會進入「blocked」狀態,最後返回乙個字串,用它表示收到的資料。如果傳送的資料量超過了recv所允許的,資料會被截短。多餘的資料將緩衝於接收端。以後呼叫recv時,多餘的資料會從緩衝區刪除(以及自上次呼叫recv以來,客戶可能傳送的其它任何資料)。
[color=blue]cs.settimeout(120)[/color] #設定超時
[color=blue]msg=cs.recv(1024)[/color]
[color=blue]if msg== '1':
connection.send('welcome to server!')
print ca
print msg
fname=re.compile("get\s+([^\s]+)\s+").match(msg).groups()[0]
if(fname=="/"):fname="/index.html"
fpathname= os.getcwd()+fname
try:
f=open(fpathname,"rb")[/color]
#伺服器呼叫send,並採用字串形式向客戶傳送資訊。send方法返回已傳送的字元個數。
[color=blue] cs.send(f.read())
f.close()
except(exception) :[/color]
#伺服器呼叫send,並採用字串形式向客戶傳送資訊。send方法返回已傳送的字元個數。
[color=blue] cs.send("\n\n\ncan not find page"+fname+"\n");[/color]
#傳輸結束,伺服器呼叫socket的close方法關閉連線。
[color=blue]cs.close()[/color]
=============================================
二、python寫的socket client端
client端可以是瀏覽器,如ie、firefox,也可以是手機或別的,下面是在本地寫的pyton的乙個socket client端。
[color=blue]import socket,time[/color]
#建立乙個socket以連線伺服器:socket = socket.socket( family, type )
[color=blue]sock = socket.socket(socket.af_inet, socket.sock_stream)[/color]
#使用socket的connect方法連線伺服器
[color=blue]sock.connect(('127.0.0.1', 8888))
time.sleep(2)[/color]
#處理階段,客戶和伺服器將通過send方法和recv方法通訊。
[color=blue]sock.send('1')
print sock.recv(1024)[/color]
#傳輸結束,客戶通過呼叫socket的close方法關閉連線。
[color=blue]sock.close()[/color]
簡單的python socket程式設計
最近寫點小東西,要用到socket伺服器和客戶端,用python實現起來非常的方便。貼點 首先 引用必要的包 import thread from socket import from time import ctime接下來定義埠號和位址 host port 8888 埠號 bufsize 200...
python socket簡單的c s示例
客戶端和服務端其實是對等的。只不過服務端是bind乙個位址,客服端是connect乙個位址。另外服務端需要呼叫listen 函式使得服務端可以接受連線請求。send,sendall,recv等等是兩邊都可以用的。下面是示例。server.py import socket s socket.socke...
python socket實現簡單的ssh客戶端
客戶端 監聽埠號為 localhost 9999 usr local bin python3 coding utf 8 import socket client socket.socket client.connect localhost 9999 while true cmd input stri...