socket通常也稱作套接字,用于描述IP位址和端口,是一個通信鍊的句柄,應用程式通常通過“套接字”向網絡送出請求或者應答網絡請求
socket既是一種特殊檔案,一些socket函數就是對其進行的操作(讀/寫IO、打開、關閉)
socket和file的差別
file子產品是針對某個指定檔案進行【打開】【讀寫】【關閉】
socket子產品是針對伺服器端和用戶端socket進行【打開】【讀寫】【關閉】
執行個體:
在wen頁面中通路
傳回http 1.1 200 OK和HelloWorld
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<code>#!/usr/bin/env python</code>
<code>#coding:utf-8</code>
<code>import</code> <code>socket</code>
<code>def</code> <code>handle_request(client):</code>
<code> </code><code>client.send(</code><code>"HTTP/1.1 200 OK\r\n\r\n"</code><code>)</code>
<code> </code><code>client.send(</code><code>"Hello, World"</code><code>)</code>
<code>def</code> <code>main():</code>
<code> </code><code># 建立sock對象</code>
<code> </code><code>sock</code><code>=</code> <code>socket.socket(socket.AF_INET, socket.SOCK_STREAM)</code>
<code> </code><code># 監聽端口</code>
<code> </code><code>sock.bind((</code><code>'localhost'</code><code>,</code><code>8080</code><code>))</code>
<code> </code><code># 開始監聽</code>
<code> </code><code>sock.listen(</code><code>5</code><code>)</code>
<code> </code><code>while</code> <code>True</code><code>:</code>
<code> </code><code># 阻塞,等連接配接的請求,直到有請求來連接配接</code>
<code> </code><code># connection:代表用戶端sock的對象</code>
<code> </code><code># address:用戶端IP位址</code>
<code> </code><code>connection, address</code><code>=</code> <code>sock.accept()</code>
<code> </code><code>buf</code><code>=</code> <code>connection.recv(</code><code>1024</code><code>)</code>
<code> </code><code>print</code> <code>buf</code>
<code> </code><code>connection.send(</code><code>'http1.1 200 OK\r\n\r\n'</code><code>)</code>
<code> </code><code>connection.send(</code><code>"Hello World"</code><code>)</code>
<code> </code><code>connection.close()</code>
<code>if</code> <code>__name__</code><code>=</code><code>=</code> <code>'__main__'</code><code>:</code>
<code> </code><code>main()</code>
執行個體:10086服務
服務端:
<code>ip_port</code><code>=</code> <code>(</code><code>'127.0.0.1'</code><code>,</code><code>8888</code><code>)</code>
<code>sk</code><code>=</code> <code>socket.socket()</code>
<code>sk.bind(ip_port)</code>
<code>sk.listen(</code><code>5</code><code>)</code>
<code>while</code> <code>True</code><code>:</code>
<code> </code><code>conn,address</code><code>=</code> <code>sk.accept()</code>
<code> </code><code>conn.sendall(</code><code>'歡迎緻電 10086,請輸入1xxx,0轉人工服務.'</code><code>)</code>
<code> </code><code>Flag</code><code>=</code> <code>True</code>
<code> </code><code>while</code> <code>Flag:</code>
<code> </code><code>data</code><code>=</code> <code>conn.recv(</code><code>1024</code><code>)</code>
<code> </code><code>if</code> <code>data</code><code>=</code><code>=</code> <code>'exit'</code><code>:</code>
<code> </code><code>Flag</code><code>=</code> <code>False</code>
<code> </code><code>elif</code> <code>data</code><code>=</code><code>=</code> <code>'0'</code><code>:</code>
<code> </code><code>conn.sendall(</code><code>'通過可能會被錄音.........一大推'</code><code>)</code>
<code> </code><code>else</code><code>:</code>
<code> </code><code>conn.sendall(</code><code>'請重新輸入.'</code><code>)</code>
<code> </code><code>conn.close()</code>
用戶端:
<code>sk.connect(ip_port)</code>
<code>sk.settimeout(</code><code>5</code><code>)</code>
<code> </code><code>data</code><code>=</code> <code>sk.recv(</code><code>1024</code><code>)</code>
<code> </code><code>print</code> <code>'receive:'</code><code>,data</code>
<code> </code><code>inp</code><code>=</code> <code>raw_input</code><code>(</code><code>'please input:'</code><code>)</code>
<code> </code><code>sk.sendall(inp)</code>
<code> </code><code>if</code> <code>inp</code><code>=</code><code>=</code> <code>'exit'</code><code>:</code>
<code> </code><code>break</code>
<code>sk.close()</code>
***************當你發現自己的才華撐不起野心時,就請安靜下來學習吧***************
本文轉自散盡浮華部落格園部落格,原文連結:http://www.cnblogs.com/kevingrace/p/5570211.html,如需轉載請自行聯系原作者