• python网络编程【一】


    TCP/IP 是标准的协议,它可以使用世界范围内的计算机通过Internet或本地的网络通信

    1.编写一个TCP客户端程序

     1 #!/usr/bin/env python
     2 
     3 import socket, sys
     4 
     5 port = 70
     6 host = sys.argv[1]
     7 filename = sys.argv[2]
     8 
     9 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    10 s.connect((host, port))
    11 
    12 s.sendall(filename+ "\r\n")
    13 
    14 while 1:
    15     buf = s.recv(2048)
    16     if not len(buf):
    17         break;
    18     sys.stdout.write(buf)

      这段代码实现的是Gopher协议,一种Web出现之前在Internet上非常流行的协议。这个程序需要两个命令行参数:主机名和文件名,实现从主机上请求相关文档的功能。

      操作很简单,通过调用socket.socket()来建立一个socket,里面的参数告诉系统需要一个Internet socket来进行TCP通信,接着程序连接远程主机并提供文件名。最后获得响应,并把内容打印出来。

      运行以下命令:python f:\python\gopherclient.py quux.org /,您将得到Gopher服务器根目录文件列表

    2.编写一个服务器端程序

     1 #!/usr/bin/env python
     2 #coding:utf-8
     3 
     4 import socket
     5 
     6 host= '' #主机名设置成空字符串,代表这个服务器可以接受来自任意地方的连接
     7 port = 51423
     8 
     9 s= socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    10 s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) #把socket设置成可复用的(可选)
    11 s.bind((host, port)) #绑定主机和端口号
    12 s.listen(1) #设置一次最多只监听一个连接
    13 
    14 print "Server is running on port %d" % port
    15 
    16 while 1:
    17     clientsock, clientaddr = s.accept() #当客户端连接时,accept会返回两个信息一个客户端socket和客户端ip,端口号
    18     """
    19     这里使用了一个文件类对象,从客户端读取一个字符串,显示一个应答,最后关闭文件类对象和客户端socket
    20     """
    21     clientfile = clientsock.makefile('rw', 0)
    22     clientfile.write("Welcome," +str(clientaddr)+"\n")
    23     clientfile.write("Please enter a string:")
    24     line = clientfile.readline().strip()
    25     clientfile.write("You entered %d characters.\n" % len(line))
    26     clientfile.close()
    27     clientsock.close()
    28     

    首先运行服务端,然后在cmd中输入telnet localhost 51423连接服务端,会得到以下结果:

    你也许会发现我没有编写telnet协议,但是telnet客户端也能通信。

  • 相关阅读:
    解决Fatal error: Allowed memory size of 33554432 bytes exhausted
    VS2008 LINK : fatal error LNK1000: Internal error during IncrBuildImage
    天天算法01——左旋转字符串
    二叉排序数的判定
    数据结构绪论思维导图
    痛苦!很痛苦!
    【转】qt交叉环境编译
    [转]linux联想Y450屏幕亮度调节
    【转载】arm指令
    HTTP请求和响应——GET与POST区别以及SOAP(网络整理)
  • 原文地址:https://www.cnblogs.com/vipitsoft/p/5626772.html
Copyright © 2020-2023  润新知