在網際網路上,我們可以讓某台計算機作為伺服器。伺服器開放自己的埠,被動等待其他計算機連線。當其他計算機作為客戶,主動使用socket連線到伺服器的時候,伺服器就開始為客戶提供服務。
在python中,我們使用標準庫中的socket包來進行底層的socket程式設計。
首先是伺服器端,我們使用bind()方法來賦予socket以固定的位址和埠,並使用listen()方法來被動的監聽該埠。當有客戶嘗試用connect()方法連線的時候,伺服器使用accept()接受連線,從而建立乙個連線的socket:
# written by windy
# server side
import socket
# address
host = ''
port = 8000
reply = 'yes'
# configure socket
s = socket.socket(socket.af_inet, socket.sock_stream)
s.bind((host, port))
# passively wait, 3: maximum number of connections in the queue
s.listen(3)
# accept and establish connection
conn, addr = s.accept()
# receive message
request = conn.recv(1024)
print
'request is: ',request
print
'connected by', addr
# send message
conn.sendall(reply)
# close connection
conn.close()
socket.socket()建立乙個socket物件,並說明socket使用的是ipv4(af_inet,ip version 4)和tcp協議(sock_stream)。
然後用另一台電腦作為客戶,我們主動使用connect()方法來搜尋伺服器端的ip位址(在linux中,你可以用$ifconfig來查詢自己的ip位址)和埠,以便客戶可以找到伺服器,並建立連線:
# written by windy
# client side
import socket
# address
host = '172.20.202.155'
port = 8000
request = 'can you hear me?'
# configure socket
s = socket.socket(socket.af_inet, socket.sock_stream)
s.connect((host, port))
# send message
s.sendall(request)
# receive message
reply = s.recv(1024)
print
'reply is: ',reply
# close connection
s.close()
現在,我們寫出乙個http伺服器端:
#coding=utf-8
#python http伺服器端
'''自己編寫乙個http伺服器端使用socket
使用瀏覽器實驗
為了配合上面的伺服器程式,我已經在放置python程式的資料夾裡,儲存了乙個test.jpg檔案。我們在終端執行上面的python程式,作為伺服器端,再開啟乙個瀏覽器作為客戶端。(如果有時間,你也完全可以用python寫乙個客戶端。原理與上面的tcp socket的客戶端程式相類似。)
在瀏覽器的位址列輸入:
127.0
.0.1
:8882
文章參考位址
iphone平台http get請求
直接貼原始碼 需要注意的是httpgetrequestviewcontroller 擁有nsmutabledata receivedata 這個成員。receivedate是在 void connection nsurlconnection connection didreceiveresponse...
http get與post請求區別
1 http請求格式 在http請求中,第一行必須是乙個請求行 request line 用來說明請求型別 要訪問的資源以及使用的http版本。緊接著是乙個首部 header 小節,用來說明伺服器要使用的附加資訊。在首部之後是乙個空行,再此之後可以新增任意的其他資料 稱之為主體 body 2 get...
HttpPost與HttpGet的區別
get是從伺服器上獲取資料,post是向伺服器傳送資料。get把引數資料加到提交表單的action屬性所指的url中,值和表單內各個字段一一對應。在url中可以看得到,post是通過http post機制將表單內各個字段與其內容放在html header內一起傳送到action屬性所指的url位址,...