scoket:
scoket 通常也 被称作“套接字”,网络上的两个程序通过一个双向的通信连接实现数据交换,这个连接的一段成为一个socket,socket是网络连接端点。例如你的web浏览器在请求网上的主页时,你的webl浏览器创建一个socket并命令他去连接,网络web服务器的主机,web服务器也对来自目的的请求在一个socket上进行监听。两端使用各自的socket;来发送和接受消息。
socket 模块提供了几个函数用于使用主机名和地址来工作:
ggethostname():返回运行程序所在的计算机的主机名:
>>> import socket
>>> socket.gethostname()
'MY-THINK'
gethostbyname():尝试将给定的主机名解释为一个IP地址
>>> socket.gethostbyname("www.baidu.com")
'111.13.100.91'
>>> socket.gethostbyname("MY-THINK")
'192.168.1.105'
>>>
ps: 首先将检查当前计算机是否能够解释。如果不能,一个解释请求将发送给一个远程的DNS服务器(远程的DNS服务器 还可能将解释请求转发给另一个DNS服务器,直到该请求可以被处理)。gethostbyname函数返回这个IP地址或在查找失败后引发一个异常。
scoket 通信
scoket.scoket(family = AF_INET, type = scoket_STREAM,proto = 0, fileno = None)
( 1 ) family = AF_INIT表示服务器之间的通信,
(2) fmily = AF_UNIX 表示Unix不同进程间的通信,
(3) type = SOCK_STREAM表示TCP连接,
(4)type = SOCK_DGRAM 表示UDP连接,
scoket中用于 服务端 连接的方法有
1.bind( )
sk.bind(address)
将地址与socket绑定。address(host IP,端口号),address必须是个元祖
2.listen( )
sk.listen(backlog)
监听客户端的连接,backlog为可选参数,表示最大的连接数量,
3.accept( )
接受并返回(conn, address),其中conn,表示客户端的对象
socket 中用于 客户端 的方法有 :
1. recv( )
sk.recv(bufsize)
接受数据,其中bufsize 表示最大可接受的数据的大小
2. connect()
sk.connect(address)
连接指定地址的socket,address用元祖表示
3.send()
将 data 发送给socket.
4.sendall()
与 send 相似,内部通过send()方法,尝试将所有数据发送出去。
5. sendto( )
sk.sendto(data,addr)
可指定远端地址
注意:
TCP(SOCK_ATREAM),需要连接到远程主机才可以发送数据,发送数据用 send(b'字符')
UDP(SOCK_DGRAM),不需要连接,直接发送数据,发送数据用sendto(b'字符',(IP,port))