Python基础-TCP编程

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

服务器

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

import socket
import threading

def 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)                  #监听队列长度为5

print('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 socket

s = 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')

结论

打印消息如下

#客户端
hello
hello Bob
hello Jack
hello 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绑定了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值