python TCP编程

TCP

一般网络连接都是可靠的TCP连接,创建该连接时,将发起连接的称为客户端,而被动连接的叫服务端。

客户端

创建客户端连接

# 导入socket模块
import socket

# 创建一个socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接。参数是元组形式,包含域名和端口
s.connect(('xxx', prot))

创建socket连接时的参数说明:

  • socket.AF_INET说明遵循IPV4协议,如要使用IPV6协议,将参数改为socket.AF_INET6
  • socket.SOCK_STREAM意为指定使用面向流的TCP协议

对端口的说明:

  • 80端口是web服务的标准端口
  • 25端口是STMP服务的标准端口
  • 端口号小于1024的是internet端口,大于1024的可以任意使用。

发送请求

建立连接之后,就可以发送请求。

s.send('xxxx')

发送的文本格式必须符合HTTP标准。
发送完之后就可以等待服务器返回内容了。

接收返回内容

buffer=[]
while True:
    d = s.recv(1024)
    if d:
        buffer.append(d)
    else:
        break
data = ''.join(buffer)

接收返回的内容时,需要用recv(max)来限制接收数据的字节数,然后在while循环中,反复接收,直到接收到的数据为空,跳出循环。

关闭连接

s.close()

服务端

服务端编程要比客户端编程更复杂。

# 首先依旧是创建socket
import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

绑定端口,监听来自其他客户端的连接。

# .bind()方法,绑定端口和网络地址
s.bind(('ip', prot))
  • 0.0.0.0可绑定到所有的网络地址。
  • 127.0.0.1可绑定本机地址,如绑定该IP,只有本机的客户端能连接到服务端。
  • 小于1024端口需要管理员权限才能绑定。

调用s.listen(n)方法来监听连接。

# 设置最大等待连接数量为5
s.listen(5)
print('Waiting for connectiong......)

接受客户端的连接

while True:
    # 接收一个新连接
    sock, addr = s.accept()
    # 建立线程来处理连接
    t = threading.Threading(target=tcplink, args=(sock, addr))
    t.start()


def tcplink(sock, addr)print('Accept new connection from %s:%s...'% addr)
    # 连接建立后,先发送一条问候信息
    sock.send('Welcome!')
    while True:
        data = sock.recv(1024)
        # 如果接收的请求是空的或者为exit,就断开连接
        if not data or data.decode('utf-8') == 'exit':
            break
        sock.send(('Hello, %s!' % data.decode('utf-8')).encode('utf-8'))
    sock.close()        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值