Python基础-TCP编程

来源:互联网 发布:遗传算法的步骤 编辑:程序博客网 时间:2024/06/14 08:56

Tcp的基本概念就不错说了,主要介绍一下python的socket使用。

服务器

需要绑定一个端口并开始监听其他客户端连接。

import socketimport threadingdef thread_fun(sock,addr):    print('accept new client from %s:%s' % (sock, addr))    sock.send('hello'.encode('utf-8'))    while True:        try:            data = sock.recv(1024)            if not data or data.decode('utf-8') == 'quit':                break            #接受到 加个头返回去            sock.send(('hello %s' % data.decode('utf-8')).encode('utf-8'))        except OSError:            print('client close %s:%s' % (sock, addr))            return None    print('client %s:%s quit' % (sock, addr))    sock.close()s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)s.bind(('127.0.0.1', 10000)) #绑定一个Ip和端口s.listen(5)                  #监听队列长度为5print('server run waiting for connection...')while True:    try:        #等待一个新连接        sock, addr = s.accept()        #创建线程处理连接        thread = threading.Thread(target=thread_fun, args=(sock,addr))        thread.start()    except OSError:        pass

客户端

import sockets = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 建立连接s.connect(('127.0.0.1', 10000))# 接受服务器消息print(s.recv(1024).decode('utf-8'))for data in [b'Bob', b'Jack', b'Rose']:    # 发送数据    s.send(data)    print(s.recv(1024).decode('utf-8'))s.send(b'quit')

结论

打印消息如下

#客户端hellohello Bobhello Jackhello Rose#服务器server run waiting for connection...accept new client from <socket.socket fd=216, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 10000), raddr=('127.0.0.1', 51335)>:('127.0.0.1', 51335)client <socket.socket fd=216, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 10000), raddr=('127.0.0.1', 51335)>:('127.0.0.1', 51335) quit

用TCP协议进行Socket编程在Python中十分简单,对于客户端,要主动连接服务器的IP和指定端口,对于服务器,要首先监听指定端口,然后,对每一个新的连接,创建一个线程或进程来处理。通常,服务器程序会无限运行下去。
同一个端口,被一个Socket绑定了以后,就不能被别的Socket绑定了。

原创粉丝点击