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. DTO概念

    在开发过程中用到了DTO,简单了解了一下. DTO:数据传输对象,用来连接表现层和应用层之间的数据交互.数据传输对象是没有行为的POJO对象,它的目的只是为了对领域对象进行数据封装,实现层与层之间的数 ...

  2. java中的传值与传引用

    java函数中的传值和传引用问题一直是个比较“邪门”的问题,其实java函数中的参数都是传递值的,所不同的是对于基本数据类型传递的是参数的一份拷贝,对于类类型传递的是该类参数的引用的拷贝,当在函数体中 ...

  3. AngularJS向指令传递数据

    我今天要实现的功能是利用AngularJS来完成客户端过滤器. list.html页面主要代码如下: ...... <div class='tj_con_tr_ipt' ng-init=&quo ...

  4. Java的内部类

    Java的内部类 首先我们来了解一下什么是内部类? 内部类是指在一个外部类的内部再定义一个类.内部类可以是静态static的,也可用public,default,protected和private修饰 ...

  5. OC 解决NSArray、NSDictionary直接打印中文出现乱码的问题

    在iOS开发中,经常需要查看数组中得元素是否是自己想要的,但是苹果并没有对直接打印数组中得中文作处理,直接打印就会出现一堆很讨厌的东西,解决其实很简单,就是需要通过为NSArray添加分类,重写 - ...

  6. [Python模式]策略模式

    策略模式 定义了算法族,分别封装起来,让它们之间可以互相替换.此模式让算法的变化独立于使用算法的客户. 作为动态语言,Python实现策略模式非常容易,只要所有算法提供相同的函数即可. import ...

  7. UIkit框架之UIDatePicker

    1.继承链:UIcontrol:UIview:UIResponder:NSOobject 2.和uidatepicker相关联的触发事件是 UIControlEventValueChanged,当使用 ...

  8. c/c++ 函数指针 指针函数 数组的引用 指针数组 数组指针

    1.指针数组数组指针 引用数组 数组的引用 int *a[10] 指针数组 每一个元素都是一个指针 Int (*a)[10] 数组指针 P指向一个含有10个元素的数组 Int (&a)[10] ...

  9. 第三个Sprint冲刺第五天

    讨论地点:宿舍 讨论成员:邵家文.李新.朱浩龙.陈俊金 讨论问题:继续昨天的工作

  10. RSS(Residual Sum of Squares)的自由度为什么是n-1呢

    [转载请注明出处]http://www.cnblogs.com/mashiqi 在回归问题中,偶尔我们会遇到求方差的估计的情况.举了例子,我们常常通过Gaussian分布${\cal N}(\mu , ...