1.什麼是socket
網絡上的兩個程序通過一個雙向的通信連接實現數據的交換,這個連接的一端稱爲一個socket。
所謂socket通常也稱作“套接字”,用於描述IP地址和端口,是一個通信鏈的句柄,應用程序通常通過“套接字”向網絡發出請求或應答網絡請求
socket起源於Uinx,而Unix/Linux基本哲學之一就是“一切皆文件”,都可以用“打開open–>讀寫write/read–>關閉close”模式來操作,socket就是該模式的一個實現,socket即是一種特殊的文件,一些socket函數就是對其進行的操作(讀/寫 IO,打開,關閉)
Socket的英文原義是“孔”或“插座”。作爲BSD UNIX的進程通信機制,取後一種意思。通常也稱作”套接字”,用於描述IP地址和端口,是一個通信鏈的句柄,可以用來實現不同虛擬機或不同計算機之間的通信。在Internet上的主機一般運行了多個服務軟件,同時提供幾種服務。每種服務都打開一個Socket,並綁定到一個端口上,不同的端口對應於不同的服務。Socket正如其英文原義那樣,像一個多孔插座。一臺主機猶如佈滿各種插座的房間,每個插座有一個編號,有的插座提供220伏交流電,有的提供110伏交流電,有的則提供有線電視節目。 客戶軟件將插頭插到不同編號的插座,就可以得到不同的服務
例如:中國移動客服
對於移動來說:一直監聽一個號碼10086,當有電話進來後,就分配一個客服和 客戶去溝通並處理請求
對於用戶:需要知道10086這個號碼,並需要打電話
client端
import socket
# 創建一個socket對象
client = socket.socket()
# 創建連接
ip_port = ('127.0.0.1',9998)
client.connect(ip_port)
while True:
# 獲取數據
data = client.recv(1024)
print data
# 發送數據
inp = raw_input('clent:')
client.send(inp)
if inp == 'exit':
break
server端
import socket
# 1.創建socket對象
sk = socket.socket()
# 2.綁定端口和ip
ip_port = ('127.0.0.1',9998)
sk.bind(ip_port)
# 3.最大連接數
sk.listen(5)
while True:
# 獲取客戶端的ip和端口號
conn,address = sk.accept()
#conn = result[0]
#address = result[1]
#print result
#print type(result)
conn.send('hello')
flag = True
while flag:
data = conn.recv(1024)
print data
if data == 'exit':
flag = False
conn.send('sb')
conn.close()