Python--TCP

1)  创建TCP服务器

创建通用TCP服务器的伪代码:

ss = socket() # create server socket(创建服务器套接字)

ss.bind() # bind socket to address(套接字与地址绑定)

ss.listen() # listen for connections(监听连接)

inf_loop: # server infinite loop(服务器无限循环)

   cs = ss.accept() # accept client connection(接受客户端连接)

   comm_loop: # communication loop(通信循环)

       cs.recv()/cs.send() # dialog (receive/send)(对话(接收 / 发送))

   cs.close() # close client socket(关闭客户端套接字)

ss.close() # close server socket #  关闭服务器套接字 # (可选)

2)  创建TCP客户端

创建通用TCP客户端的伪代码:

cs = socket() # create client socket(创建客户端套接字)

cs.connect() # attempt server connection(尝试连接服务器)

comm_loop: # communication loop(通信循环)

cs.send()/cs.recv() # dialog (send/receive)(进行对话(发送/接收))

cs.close() # close client socket(关闭客户端套接字)

3)  执行TCP服务器和客户端

在任何客户端试图连接之前,首先启动服务器。

4)实际应用

tsTserv.py

# 使用*可以使代码更简洁
from socket import*
from time import ctime


# 空表示可以接收多有有效ip地址的连接请求,bind()函数可以绑定在所有有效的ip地址上
HOST=''
# 随机选的一个端口号,必须大于1024
PORT=21567
# 每次读取的数据量
BUFSIZ=1024
# HOST与PORT共同组成了ADDR
ADDR=(HOST,PORT)

# 创建了一个基于网络的、使用TCP的socket。AF_INET表示是基于网络的socket编程,SOCK_STREAM表示是TCP通信
tcpSerSock=socket(AF_INET, SOCK_STREAM)
# socket与ADDR绑定到一起,表示socket可以在这个PORT上接收HOST处的连接请求。还需要开始监听
tcpSerSock.bind(ADDR)
# 开始监听,5表示同时最多可以有5个连接进来。开始等待连接到来
tcpSerSock.listen(5)

# 服务器循环,表示一直等待
while True:
    print("waiting for connecting...")
    # 如果有连接进来,则生成一个新的socket: tcpCliSock,并得到源的地址
    (tcpCliSock,addr) = tcpSerSock.accept()
    print('...connected from: ',addr)

    # 开始接收数据,并处理
    while True:
        # 接收数据,并转化成utf-8格式,原始的是bytes格式
        data=tcpCliSock.recv(BUFSIZ).decode('utf8')
        # 如果没有数据了,则跳出while循环,等待下一次连接到来
        if not data:
            break;
        # 向console输出,增加了当前的时间
        print('[%s] %s'%(ctime(),data))
        # 将数据转换成bytes型,再send回去
        tcpCliSock.send(('[%s] %s'%(ctime(),data)).encode('utf8'))

    # 关闭tcpCliSock,一次通信在服务器端的工作完成,继续等待下一次连接的到来
    tcpCliSock.close()
#不会被执行到,可以加个try-except进去,让程序更友好的退出
tcpSerSock.close()

tsTclnt.py

# 使用*可以使代码更简洁
from socket import*

# 由于是在同一台电脑上,所以可以写localhost(或127.0.0.1),如果是在两台电脑上,则这儿要写server的ip地址
HOST='localhost'
# 端口号必须和服务器的一样
PORT=21567
BUFSIZ=1024
# 服务器的ADDR
ADDR=(HOST,PORT)

# 创建客户端套接字
tcpCliSock=socket(AF_INET,SOCK_STREAM)
# 连接到服务器,成功后,服务器端输出'...coonnected from...'
tcpCliSock.connect(ADDR)

while True:
    data=input('> ')
    # 输入为空,则跳出while循环
    if not data:
        break;
    tcpCliSock.send(data.encode('utf-8'))
    data=tcpCliSock.recv(BUFSIZ)
    if not data:
        break;
    print(data.decode('utf8'))
tcpCliSock.close()


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值