Python Socket寫的簡單Server

2021-09-30 16:23:51 字數 2804 閱讀 4863

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