python学习笔记-Day08--(socket和socketserver)

socket是什么

Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求

想要深入了解的话,建议去看一下 TCP/IP协议详解第一卷,有了网络通信的基础更容易理解socket。

其实socket 可以这样理解,socket起源于unix/linux,而unix/linux的设计哲学 一部分就是 “一切皆文件”, 操作文件的时候都是

打开文件--》 操作文件  --》关闭文件

这样一个模式。socket就是该模式在网络通信上的一个具体实现。打一个比喻就是 两个人要打电话时用的电话。

python有两个基本的socket模块

 socket   #提供对网络通信的访问,该模块提供了一个底层的C API ,可以是用BSD套接字借口实现网络通信
 SocketServer  # 创建网络服务器,该模块是创建网络服务器的一个框架,

在《python标准库》 有详细的解释,(一本很使用的工具书,推荐大家看看)

一个简单的例子

socket_server.py

    import socket
    obj = socket.socket()   #创建套接字
    obj.bind(("127.0.0.1",8342))  #绑定服务器地址信息
    obj.listen()   #开始监听

    while  True:
        conn,addr = obj.accept() # 等待一个链接过来
        client_data = conn.recv()  # 接收数据
        client_data
        conn.send()   # 发送数据
        conn.close()    # 关闭链接
socket_client.py
    
    import socket
    obj = socket.socket()  # 创建套接字
    obj.connect(("127.0.0.1",8342))   # 链接远程服务器
    obj.send("im client")    # 发送数据
    ser_data = obj.recv(1024)   # 接收服务器数据
    print ser_data 
    obj.close()   #关闭套接字

实现过程:

服务端:

  1. 创建套接字,
  2. 将套接字绑定到服务器地址和端口上,这里是本地的ip和端口
  3. 监听链接信息
  4. 接收数据,处理数据,返回数据给客户端
  5. 关闭链接

客户端:

  1. 创建套接字
  2. 创建链接,链接到远程服务器
  3. 发送数据
  4. 接收数据,处理数据
  5. 关闭连接

关于socket模块涉及的方法(从help函数得来),不写写,似乎说不过去
     |  
     |  __init__(self, family=2, type=1, proto=0, _sock=None)

|

|  accept(self)
     |      accept() -> (socket object, address info)
     |      等待一个进入的链接,返回一个客户端的连接对象和地址
     |      Wait for an incoming connection.  Return a new socket representing the
     |      connection, and the address of the client.  For IP sockets, the address
     |      info is a pair (hostaddr, port).
     |  
     |  bind(...)
     |      bind(address)
     |      “”“ 将套接字绑定到ip和端口上”“”
     |      Bind the socket to a local address.  For IP sockets, the address is a
     |      pair (host, port); the host must refer to the local host. For raw packet
     |      sockets the address is a tuple (ifname, proto [,pkttype [,hatype]])
     |  
     |  close(self, _closedsocket=<class ‘socket._closedsocket‘>, _delegate_methods=(‘recv‘, ‘recvfrom‘, ‘recv_into‘, ‘recvfrom_into‘, ‘send‘, ‘sendto‘), setattr=<built-in function setattr>)
     |      close()
     |        关闭套接字
     |      Close the socket.  It cannot be used after this call.
     |  
     |  connect(...)
     |      connect(address)
     |      通过套接字链接到远程地址, 参数address的使用方式为(host, port)

