Python Socket套接字

socket平时也称为”套接字”,用于描述IP地址和端口,是叁个通讯链的句柄,应用程序常常经过”套接字”向互连网发出请求只怕应答互联网请求。

Python Socket套接字,pythonsocket套接

socket常常也称为”套接字”,用于描述IP地址和端口,是二个通讯链的句柄,应用程序平时经过”套接字”向互联网发出请求只怕应答网络请求。

socket源点于Unix,而Unix/Linux基本军事学之一便是“一切皆文件”,对于文本用【打开】【读写】【关闭】形式来操作。socket便是该方式的2个兑现,socket正是一种特别的文本,一些socket函数正是对其展开的操作(读/写IO、打开、关闭)

socket和file的区别:

  • file模块是针对性有些钦赐文件举行【打开】【读写】【关闭】
  • socket模块是针对性 服务器端 和 客户端Socket
    进行【打开】【读写】【关闭】

tcp_server:

from datetime import datetime
import socket

address = ('localhost', 6789)
max_size = 1000
print('Start server at {}'.format(datetime.now()))
print('Waiting for a client now !')

server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
'''
socket.AF_INET表示创建一个IP套接字;socket.SOCK_STREAM 表示流式socket , for TCP
sock_DGRAM表示数据报式socket , for UDP
'''
server.bind(address)
'''
服务器必须用socket包中的两个方法来建立网络连接,
第一个是socket.socket,它会创建一个空的套接字;
第二个是bind会绑定(监听这个IP地址和端口的所有数据)到这个套接字上
'''

server.listen(5)
'''
表示最多可以和5个客户端连接,超过5个就会拒绝
'''
client,addr = server.accept()
'''
server.accept()表示接送第一个到达的信息
'''
data = client.recv(max_size)
'''
指定最大可以接受消息长度为1000字节
'''

print("AT",datetime.now(),client,"Said",data)
client.sendall(b'Are you want to talk to me')
client.close()
server.close()

>>>

Start server at 2016-03-06 16:49:55.905147
Waiting for a client now !
AT 2016-03-06 16:50:00.806840 <socket.socket fd=6,
family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0,
laddr=(‘127.0.0.1’, 6789), raddr=(‘127.0.0.1′, 50682)> Said b’Hey~~~’

 

 

TCP_client:

import socket
from datetime import datetime

address = ('localhost',6789)
max_size =1000
print("Start the client at {}".format(datetime.now()))
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
client.connect(address)
client.sendall(b'Hey~~~')
data = client.recv(max_size)
print("AT",datetime.now(),"some reply" , data)
client.close()

>>>

Start the client at 2016-03-06 16:50:00.804163
AT 2016-03-06 16:50:00.806950 some reply b’Are you want to talk to me’

 

 

 

更加多效益:

参数一:地址簇

  socket.AF_INET IPv4(默认)
  socket.AF_INET6 IPv6

  socket.AF_UNIX 只好够用于单一的Unix系统经过间通讯

参数二:类型

  socket.SOCK_STREAM  流式socket , for TCP (默认)
  socket.SOCK_DGRAM   数据报式socket , for UDP

  socket.SOCK_RAW
原始套接字,普通的套接字不能处理ICMP、IGMP等网络报文,而SOCK_RAW可以;其次,SOCK_RAW也得以拍卖相当的IPv4报文;其余,利用原始套接字,能够经过IP_HDTiguanINCL套接字选项由用户构造IP头。
  socket.SOCK_昂科威DM
是一种保障的UDP情势,即确定保证交到数据报但不保障顺序。SOCK_RAM用来提供对本来协议的低档访问,在须求履行有些特殊操作时选用,如发送ICMP报文。SOCK_RAM常常仅限于高级用户或管理人运维的顺序行使。
  socket.SOCK_SEQPACKET 可信的连日数据包服务

参数三:协议

  0  (暗中认可)与一定的地点家族有关的磋商,假使是 0
,则系统就会依据地址格式和套接连串,自动选取1个适用的商谈

威尼斯人6799.com 1import
socket ip_port = (‘127.0.0.1’,9999) sk =
socket.socket(socket.AF_INET,socket.SOCK_DGRAM,0) sk.bind(ip_port)
while True: data = sk.recv(1024) print data import socket ip_port =
(‘127.0.0.1’,9999) sk =
socket.socket(socket.AF_INET,socket.SOCK_DGRAM,0) while True: inp =
raw_input(‘数据:’).strip() if inp == ‘exit’: break
sk.sendto(inp,ip_port) sk.close() UDP DEMO

sk.bind(address)

  s.bind(address)
将套接字绑定到地点。address地址的格式取决于地址族。在AF_INET下,以元组(host,port)的花样表示地址。

sk.listen(backlog)

  开头监听传入连接。backlog钦定在不肯连接以前,能够挂起的最哈拉雷接数量。

     
