通过python实现TCP编程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过python实现TCP编程相关的知识,希望对你有一定的参考价值。

伪代码:
ss = socket() #创建服务器套接字
ss.bind() #把地址绑定到套接字上
ss.listen() #监听连接(最大连接数)
info_loop: #服务器无限循环
cs = ss.accept() #接受客户端连接
comm_loop: #通信循环
cs.recv()/cs.send() #对话(接收/发送)
cs.close() #关闭客户端套接字
ss.close() #关闭服务器

所有的套接字都用socket.socket()函数来创建,服务器需要“坐在某个端口上“等待请求”所以它们必须要“绑定”到一个本地地址上,
由于TCP是一个面向连接的通信系统,在TCP服务器开始工作之前,要先完成一些设置,TCP服务器必须“监听”连接,设置完成之后服务器
就可以进入无限循环了。

一个简单的“单线程”服务器会调用accept()函数等待连接的到来,默认情况下accept()函数是阻塞的,即程序在连接到来之前会处于挂起状态,
套接字也支持非阻塞模式。

一旦接收到一个连接,accept()函数就会返回一个单独的客户端套接字用于后续的通信。

 

简单的TCP服务器

代码如下

#!/usr/bin/env python3
#-*- coding:utf-8 -*-

from socket import *
from time import ctime

host = ‘‘
port = 12345
buffsize = 2048
ADDR = (host,port)

tctime = socket(AF_INET,SOCK_STREAM)
tctime.bind(ADDR)
tctime.listen(3)

while True:
    print(Wait for connection ...)
    tctimeClient,addr = tctime.accept()
    print("Connection from :",addr)

    while True:
        data = tctimeClient.recv(buffsize).decode()
        if not data:
            break
        tctimeClient.send(([%s] %s % (ctime(),data)).encode())
    tctimeClient.close()
tctimeClient.close()

 

TCP客户端代码:

#!/usr/bin/env python3
#-*- coding:utf-8 -*-

from socket import *

HOST =localhost

PORT = 12345

BUFFSIZE=2048

ADDR = (HOST,PORT)

tctimeClient = socket(AF_INET,SOCK_STREAM)

tctimeClient.connect(ADDR)

while True:
    data = input(">")
    if not data:
        break
    tctimeClient.send(data.encode())
    data = tctimeClient.recv(BUFFSIZE).decode()
    if not data:
        break
    print(data)
tctimeClient.close()

 

note:

如果实在ubuntu下面做练习,需要在防火墙上添加allow条目,具体命令是

ufw allow 12345/tcp

也可以直接关闭防火:

ufw disable













以上是关于通过python实现TCP编程的主要内容,如果未能解决你的问题,请参考以下文章

Python网络编程9-实现TCP三次握手与四次挥手

python网络编程 - tcp

python网络编程,通过服务名称和会话类型(tcp,udp)获取端口号,简单的异常处理

Python TCP 协议网络编程《四》

python编程系列---tcp服务端的简单实现

python网络编程实现TCP和UDP连接