|      Connect the socket to a remote address.  For IP sockets, the address
     |      is a pair (host, port).
     |  
     |  connect_ex(...)
     |      connect_ex(address) -> errno
     |      
     |      This is like connect(address), but returns an error code (the errno value)
     |      instead of raising an exception when an error occurs.
     |  
     |  dup(self)
     |      dup() -> socket object
     |      
     |      Return a new socket object connected to the same system resource.
     |  
     |  fileno(...)
     |      fileno() -> integer
     |      
     |      Return the integer file descriptor of the socket.
     |  
     |  getpeername(...)
     |      getpeername() -> address info
     |      
     |      Return the address of the remote endpoint.  For IP sockets, the address
     |      info is a pair (hostaddr, port).
     |  
     |  getsockname(...)
     |      getsockname() -> address info
     |      
     |      Return the address of the local endpoint.  For IP sockets, the address
     |      info is a pair (hostaddr, port).
     |  
     |  getsockopt(...)
     |      getsockopt(level, option[, buffersize]) -> value
     |      
     |      Get a socket option.  See the Unix manual for level and option.
     |      If a nonzero buffersize argument is given, the return value is a
     |      string of that length; otherwise it is an integer.
     |  
     |  gettimeout(...)
     |      gettimeout() -> timeout
     |      
     |      Returns the timeout in seconds (float) associated with socket
     |      operations. A timeout of None indicates that timeouts on socket
     |      operations are disabled.
     |  
     |  listen(...)
     |      listen(backlog)
     |      开始监听链接,
     |      Enable a server to accept connections.  The backlog argument must be at
     |      least 0 (if it is lower, it is set to 0); it specifies the number of
     |      unaccepted connections that the system will allow before refusing new
     |      connections.
     |  
     |  makefile(self, mode=‘r‘, bufsize=-1)
     |      makefile([mode[, bufsize]]) -> file object
     |      
     |      Return a regular file object corresponding to the socket.  The mode
     |      and bufsize arguments are as for the built-in open() function.
     |  
     |  sendall(...)
     |      sendall(data[, flags])
     |      发送数据到套接字,调用的send() 函数来实现
     |      Send a data string to the socket.  For the optional flags
     |      argument, see the Unix manual.  This calls send() repeatedly
     |      until all data is sent.  If an error occurs, it‘s impossible
     |      to tell how much data has been sent.
     |  
     |  setblocking(...)
     |      setblocking(flag)
     |      
     |      Set the socket to blocking (flag is true) or non-blocking (false).
     |      setblocking(True) is equivalent to settimeout(None);
     |      setblocking(False) is equivalent to settimeout(0.0).
     |  
     |  setsockopt(...)
     |      setsockopt(level, option, value)
     |      
     |      Set a socket option.  See the Unix manual for level and option.
     |      The value argument can either be an integer or a string.
     |  
     |  settimeout(...)
     |      settimeout(timeout)
     |      
     |      Set a timeout on socket operations.  ‘timeout‘ can be a float,
     |      giving in seconds, or None.  Setting a timeout of None disables
     |      the timeout feature and is equivalent to setblocking(1).
     |      Setting a timeout of zero is the same as setblocking(0).
     |  
     |  shutdown(...)
     |      shutdown(flag)
     |      
     |      Shut down the reading side of the socket (flag == SHUT_RD), the writing side
     |      of the socket (flag == SHUT_WR), or both ends (flag == SHUT_RDWR).

SocketServer 东西太多了 就不多说了 ,help一下自己看,你应该知道自学的重要性的。

大神博客地址

http://home.cnblogs.com/u/wupeiqi/

我的blog地址:

http://www.timesnotes.com/?p=143

时间: 2024-10-12 05:35:10

python学习笔记-Day08--(socket和socketserver)的相关文章

Python学习笔记(socket)

搭建服务端 1.导入模块 import socket 2.创建socket对象 sock=socket .socket(socket_family,socket_topy) 3.绑定端口 sock.bind(("",8000)) 4.设置监听 sock.listen(5) 5.接受信息 con,add=sock.accept() con:接受sock对象,接受对方发送的信息 add:IP识别 con.send("hello,i am your server") 6.

python学习笔记(socket模块)

1.socket模块使用要分为服务端及客户端,服务端用于接收并处理请求,然后把请求数据回传回到客户端,客户端用于读取数据.关闭连接.最后结束交互 2.服务端socket模块使用步骤: 1 import socket 2 3 phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) 4 phone.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) # 5 phone.bind(('127.0.

