pythonsocket中tcp通信接收不到数据_简单说说Python Socket编程步骤?

本文介绍了Python Socket编程的基础知识,包括TCP服务器和客户端的创建步骤,以及TCP与UDP的主要区别。通过示例代码展示了如何使用Python进行TCP和UDP通信,并推荐了一篇关于TCP与UDP区别的文章。
摘要由CSDN通过智能技术生成

768a92055afaf37536931f21cc65efd8.gif

公众号新增加了一个栏目,就是每天给大家解答一道Python常见的面试题,反正每天不贪多,一天一题,正好合适,只希望这个面试栏目,给那些正在准备面试的同学,提供一点点帮助!

小猿会从最基础的面试题开始,每天一题。如果参考答案不够好,或者有错误的话,麻烦大家可以在留言区给出自己的意见和讨论,大家是要一起学习的 。

废话不多说,开始今天的题目:

问:简单说说Python socket编程步骤?

答:Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。

所以,我们无需深入理解tcp/udp协议,socket已经为我们封装好了,我们只需要遵循socket的规定去编程,写出的程序自然就是遵循tcp/udp标准的。

Python 提供了两个基本的 socket 模块。第一个是 Socket,它提供了标准的 BSD Sockets API。第二个是 SocketServer, 它提供了服务器中心类,可以简化网络服务器的开发。

下面我们分别来说说基于TCP和UDP的套接字编程步骤

创建TCP服务器示例:

1、创建socket对象

2、绑定主机和端口,应当是一个元组

3、监听

4、等待连接

5、接受数据

6、发送数据

7、关闭套接字

import socket# 明确配置变量
ip_port = ('127.0.0.1',8080)
back_log = 5
buffer_size = 1024# 创建一个TCP套接字
ser = socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 套接字类型AF_INET, socket.SOCK_STREAM tcp协议,基于流式的协议
ser.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) # 对socket的配置重用ip和端口号# 绑定端口号
ser.bind(ip_port) # 写哪个ip就要运行在哪台机器上# 设置半连接池
ser.listen(back_log) # 最多可以连接多少个客户端while 1:# 阻塞等待,创建连接
    con,address = ser.accept() # 在这个位置进行等待,监听端口号 while 1:try:# 接受套接字的大小,怎么发就怎么收
            msg = con.recv(buffer_size)if msg.decode('utf-8') == '1':# 断开连接
                con.close()
            print('服务器收到消息',msg.decode('utf-8'))except Exception as e:break# 关闭服务器
ser.close()

创建TCP客户端示例:

1、创建socket对象2、连接主机,应当是一个元组3、发送数据4、接收数据5、关闭

import socket
p = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
p.connect(('127.0.0.1',8080))while 1:
    msg = input('please input')# 防止输入空消息if not msg:continue
    p.send(msg.encode('utf-8')) # 收发消息一定要二进制,记得编码if msg == '1':break
p.close()

创建UDP服务器示例:

1、创建socket套接字

2、绑定3、接受连接4、发送数据5、关闭

from socket import *
s= socket(AF_INET, SOCK_DGRAM) # 数据报式的套接字
s.bind(('127.0.0.1', 8080))while True:
    data, address = s.recvfrom(1024)print data, address,type(data)
    s.sendto('this is the UDP server', address)
s.close()

创建UDP客户端示例:

1、创建套接字2、连接3、发送数据4、接收数据5、关闭

from socket import *
HOST = '127.0.0.1';PORT = 8080;
addr = (HOST,PORT) # 设置IP、端口号、
s = socket(AF_INET, SOCK_DGRAM) # 建立UDP的socket 这个称之为套接字。
data = 'hello';
data = data.encode(encoding="utf-8") # 指定一个字符串,并转换成socket发送的二进制流。while True:
    s.sendto(data, addr) # 发送数据# data, addr = s.recvfrom(1024) # 接收数据和返回地址print (data.decode(encoding="utf-8"))
    print(addr)
s.close()

至于TCP和UDP的区别是什么?

推荐大家一篇文章:

https://www.cnblogs.com/williamjie/p/9390164.html

如果对于参考答案有不认同的,大家可以在评论区指出和补充,欢迎留言!

1-50、Python面试1-50题汇总51、说说Python中闭包是什么?52、read、readline和readlines的区别?53、说说Python中with的用法?54、Python中连接字符串用join还是+?55、Python中search和match的区别?56、说说Python中字符串大小写转换?57、Python反转三位整数有几种方法?58、说说Python中贪婪和非贪婪匹配?59、说说Python中正负索引?60、说说Python中切片是什么?61、Python新式类和旧式类的区别?62、说说Python中PEP8到底是什么?63、Python实现深度优先与广度优先?64、说说Python类中的self参数?

关注小猿公众号,每天学习一道题

970651f1272481acfefad279cdff1049.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值