美文网首页
python中建立具有TCP和流套接字的简单服务器的代码编写心得

python中建立具有TCP和流套接字的简单服务器的代码编写心得

作者: DQ_5e1b | 来源:发表于2018-09-10 09:54 被阅读0次

    简单描述:

    建立服务器需要用到socket模块,一般来说需要6个步骤:

    1.用socket创建套接字,语法格式如下:

    socket.socket([family, [type, [protocol]]])

    family一般有三种类型,AF_UNIX(用于同一台机器上的进程间通信),AF_INET(用于IPV4的TCP和UDP),AF_INET6(针对IPV6)

    type有两种类型,一种是针对面向连接的协议(如TCP),一种是针对面向非连接的协议(如UDP),分为SOCK_STREAM(流套接字)和SOCK_DGRAM(数据报文套接字)

    prototol一般不指定

    2.将socket绑定到指定端口,用socket.bind((host, port))

    3.指定服务器最大连接数a,a至少为1,用socket.listen(a)

    4.等待客户请求一个连接,用connection, address=socket.accept(),服务器接受客户端连接请求后,accept方法将返回一个新的连接套接字对象

    connection和客户端的ip地址address,后续服务器和客户端的通信将依靠新的套接字connection

    5.服务器和客户端通过send和recv方法通信

    6.传输结束,通过调用close方法关闭连接

    具体代码实现如下:

    其中后续使用了线程的知识来处理新建立的套接字对象(TCP)连接,这里不做讨论

    ! /usr/bin/python3

    -- coding:UTF-8 --

    import socket
    import threading
    import time

    def socket_server():
    #创建 socket对象
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    #获取本地主机名
    host = socket.gethostname()
    
    port = 9999
    
    #绑定端口
    server_socket.bind((host, port))
    
    #设置最大连接数, 超过后排队
    server_socket.listen(5)
    
    while True:
        #接受一个新连接
        sock, addr = server_socket.accept()
        #创建一个新线程
        t = threading.Thread(target=tcp_link, args=sock, addr)
        t.start()
    

    def tcp_link(sock, addr):
    print('Accept new connection from %s:%s...'%addr)
    sock.send('欢迎学习python网络编程!'.encode('utf-8'))
    while True:
    data = sock.recv(1024)
    time.sleep(1)
    if not data or data.decode('utf-8') == 'exit':
    break
    sock.send('Hello,%s!'%data.decode('utf-8')).encode('utf-8')
    sock.close()
    print('Connection from %s:%s closed.'%addr)

    def main():
    socket_server()

    if name == 'main':
    main()

    相关文章

      网友评论

          本文标题:python中建立具有TCP和流套接字的简单服务器的代码编写心得

          本文链接:https://www.haomeiwen.com/subject/ghwjgftx.html