python 004:TCP客户端和服务端(全网最简单入门demo,总共34行代码)

本文代码参考自Python之TCP网络编程(Socket)。废话少说,直接上代码、demo动图和学习笔记:


1)TCP客户端:不说服务端,咱先写个TCP客户端连接百度收发数据跑跑!只有16行代码,简单!

import socket

skt = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
skt.connect(("www.baidu.com", 80))

req = "GET / HTTP1.1\r\n\r\n\r\n"
skt.send(req.encode("utf-8"))
resp = skt.recv(1024)

skt.close()

print("请求百度的HttpRequest:")
print(req)                       # GET / HTTP1.1

print("百度响应的HttpResponse:")
print(resp.decode("utf-8"))      # HTTP/1.1 400 Bad Request

Python写Tcp客户端笔记:

1.1 参考官方文档: https://docs.python.org/zh-cn/3.9/library/socket.html

1.2 创建套接字对象:使用给定的地址族、套接字类型和协议号创建一个新的套接字

class socket.socket(family=AF_INET, type=SOCK_STREAM[, proto=0, fileno=None])

地址族(IP地址类型): AF_INET(默认值IPv4)、AF_INET6、AF_UNIX、AF_CAN、AF_PACKET、AF_RDS

套接字类型(传输协议): SOCK_STREAM(默认值TCP)、SOCK_DGRAM、SOCK_RAW或其它SOCK_常量

1.3 连接到远程套接字:

socket.connect(address) 连接到address处的远程套接字

1.4 发送数据给套接字:

socket.send(bytes[, flags]) 本套接字必须已连接到远程套接字,返回已发送的字节数。

要检查所有数据是否已发送,如果仅传输了部分数据,程序要自行尝试传输剩余数据。

1.5 从套接字接收数据:

socket.recv(bufsize[, flags]) 返回一个字节对象,bufsize指定最大接收数据量。


2)TCP服务端:只有18行代码,简单!

import socket

skt = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
skt.bind(     ("localhost", 80) )
#skt.connect( ("www.baidu.com", 80) )

skt.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
                   #1)设置端口可重用;不然socket关闭后,几分钟后才关闭绑定的端口
skt.listen(128)    #2)设置监听,128为最大连接数

while True:
  sktC,addr = skt.accept() #3)返回客户端socket和地址 的元组
  req=sktC.recv(1024)
  msg=f"addr={addr}, reqBysLen={len(req)}"
  print(msg)
  resp=f"{msg}, req:{req.decode('utf-8')}, 本次连接将关闭."
  sktC.send(resp.encode('utf-8'))
  sktC.close()

把上面客户端代码第4行改为localhost,运行,Gif动图如下:

Python写Tcp服务端笔记:

2.1 将套接字绑定到address、并监听:

socket.bind(address) 套接字必须尚未绑定

socket.setsockopt(level, optname, value:int) 设置给定套接字选项的值,如设置端口可重用

socket.listen([backlog]) 启动服务器用于接受连接,超过连接数将拒绝新连接

2.2 接收client连接:

socketC = socket.accept() 返回(conn,addr)对(元组)


Hyb✈✈✈本文结束,谢谢浏览!个人资源的解压密码是: hyb


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值