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. spark0.9.1 assembly build-RedHat6.4 YARN 2.2.0

    1. Install git on RedHat6.4: 1.1. setup your local yum repo 1.2. yum install git 2. Install JDK and ...

  2. redhat6.4上安装mysql

    1.挂载操作系统介质 [root@server- ~]# mkdir -p /media/dvd [root@server- ~]# -20130130.0-Server-x86_64-DVD1.is ...

  3. Sql 注意点

    1. Set.Select赋值 使用SELECT语句来替代SET命令的主要优点是:可以在一个操作内同时给多个变量赋值.执行下面的SELECT语句,通过SELECT语句赋值的变量就可以用于任何操作了. ...

  4. c/c++面试题(6)运算符重载详解

    1.操作符函数: 在特定条件下,编译器有能力把一个由操作数和操作符共同组成的表达式,解释为对 一个全局或成员函数的调用,该全局或成员函数被称为操作符函数.该全局或成员函数 被称为操作符函数.通过定义操 ...

  5. iOS视图控制器的生命周期

    今天面试有一道面试题因为回答不好,因为也不经常涉及所以有点模糊,我选择了最保守的回答,没有展开写出我对这个问题的理解. 问题:IOS 开发 loadView 和 viewDidLoad 的区别? 经过 ...

  6. VC中预处理指令与宏定义详解

    刚接触到MFC编程的人往往会被MFC 向导生成的各种宏定义和预处理指令所吓倒,但是预处理和宏定义又是C语言的一个强大工具.使用它们可以进行简单的源代码控制,版本控制,预警或者完成一些特殊的功能. 一个 ...

  7. Cordova android框架详解

    一.Cordova 核心java类说明 CordovaActivity:Cordova Activity入口,已实现PluginManager.WebView的相关初始化工作, 只需继承Cordova ...

  8. div嵌套引起的margin-top不起作用

    通常大家在制作网页的过程中会遇到很多棘手的问题,比如我在写一个页面的时候,遇到了div嵌套引起的margin-top不起作用,对内部的div设置margin-top时,内部对于外部的div并没有产生一 ...

  9. javaweb--上传文件使用灵活的自定义添加

    //upload2.jsp <%@ page language="java" import="java.util.*" pageEncoding=&quo ...

  10. 如何加载JS

    外部JS的阻塞下载 所有浏览器在下载JS的时候,会阻止一切其他活动,比如其他资源的下载,内容的呈现等等.至到JS下载.解析.执行完毕后才开始继续并行下载其他资源并呈现内容. 有人会问:为什么JS不能像 ...