您当前的位置:首页 > 计算机 > 编程开发 > Python

Python Socket介绍

时间:03-30来源:作者:点击数:

介绍

Socket并不属于TCP/IP协议簇,它只是一个编程接口,即对TCP/IP的封装和应用,简单理解TCP/IP看看作一个函数,而Socket用来进行调用,Socket可在网络中对两个程序建立通信通道,Socket可分为两个基本模块,一个服务端一个客户端,链接后进行通信。

参数

了解参数前先简单了解下过程,即Socket服务端需要先实例化一个Socket类,然后循环监听客户端的连接,建立连接后,接受客户端发送来的数据,随后再向客户端返回数据,传输完毕后关闭连接。

而Socket客户端,也需要先实例化一个Socket类,然后连接服务端Socket的ip地址,连接后开始发送数据,传输完毕后关闭连接。

以上就是一个简单的过程,下面来看下Socket的一些参数,首先socket可接受三个参数,第一个是地址族,常用的有AF_INET(IPv4通信,为默认参数)、AF_INET6(IPv6通信)、AF_PACKET(链路层通信)、AF_LOCAL和AF_ROUTE(本地通信),第二个参数用来指明socket类型,常用的是SOCK_STREAM(TCP类型,为默认参数)、SOCK_DGRAM(UDP类型)、SOCK_RAW(原始数据类型),第三个是可选参数,用来指使用协议,一般不选系统会自动选择。

所以如果需要实例化一个TCP的socket,也就是默认参数可不写,即:

s=socket.socket()

也就相当于

socket.socket(socket.AF_INET,socket.SOCK_STREAM)

而UDP的socket类型即:

socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

函数

Socket服务端常见的一些函数如下:

bind:服务端使用,用来绑定socket的ip和端口,可以元组方式写入,示例如下。

s.bind((‘127.0.0.1’,1234))

listen:使用TCP模式时用来开启监听,可传入一个参数,用来指定允许连接的最大数量。

accept:使用TCP时此函数会返回两个值,一个是新的连接对象,一个是客户端的ip地址。

Socket客户端常见的一些函数如下:

connect:连接服务端函数,参数元组类型,需要传入socket服务端的ip和端口。

send:此函数用来发送数据,返回的值为已发送的字节数。

sendall:与send类似,区别在于send可能会发送不完全,而sendall会发送完整的TCP数据,成功返回none,失败将抛出异常。

recv:此函数用于接受数据,已字符串形式返回,可传入bufsize参数,用来指定最多可以接收的量。

sendto:此函数指使用UDP时发送数据。

recvfrom:此函数指使用UDP时接收数据。

close:关闭socket连接。

示例

以下为一个socket服务端的示例代码:

import socket

s = socket.socket()
s = bind(('127.0.0.1',6666))
s.listen(3)

while 1:
    conn,address = s.accept()
    print "a new connect from", address
    conn.sendall("Hello")
    conn.close()

过程很简单,相关函数上面都已罗列说明,下面再看以下客户端的示例代码。

import socket

s = socket.socket()
s.connect(("172.168.1.102", 6666))
data = s.recv(1024)
s.close()
print "Received:", repr(data)

运行效果如下:

以上就是socket的简单使用,后续相关内容使用到后再详细说明。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门