zoukankan      html  css  js  c++  java
  • 网络编程一

    网络编程一

    1)打印设备名和IPV4地址

    >>> import socket
    >>> hostname=socket.gethostname()
    >>> address=socket.gethostbyname(hostname)
    >>> print address
    172.25.254.99
    

    2)通过端口和协议找到服务名

    通过函数getservbyport()来获取名字
    >>> print socket.getservbyport(53,'udp')
    domain
    >>> print socket.getservbyport(80,'tcp')
    http
    

    3)设定并获取套接字的时间

    可以通过函数gettimeout()和settimeout()来实现
    >>> s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    >>> s.gettimeout()
    >>> print s.gettimeout()
    None
    >>> s.settimeout(30)
    >>> print s.gettimeout()
    30.0
    

    4)修改套接字和接受缓冲区的大小

    可调用函数getsockopt()和setsockopt()分别获取和修改套接字对象的属性,setsockopt()方法接受三个参数,level,optname和value。其中optname是选项名value是该选项的值。第一个参数所用的符号是(SO_*)
    #!/usr/bin/python
    import socket
    SEND_BUF_SIZE=4096
    RECV_BUF_SIZE=4096
    def modify_buff_size():
    	s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    	bufsize=s.getsockopt(socket.SOL_SOCKET,socket.SO_SNDBUF)
    	print "buffer size [before]:%d"%bufsize
    	s.setsockopt(socket.SOL_TCP,socket.TCP_NODELAY,1)
    	s.setsockopt(socket.SOL_SOCKET,socket.SO_SNDBUF,SEND_BUF_SIZE)
    	s.setsockopt(socket.SOL_SOCKET,socket.SO_RCVBUF,RECV_BUF_SIZE)
    	bufsize=s.getsockopt(socket.SOL_SOCKET,socket.SO_SNDBUF)
    	print "buffer size [after]:%d"%bufsize
    if __name__=="__main__":
    	modify_buff_size()
    

    5)把套接字改成阻塞或阻塞模式
    可以通过函数setblocking()函数来实现,setblocking(0)表示设为非阻塞模式

    >>> import socket
    >>> s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    >>> s.setblocking(0
    

    6)重用套接字
    可以用函数setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)实现

    #!/usr/bin/python
    import socket
    import sys
    def reuse_socket_addr():
    	s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    	old_state=s.getsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR)
    	print "old state :%s"%old_state
    	s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
    	new_state=s.getsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR)
    	print "new sock state:%s"%new_state
    	localport=8222
    	srv=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    	srv.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
    	srv.bind(('',localport))
    	srv.listen(1)
    	print "listening the port %s"%localport
    	while True:
    		try:
    			conn,addr=srv.recv(2048)
    		except:
    			break
    if __name__=="__main__":
    	reuse_socket_addr()
    

  • 相关阅读:
    AcWing 125. 耍杂技的牛
    AcWing 148. 合并果子
    AcWing 907. 区间覆盖
    AcWing 908. 最大不相交区间数量
    AcWing 906. 区间分组
    AcWing 905. 区间选点
    AcWing 285. 没有上司的舞会
    AcWing 1049. 大盗阿福
    AcWing 901. 滑雪
    AcWing 91. 最短Hamilton路径
  • 原文地址:https://www.cnblogs.com/hanfei-1005/p/5708119.html
Copyright © 2011-2022 走看看