backlog等于5,表示内核已经接到了连接请求,但服务器还一贯不调用accept实行拍卖的连接个数最大为5
      那一个值不可能无限大,因为要在根本中敬重连接队列

sk.setblocking(bool)

  是还是不是封堵(私下认可True),假设设置False,那么accept和recv时一旦无数据,则报错。

sk.accept()

  接受连接并赶回(conn,address),当中conn是新的套接字对象,可以用来接收和发送数据。address是两次三番客户端的地方。

  接收TCP 客户的连日(阻塞式)等待连接的赶来

sk.connect(address)

  连接受address处的套接字。一般,address的格式为元组(hostname,port),借使总是出错,重返socket.error错误。

sk.connect_ex(address)

  同上,只然而会有再次回到值,连接成功时回来 0
,连接战败时候回来编码,例如:10061

sk.close()

  关闭套接字

sk.recv(bufsize[,flag])

  接受套接字的数目。数据以字符串情势再次回到,bufsize钦命最多能够采用的多寡。flag提供有关信息的别样音讯,平常可以忽略。

sk.recvfrom(bufsize[.flag])

  与recv()类似,但再次回到值是(data,address)。个中data是带有接收数据的字符串,address是发送数据的套接字地址。

sk.send(string[,flag])

  将string中的数据发送到连接的套接字。重临值是要发送的字节数量,该数据可能低于string的字节大小。即:或许未将钦赐内容全方位发送。

sk.sendall(string[,flag])

  将string中的数据发送到连接的套接字,但在回到以前会尝试发送全体数据。成功再次回到None,失利则抛出卓殊。

      内部通过递归调用send,将拥有剧情发送出去。

sk.sendto(string[,flag],address)

  将数据发送到套接字,address是样式为(ipaddr,port)的元组,钦点远程地址。再次来到值是出殡和埋葬的字节数。该函数根本用以UDP协议。

sk.settimeout(timeout)

  设置套接字操作的超时代,timeout是一个浮点数,单位是秒。值为None表示尚无超时期。一般,超时代应该在刚成立套接字时设置,因为它们或许用于连接的操作(如
client 连接最多等待5s )

sk.getpeername()

  重返连接套接字的长距离地址。再次来到值平常是元组(ipaddr,port)。

sk.getsockname()

  再次回到套接字本身的地方。平常是二个元组(ipaddr,port)

sk.fileno()

  套接字的文书讲述符

 

 

http://www.bkjia.com/Pythonjc/1106411.htmlwww.bkjia.comtruehttp://www.bkjia.com/Pythonjc/1106411.htmlTechArticlePython Socket套接字,pythonsocket套接
socket常常也称为”套接字”,用于描述IP地址和端口,是多个通信链的句柄,应用程序日常经过”套接字”向网…

socket源点于Unix,而Unix/Linux基本工学之一就是“一切皆文件”,对于文本用【打开】【读写】【关闭】格局来操作。socket便是该情势的1个落到实处,socket便是一种非凡的文件,一些socket函数正是对其实行的操作(读/写IO、打开、关闭)

socket和file的区别:

  • file模块是对准有些内定文件进行【打开】【读写】【关闭】
  • socket模块是对准 服务器端 和 客户端Socket
    进行【打开】【读写】【关闭】

tcp_server:

from datetime import datetime
import socket

address = ('localhost', 6789)
max_size = 1000
print('Start server at {}'.format(datetime.now()))
print('Waiting for a client now !')

server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
'''
socket.AF_INET表示创建一个IP套接字;socket.SOCK_STREAM 表示流式socket , for TCP
sock_DGRAM表示数据报式socket , for UDP
'''
server.bind(address)
'''
服务器必须用socket包中的两个方法来建立网络连接,
第一个是socket.socket,它会创建一个空的套接字;
第二个是bind会绑定(监听这个IP地址和端口的所有数据)到这个套接字上
'''

server.listen(5)
'''
表示最多可以和5个客户端连接,超过5个就会拒绝
'''
client,addr = server.accept()
'''
server.accept()表示接送第一个到达的信息
'''
data = client.recv(max_size)
'''
指定最大可以接受消息长度为1000字节
'''

print("AT",datetime.now(),client,"Said",data)
client.sendall(b'Are you want to talk to me')
client.close()
server.close()

>>>

Start server at 2016-03-06
16:49:55.905147
Waiting for a client now !
AT 2016-03-06 16:50:00.806840
<socket.socket fd=6, family=AddressFamily.AF_INET,
type=SocketKind.SOCK_STREAM, proto=0, laddr=(‘127.0.0.1’, 6789),
raddr=(‘127.0.0.1′, 50682)> Said b’Hey~~~’

 

 

TCP_client:

import socket
from datetime import datetime

address = ('localhost',6789)
max_size =1000
print("Start the client at {}".format(datetime.now()))
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
client.connect(address)
client.sendall(b'Hey~~~')
data = client.recv(max_size)
print("AT",datetime.now(),"some reply" , data)
client.close()

