什麼是Socket?
網絡上的兩個程式通過一個雙向的通信連接配接實作資料的交換,這個連接配接的一端稱為一個socket。
Socket的英文原義是“孔”或“插座”。作為BSD UNIX的程序通信機制,取後一種意思。通常也稱作"套接字",用于描述IP位址和端口,是一個通信鍊的句柄,可以用來實作不同虛拟機或不同計算機之間的通信。在Internet上的主機一般運作了多個服務軟體,同時提供幾種服務。每種服務都打開一個Socket,并綁定到一個端口上,不同的端口對應于不同的服務
上面是不是很亂?但是概念一定要了解
現在是初學,我把Socket了解為一個電話撥通電話,接聽電話!通信的一個概念!
Socket在寫的時候要記住:有發就有收,收發必相等!
socket_server
<code>#!/usr/bin/env python</code>
<code>#-*- coding:utf-8 -*-</code>
<code>import</code> <code>socket</code>
<code>#建立socket對象</code>
<code>ck </code><code>=</code> <code>socket.socket()</code>
<code>#通過IP&端口連接配接server</code>
<code>ck.connect((</code><code>'127.0.0.1'</code><code>,</code><code>6666</code><code>))</code>
<code>#發送消息給服務端</code>
<code>ck.sendall(</code><code>'hello server this is Clinet'</code><code>)</code>
<code>#接收服務端的消息并列印</code>
<code>server_answer </code><code>=</code> <code>ck.recv(</code><code>1024</code><code>)</code>
<code>print</code> <code>server_answer</code>
<code>#關閉連接配接</code>
<code>ck.close()</code>
socket_client
執行流程圖如下:
<a href="http://s4.51cto.com/wyfs02/M01/7F/09/wKioL1cQrNDT1F0AAADAH4nZQ-w080.png" target="_blank"></a>
server端:
參數一:位址簇
socket.AF_INET IPv4(預設)
socket.AF_INET6 IPv6
socket.AF_UNIX 隻能夠用于單一的Unix系統程序間通信
參數二:類型
socket.SOCK_STREAM 流式socket , for TCP (預設)
socket.SOCK_DGRAM 資料報式socket , for UDP
socket.SOCK_RAW 原始套接字,普通的套接字無法處理ICMP、IGMP等網絡封包,而SOCK_RAW可以;其次,SOCK_RAW也可以處理特殊的IPv4封包;此外,利用原始套接字,可以通過IP_HDRINCL套接字選項由使用者構造IP頭。
socket.SOCK_RDM 是一種可靠的UDP形式,即保證傳遞資料報但不保證順序。SOCK_RAM用來提供對原始協定的低級通路,在需要執行某些特殊操作時使用,如發送ICMP封包。SOCK_RAM通常僅限于進階使用者或管理者運作的程式使用。
socket.SOCK_SEQPACKET 可靠的連續資料包服務
參數三:協定
0 (預設)與特定的位址家族相關的協定,如果是 0 ,則系統就會根據位址格式和套接類别,自動選擇一個合适的協定
在建立socket對象的時候一般使用預設即可:sk = socket.socket()
轉載位址:http://www.cnblogs.com/luotianshuai/p/5058562.html
本文轉自027ryan 51CTO部落格,原文連結:http://blog.51cto.com/ucode/1764233,如需轉載請自行聯系原作者