socket的更多方法

其实用到的socket主要有以下几种方法:

sk=socket.socket()://这个是创建socket对象。

sk.bind((127.0.0.1,9999))://这个是绑定IP地址和端口号。

sk.listen()://这个是监听。还有

sk.accept()

以及conn.recv()方法还有conn.sendall()方法。

对于客户端主要有以下几个方法:

obj=socket.socket()

obj.connect()//这个是连接方法

obj.recv()://这个是接收数据

obj.sendall()://这个是发送数据

最主要的就是这些方法。要注意创建socket对象的时候,里面也可以加参数,具体加的参数意义要看是TCP协议还是UDP协议了

注意对于参数二:如果写上socket.SOCK_STREAM:这个表示是TCP连接。

如果写上socket.SOCK_DGRAM:则表示这个是UDP连接,注意如果是UDP连接的话,则表示就不用连接了。下面写一个例子是关于UDP连接的:

import socket

ip_port=('127.0.0.1',9999)

sk=socket.socket(socket.AF_INET,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()

注意IPv6是128位

注意accept()和receive()这两个方法都会阻塞。

如果设置sk.setblocking=false,则如果设置上这一句就不会阻塞了。

如果下边是accept(),则如果有人来连接,就直接连接,如果没人来连接,则直接就过去了。IO多路复用,到那个时候就会用到setblocking(),到那个时候就没有必要用setblocking来阻塞了。因为可以直接用IO多路复用来进行阻塞。

sk.accept():主要是用来接收客户端的连接。

sk.connect():是客户端用来进行连接。

sk.connect_ex():主要是在内部写一个try。。。accept...方法

close():是关闭

sk.recv():是接收

sk.recvfrom():更多的是UDP里面从哪里去接收数据。

有send()和sendall()两种方法,其中sendall()内部调用的是send方法。sendall():内部是一个while循

环。

注意sendto是专门针对UDP来进行发送的。因为它没有建立连接,所以在发送的时候,要指明发给谁。

sk.settimeout():设置套接字操作的超时时间。你要连我,最多等待多长时间。

sk.getpeername()以及sk.getsockname():这里是用来获取信息用的。比如客户端获取服务端的信息,或者是服务端获取客户端的信息。

sk.fileno():套接字的文件描述符,主要在多路复用里面用到。主要是类似于心跳监听。

 

posted @ 2017-03-02 17:28  关泉珍  阅读(42)  评论(0)    收藏  举报