python学习笔记之socket(第七天)

     参考文档:              1.金角大王博客:http://www.cnblogs.com/alex3714/articles/5227251.html              2.银角大王博客:http://www.cnblogs.com/wupeiqi/articles/5040823.html socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. sock

Tornado/Python 学习笔记(二)

部分ssrpc.py代码分析 -- 服务端: 1 #!/usr/bin/python3 2 3 from xmlrpc.client import Fault, dumps, loads 4 import sys 5 from socketserver import ForkingMixIn 6 from xmlrpc.server import SimpleXMLRPCServer 7 8 class VerboseFaultXMLRPCServer(SimpleXMLRPCServer):

Python学习笔记基础篇——总览

Python初识与简介[开篇] Python学习笔记——基础篇[第一周]——变量与赋值.用户交互.条件判断.循环控制.数据类型.文本操作 Python学习笔记——基础篇[第二周]——解释器.字符串.列表.字典.主文件判断.对象 Python学习笔记——基础篇1[第三周]——set集合 Python学习笔记——基础篇2[第三周]——计数器.有序字典.元组.单(双)向队列.深浅拷贝.函数.装饰器 Python学习笔记——基础篇[第四周]——迭代器&生成器.装饰器.递归.算法.正则表达式 Python

Python学习笔记进阶篇——总览

Python学习笔记——进阶篇[第八周]———进程.线程.协程篇(Socket编程进阶&多线程.多进程) Python学习笔记——进阶篇[第八周]———进程.线程.协程篇(异常处理) Python学习笔记——进阶篇[第八周]———进程.线程.协程篇(多线程与进程池) Python学习笔记——进阶篇[第九周]———线程.进程.协程篇(队列Queue和生产者消费者模型) Python学习笔记——进阶篇[第九周]———协程 Python学习笔记——进阶篇[第九周]———MYSQL操作

python &nbsp; 学习笔记 (核心)

python    学习笔记 (核心) Python解释器从头到尾一行接一行执行脚本 # -*- coding: UTF-8 -*-    //字符编码 不区分单引号和双引号,x='hello',x[0],x[-1]指最后一个字符,x[2:4]取子串, '''hello''' #hello三引号会保留文本输入时的换行符制表符等不需要转义,用于多行原样输入保存 'hello'+'world' #字符串拼接,'hello'*2 #字符串重复 help(fun) #帮助,help(module.met

Tornado/Python 学习笔记(一)

1.源代码下载及安装:http://www.tornadoweb.org/en/stable/ 2.python中xmlrpc库官方文档:https://docs.python.org/3/library/xmlrpc.html?highlight=xmlrpc 3.xml介绍与学习:http://www.w3school.com.cn/xml/xml_intro.asp XML 被设计为传输和存储数据,其焦点是数据的内容. HTML 被设计用来显示数据,其焦点是数据的外观. HTML 旨在显示

OpenCV之Python学习笔记

OpenCV之Python学习笔记 直都在用Python+OpenCV做一些算法的原型.本来想留下发布一些文章的,可是整理一下就有点无奈了,都是写零散不成系统的小片段.现在看 到一本国外的新书<OpenCV Computer Vision with Python>,于是就看一遍,顺便把自己掌握的东西整合一下,写成学习笔记了.更需要的朋友参考. 阅读须知: 本文不是纯粹的译文,只是比较贴近原文的笔记:         请设法购买到出版社出版的书,支持正版. 从书名就能看出来本书是介绍在Pytho

python学习笔记12-模块使用

python学习笔记12-模块使用 模块os,sys 什么是模块? 模块os,sys 模块是Python组织代码的一种基本方式 一个Python脚本可以单独运行,也可以导入到另外一个脚本运行,用import hello语句来导入,不用加入.py 什么是Python的 包? Python的模块可以按照目录组织为包 创建一个包的步骤: 创建一个名字为包名的目录 在改目录下创建一个__init__.py文件 根据需要,在该目录下存放脚本文件或已编译的扩展及子包 import pack.m1,pack.