天天看點

初識Socket

什麼是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&amp;端口連接配接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,如需轉載請自行聯系原作者