>>>

Start the client at 2016-03-06
16:50:00.804163
AT 2016-03-06 16:50:00.806950 some reply
b’Are you want to talk to me’

 

 

 

越多效益:

参数一:地址簇

  socket.AF_INET IPv4(默认)
  socket.AF_INET6 IPv6

  socket.AF_UNIX 只可以够用于单一的Unix系统经过间通讯

参数二:类型

  socket.SOCK_STREAM  流式socket ,
for TCP (默认)
  socket.SOCK_DGRAM   数据报式socket
, for UDP

  socket.SOCK_RAW
原始套接字,普通的套接字不能处理ICMP、IGMP等网络报文,而SOCK_RAW可以;其次,SOCK_RAW也得以拍卖非凡的IPv4报文;别的,利用原始套接字,能够通过IP_HDEscortINCL套接字选项由用户构造IP头。
  socket.SOCK_PRADODM
是一种保险的UDP方式,即确定保障交到数据报但不有限支撑顺序。SOCK_RAM用来提供对本来协议的低档访问,在须求履行有些特殊操作时选拔,如发送ICMP报文。SOCK_RAM平时仅限于高级用户或管理人运转的次第选取。
  socket.SOCK_SEQPACKET 可信赖的总是数据包服务

参数三:协议

威尼斯人6799.com,  0  (暗中同意)与特定的地点家族有关的合计,若是是 0
,则系统就会依照地址格式和套接体系,自动采取二个适当的商业事务

威尼斯人6799.com 2威尼斯人6799.com 3

import socket
ip_port = ('127.0.0.1',9999)
sk = socket.socket(socket.AF_INET,socket.SOCK_DGRAM,0)
sk.bind(ip_port)

while True:
    data = sk.recv(1024)
    print data




import socket
ip_port = ('127.0.0.1',9999)

sk = socket.socket(socket.AF_INET,socket.SOCK_DGRAM,0)
while True:
    inp = raw_input('数据:').strip()
    if inp == 'exit':
        break
    sk.sendto(inp,ip_port)

sk.close()

UDP DEMO

sk.bind(address)

  s.bind(address)
将套接字绑定到地方。address地址的格式取决于地址族。在AF_INET下,以元组(host,port)的花样表示地址。

sk.listen(backlog)

  开端监听传入连接。backlog钦命在不肯连接在此以前,可以挂起的最达累斯萨拉姆接数量。

     
backlog等于5,表示内核已经收取了延续请求,但服务器还从未调用accept进行处理的一连个数最大为5
      那个值不可能最好大,因为要在基本中保险连接队列

sk.setblocking(bool)

  是还是不是封堵(私下认可True),假设设置False,那么accept和recv时一旦无数据,则报错。

sk.accept()

  接受连接并再次回到(conn,address),当中conn是新的套接字对象,能够用来选择和发送数据。address是连连客户端的地方。

  接收TCP 客户的一而再(阻塞式)等待连接的来临

sk.connect(address)

  连接受address处的套接字。一般,address的格式为元组(hostname,port),假使总是出错,重返socket.error错误。

sk.connect_ex(address)

  同上,只然而会有重回值,连接成功时回来 0
,连接退步时候回来编码,例如:10061

sk.close()

  关闭套接字

sk.recv(bufsize[,flag])

  接受套接字的多寡。数据以字符串格局重返,bufsize钦赐最多可以收到的数码。flag提供关于消息的其余音讯,日常能够忽略。

sk.recvfrom(bufsize[.flag])

  与recv()类似,但重回值是(data,address)。在那之中data是富含接收数据的字符串,address是发送数据的套接字地址。

sk.send(string[,flag])

  将string中的数据发送到连接的套接字。重临值是要发送的字节数量,该数额也许低于string的字节大小。即:恐怕未将点名内容总体发送。

sk.sendall(string[,flag])

  将string中的数据发送到连接的套接字,但在回来从前会尝试发送全数数据。成功重临None,失败则抛出10分。

      内部通过递归调用send,将具备情节发送出去。

sk.sendto(string[,flag],address)

  将数据发送到套接字,address是花样为(ipaddr,port)的元组,钦点远程地址。再次来到值是发送的字节数。该函数根本用以UDP协议。

sk.settimeout(timeout)

  设置套接字操作的超时代,timeout是叁个浮点数,单位是秒。值为None表示从未超时期。一般,超时代应该在刚创造套接字时设置,因为它们可能用于连接的操作(如
client 连接最多等待5s )

sk.getpeername()

  重返连接套接字的长途地址。再次来到值日常是元组(ipaddr,port)。

sk.getsockname()

  重返套接字本人的地方。常常是3个元组(ipaddr,port)

sk.fileno()

  套接字的公文讲述符

 

 

相关文章