Python 9th Day

Python Socket

Socket 是一切网络通信的基础,socket 是一个网络通信两端的虚拟端点 (virtual endpoints), socket 可以被配置为一个 server that listen for incoming messages. 也可以是一个连接其他应用的客户端。在服务端和客户端各有一个 TCP/IP socket, 互相 connected and communication is bi-directional.

socket () 返回一个 socket object, 常量 (Constants):

协议族:

socket.AF_UNIX: 本地

socket.AF_INET: IPv4

socket.AF_INET6: IPv6

套接字类型:

socket.SOCK_STREAM: connection oriented TCP protocol

socket.SOCK_DGRAM: connection oriented UDP protocol

socket.SOCK_RAW: 网络层的原始协议

socket.SOCK_SEQPACKET: 可靠的有序的分组服务

创建套接字

# Create a TCP/IP socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

连接到一个 Server 上:

import socket
import sys

try:
    # create an AF_INET, STREAM socket (TCP)
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
except socket.error, msg:
    print(‘Failed to create socket. Error code: ‘ + str(msg[0]) + ‘ , Error message : ‘ + msg[1])
    sys.exit();

print ‘Socket Created‘

host = ‘www.google.com‘
port = 80

try:
    remote_ip = socket.gethostbyname( host )
except socket.gaierror:
    # could not resolve
    print(‘Hostname could not be resolved. Exiting‘)
    sys.exit()

print(‘Ip address of ‘ + host + ‘ is ‘ + remote_ip)

#Connect to remote server
s.connect((remote_ip , port))

print(‘Socket Connected to ‘ + host + ‘ on ip ‘ + remote_ip)

上面的程序创建了一个 socket 然后连接远程主机。连接的概念只应用于 SOCK_STREAM/TCP 类型的套接字,连接意味着可以有很多相互独立的数据管道。其他例如 UDP, ICMP, ARP 没有连接的概念,这些不基于连接的通信意味着会持续的接收和发送任何 packets.

一次完整的 socket 通信 (客户端) 包括:

1. Create a socket

2. Connect to remote server

3. Send some data

4. Receive a reply

server 端:

1. Open a socket

2. Bind to a address and port

3. Listen for incoming connections

4. Accept connections

4. Read / Send

常用套接字方法

  • bind() 方法绑定一个 socket, 例如
  • # Bind the socket to the port
    server_address = (‘localhost‘, 10000)
    sock.bind(server_address)
  • listen() 方法监听端口
  • accept() 方法等待 incoming connection, accept() 方法返回 an open connection 和 client address, the connection 实际是一个不同的在另外的端口 (由内核分配) 上的 socket, 接收数据是 conn.recv(), 发送是 conn.sendall(). The return value of accept() is a pair (conn, address) where conn is a new socket object usable to send and receive data on the connection, and address is the address bound to the socket on the other end of the connection.
  • # Listen for incoming connections
    sock.listen(1)
    
    while True:
        # Wait for a connection
        connection, client_address = sock.accept()
        try:
            # Receive the data in small chunks and retransmit it
            while True:
                # recv data
                data = connection.recv(16)
                if data:
                    # send data back
                    connection.sendall(data)
                else:
                    break
        finally:
            # Clean up the connection
            connection.close()
时间: 2024-10-13 02:37:28

Python 9th Day的相关文章

python小技巧(转)

http://blog.jobbole.com/63320/ 30 Python Language Features and Tricks You May Not Know About Posted on Mar 05, 2014 , last modified on May 19, 2014 - Permanent link 1   Introduction Since I started learning Python, I decided to maintain an often visi

【转载】Getting Started with Spark (in Python)

Getting Started with Spark (in Python) Benjamin Bengfort Hadoop is the standard tool for distributed computing across really large data sets and is the reason why you see "Big Data" on advertisements as you walk through the airport. It has becom

Spark入门(Python)

Hadoop是对大数据集进行分布式计算的标准工具,这也是为什么当你穿过机场时能看到”大数据(Big Data)”广告的原因.它已经成为大数据的操作系统,提供了包括工具和技巧在内的丰富生态系统,允许使用相对便宜的商业硬件集群进行超级计算机级别的计算.2003和2004年,两个来自Google的观点使Hadoop成为可能:一个分布式存储框架(Google文件系统),在Hadoop中被实现为HDFS:一个分布式计算框架(MapReduce). 这两个观点成为过去十年规模分析(scaling analy

KNN算法的Python实现

# KNN算法思路: #-----------------------------------------------------# #step1:读入数据,存储为链表 #step2:数据预处理,包括缺失值处理.归一化等 #step3:设置K值 #step4:计算待测样本与所有样本的距离(二值.序数.连续) #step5:投票决定待测样本的类别 #step6:利用测试集测试正确率 #-----------------------------------------------------# 注:

Spark入门(Python版)

Hadoop是对大数据集进行分布式计算的标准工具,这也是为什么当你穿过机场时能看到”大数据(Big Data)”广告的原因.它已经成为大数据的操作系统,提供了包括工具和技巧在内的丰富生态系统,允许使用相对便宜的商业硬件集群进行超级计算机级别的计 算.2003和2004年,两个来自Google的观点使Hadoop成为可能:一个分布式存储框架(Google文件系统),在Hadoop中被实现为HDFS:一个分布式计算框架(MapReduce). 这两个观点成为过去十年规模分析(scaling anal

机器学习 - Python 02

好了,咱们接着上一节的内容,继续学习机器学习中的Python语法部分.这一节算是Python语法的最后一节了.也就是说如果真的看懂了这两节的内容,理论上说就机器学习的领域或者方向,语言已经不是问题了.同时也意味着马上真正的进入机器学习的核心部分了.好了,那咱们接下来正式开始咱们的学习啦. Tuples Tuples是Python中的一种新的形式的数据collection(至少相对于C++, objective-C,Java是新的.其他的我就不敢肯定了,免得被打脸,哈哈).其实她和List几乎是一

《Python从入门到实践》--第五章 各种情形下使用if语句2 课后练习

题目: 5-8 以以特特殊殊方方式式跟跟管管理理员员打打招招呼呼 :创建一个至少包含5个用户名的列表,且其中一个用户名为'admin' .想象你要编写代码,在每位用户登录网站后都打印一条问候消息.遍历用户名列表,并向每位用户打印一条问候消息. 如果用户名为'admin' ,就打印一条特殊的问候消息,如“Hello admin, would you liketo seeastatus report?”.否则,打印一条普通的问候消息,如“Hello Eric, thank you for loggi

Python学习1-Python和Pycharm的下载与安装

本文主要介绍Python的下载安装和Python编辑器Pycharm的下载与安装. 一.Python的下载与安装 1.下载 到Python官网上下载Python的安装文件,进入网站后显示如下图: 网速访问慢的话可直接在这里下载:python-2.7.11.amd64 在Downloads中有对应的支持的平台,这里我们是在Windows平台下运行,所以点击Windows,出现如下: 在这里显示了Python更新的所有版本,其中最上面两行分别是Python2.X和Python3.X对应的最后更新版本

Python——深入理解urllib、urllib2及requests(requests不建议使用?)

深入理解urllib.urllib2及requests            python Python 是一种面向对象.解释型计算机程序设计语言,由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年,Python 源代码同样遵循 GPL(GNU General Public License)协议[1] .Python语法简洁而清晰,具有丰富和强大的类库. urllib and urllib2 区别 urllib和urllib2模块都做与请求URL相关的操作,但