• 网络编程一


    网络编程一

    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()
    

  • 相关阅读:
    站点目录中的文件夹被删除后,应用程序池被重启
    silverlight中UserControl的属性在xaml文件中敲不出来的问题
    提取自Discuz NT 的验证码生成
    Asp.net首页生成静态页的一个比较好的方法
    asp.net 字符串格式化
    阻止用户关闭网页,提示保存的解决方案IE/FF/OP通用(未经测试)
    .NET程序如何防止被注入(整站)
    好久没有进步了
    C#数组排序
    我的静态页面
  • 原文地址:https://www.cnblogs.com/hanfei-1005/p/5708119.html
Copyright © 2020-2023  润新知