python socket

Posted by

1.什么是socket:

socket又称套接字,应用程序经常通过套接字向网络发出请求,使主机间或者一台计算机上的进程间可以通讯

2.socket函数:

python中,我们用socket()函数来创建套接字,语法格式如下:

socket([family[,type[,protocal]]])

Ⅰ.family:套接字家族里可以使用AF_UNIX或者AF_INET

Ⅱ.type:套接字类型,可以根据是面向对象连接还是非连接分为SOCK_STREAM或SOCK_DGRAM

Ⅲ.protocal:一般不填,默认为0

3.socket对象(内建)方法

s = socket.socket()

服务端套接字:

1>

s.bind( (host,port) )

bind()里面是一个元组:(host,port)

其中host是连接地址(IP地址或者域名),port是端口

作用是绑定地址 (host,port) 到套接字

2>

s.listen(backlog)

backlog是指定在拒绝连接之前,操作系统可以挂起的最大连接数量。该值至少为1,大部分应用程序设为5就可以了

3>

s.accept()

作用:被动接受TCP客户端的连接,(阻塞式)等待连接的到来

写法:

c,addr = s.accept()

c就是客户端对象(s是服务端对象),addr是客户端的地址

客户端套接字:

1>

s.connect( (host,port) )

connect()中是一个元组:(host,port)

其中host 是地址(IP地址或者域名),port是端口=

作用是连接服务端

如果连接出错,返回socket.error错误

2>

s.connect_ex( (host,port) )

connect()的扩展版本,出错时返回出错码,而不是抛出异常

公共用途的套接字:

1>

s.recv(bufsize)

bufsize是指定要接收的最大数据量

作用是接收TCP数据,数据以字符串形式返回

2>

s.send(str)

作用是发送TCP数据,

将string中的数据发送到连接的套接字。

返回值是要发送的字节数量,该数量可能小于string的字节大小

3>

s.sendall(str)

作用是发送完整的TCP数据。将string中的数据发送到连接的套接字。但在返回前会尝试发送所有的数据。

成功返回None,失败返回异常

4>

s.makefile()

作用是创建一个与该套接字相关联的文件

5>

s.close()

作用为关闭TCP连接

实例1:

服务端:

import socket                           #导入socket模块
s = socket.socket()                     #创建socket对象
host = socket.gethostname()             #获取本机主机名
port = 10000                            #设置端口号
s.bind((host,port))                     #绑定端口
s.listen(5)                             #开始TCP监听,backlog=5
c,addr = s.accept()                     #建立客户端连接
print("连接地址为:",addr)
while True :
    b = c.recv(2048)                    #接收数据,bufsize=2048
    print(b)
    c.send('Hello')                     #发送数据
c.close()                               #关闭客户端连接

客户端:

import socket
s = socket.socket()
host = socket.gethostname()
port = 10000
s.connect( (host,port) )
s.send('hello')
b = s.recv(2048)
print(b)
s.close()