socket 常见方法:

补充说明:what is file descriptor? 文件描述符是什么?

参考(http://stackoverflow.com/questions/8191905/whats-is-difference-between-file-descriptor-and-file-pointer)

File pointer:

  1. It is high level interface
  2. Passed to fread() and fwrite() functions
  3. Includes buffering,error indication and EOF detection,etc.
  4. Provides higher portability and efficiency.

File descriptor:

  1. Low/Kernel level handler
  2. passe to read() and write() of UNIX System Calls
  3. Doesn't include buffering and such features
  4. Less portable and lacks efficiency

socket.accept() ,接受一个连接,但前提是socket必须已经绑定了一个地址,在等待连接。返回值是一个(conn, addresss)的值对,这里的conn是一个socket对象,可以用来改送或接收数据.而address是连接另一端绑定的地址,socket.getpeername()函数也能返回该地址。

socket.bind(address),将socket对象绑定到一个地址,但这个地址必须是没有被占用的,否则会连接失败。这里的address一般是一个ip,port对,如(‘localhost’, 10000)

socket.close(),关闭连接,当socket.close()执行时,与这个连接相关的底层操作也会关闭(如文件描述符),一旦关闭,再对相关的文件对象操作都会失败。

socket.connect(address),连接到一个address对应的远程socket。如果连接被中断,这个方法会等待直到连接完成,或者会抛出socket.timeout错误(超时)

socket.connect_ex(address), 类似与connect(address),但是当遇到c语言层的异常时,并不会抛出异常,而是返回一个错误指示器。但其他异常如host not found还是会抛出异常,操作成功时,错误指示器的值是0,否则是不确定的值。

如:

>>> import socket
>>> s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
>>> s.connect_ex(('localhost', 1024))
111

socket.detach(),将socket 对象设置为关闭状态,但底层的文件描述符并没关闭,仍可以进行操作,返回值为文件描述符。

socket.dup(), 复制一个socket

socket.fileno(),返回文件描述符(一个很小的整数),如果失败返回-1.win系统上,返回的个整数不能用在如os.fdopen()方法。

socket.get_inheritable(),测试socket是否可以继承,True或者False

socket.getpeername() , 返回当前socket连接的远程地址

socket.getsockname(), 返回socket自己的地址,如:

>>> s.bind(('localhost', 10000))
>>> s.getsockname()
('127.0.0.1', 10000)

socket.gettimeout(), 返回超时值,单位是秒,没有设置返回None.

>>> s.gettimeout()
>>> print(s.gettimeout())
None
>>>

socket.listen([backlog]), 监听,使得服务器能接收服务端连接,如果backlog指定了(最少是0,如果比0小,系统默认改成0),限制可以连接的数量,如果没有指定,将指派一个默认的合理值。

socket.makefile(mode='r', buffering=None, *, encoding=None, errors=None,newline=None), 返回一个文件对象,具体类型与参数相关,除了只能指定‘r’,‘w’,'b'模式外,与open()函数一样.

前提条件是socket必须是阻塞模式,它可以含有一个超时间(指socket),如果发生超时,内部缓冲区会在不一致的状态中关闭。

关闭文件对象不会关闭socket,除非调用了socket.close()方法,或者所有其他文件对象都关闭了。

注意:在win上,makefile创建的一个类文件对象在需要文件描述符的文件对象的情况下是无法使用的(意思大概是makefile创建的文件对象没有文件描述符)

socket.recv(bufsize[, flags]),从socket接收数据,注意是byte类型,bufsize指定一次最多接收的数据大小,

 

socket.recvfrom(bufsize[, flags]) ,与上一个方法的区别是返回值除了数据还有发送数据的地址,返回值是一个数据,地址对(data, address)

socket.recvmsg(bufsize[, ancbufsize[, flags]]), 接收常规文件,附件等。ancbufsize设定附件接收缓冲区,类似于bufsize。但返回值是有四个元素的元组()。(data, ancdata, msg_flags, address). ancdata是一个含有四个0的列表或者是(cmsg_level, cmsg_type, cmsg_data)这样的列表。

socket.send(bytes[,flags]), 发送数据到socket,前提是已经连接到远程socket,返回值是发送数据的量,检查数据是否发送完是应用的责任

socket.sendall(bytes[,flags]), 同上,与send不同的是,它会一直发送完为止,或者发生了错误,导致异常。发送成功返回None

socket.sendto(bytes, flags, address), 基本与socket.send()相同

socket.sendmsg()对应上面的socket.recvmsg()

待续。。。

python socket 常见方法及 简单服务/客户端的更多相关文章

  1. python全栈开发day29-网络编程之socket常见方法,socketserver模块,ftp作业

    一.昨日内容回顾 1.arp协议含义 2.子网,子网掩码 3.两台电脑在网络中怎么通信的? 4.tcp和udp socket编码 5.tcp和udp协议的区别 6.tcp三次握手和四次挥手,syn洪攻 ...

  2. 170925_2 Python socket 创建UDP的服务器端和客户端

    [python版本]3.6 UDP服务器端: from socket import * from time import ctime host = '' port = 21567 buf_size = ...

  3. 170925_1 Python socket 创建TCP的服务器端和客户端

    [Python版本]3.6 [遇到的问题] 客户端和服务器端都遇到:TypeError: a bytes-like object is required, not 'str' [解决方案] 参考:ht ...

  4. 项目: 基于Python socket模块实现的简单 ftp 项目:

    需要 自己创建一个 info 文件 用来存储用户信息 服务器: import socket import pickle import struct import os import time ''.s ...

  5. python socket编程实现的简单tcp迭代server

    与c/c++ socket编程对照见http://blog.csdn.net/aspnet_lyc/article/details/38946915 server: import socket POR ...

  6. Python socket套接字简单例子

  7. 用socket写一个简单的客户端和服务端程序

    用来练手写写socket代码 客户端代码 #include <stdio.h> #include <sys/types.h> #include <sys/socket.h ...

  8. Python socket编程客户端与服务端通信

    [本文出自天外归云的博客园] 目标:实现客户端与服务端的socket通信,消息传输. 客户端 客户端代码: from socket import socket,AF_INET,SOCK_STREAM ...

  9. Python socket 客户端和服务器端

    connection, address = socket.accept() 调 用accept方法时,socket会时入“waiting”状态.客户请求连接时,方法建立连接并返回服务器.accept方 ...

随机推荐

  1. Java学习指南学习笔记

    1, Java是一种静态类型.动态绑定的语言.具体来说,每一个对象都是编译时确定的良好类型.同时,可以在运行时检查一个对象究竟是什么. 2, Java中除了基本数字类型之外,Java中所有的对象都是通 ...

  2. bicycle

    http://bj.ganji.com/zixingchemaimai/611076069x.htm

  3. c# windows编程控件学习-2

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  4. PHP 配置文件中open_basedir选项作用

    如下是php.ini中的原文说明以及默认配置: ; open_basedir, if set, limits all file operations to the defined directory  ...

  5. supervisor安装配置与使用

    supervisor:C/S架构的进程控制系统,可使用户在类UNIX系统中监控.管理进程.常用于管理与某个用户或项目相关的进程. 组成部分supervisord:服务守护进程supervisorctl ...

  6. Android RecyclerView单击、长按事件:基于OnItemTouchListener +GestureDetector标准实现(二),封装抽取成通用工具类

     Android RecyclerView单击.长按事件:基于OnItemTouchListener +GestureDetector标准实现(二),封装抽取成通用工具类 我写的附录文章2,介绍了 ...

  7. 黑马程序员:Java编程_基础语法

    =========== ASP.Net+Android+IOS开发..Net培训.期待与您交流!=========== 一.数据类型 基本数据类型(简单数据类型.语言所内置的类型) 引用数据类型:(自 ...

  8. iOS-----类和对象,nil/Nil/NULL的区别

    iOS中类和对象,nil/Nil/NULL的区别 类与对象的概念 类是对同一类事物高度的抽象,类中定义了这一类对象所应具有的静态属性(属性)和动态属性(方法). 对象是类的一个实例,是一个具体的事物. ...

  9. Day18_集合第四天

    1.Map集合成员方法(掌握) 增加功能 V put(K key, V value) 当key在集合中不存在时,添加元素:当key在集合存在时候,替换元素 删除功能 void clear 清除所有键值 ...

  10. raw_input 和input的区别

    input它会根据用户输入变换相应的类型, raw_input则是不管用户输入什么类型的都会转变成字符型.