简单说说Python Socket编程步骤?

公众号新增加了一个栏目,就是每天给大家解答一道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参数?

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

(0)

相关推荐

  • php socket通信(tcp/udp)

    注意 1.在socket_bind的时候ip地址不能真回环地址如127.0.0.1 2.server.php后台跑起来的时候 nohup php server.php > /var/tmp/a. ...

  • Python网络编程 —— 粘包问题及解决方法

    Python网络编程 —— 粘包问题及解决方法

  • 网络编程

    面向对象的使用 #使用面向对象解决datetime.tody()无法序列化的问题import jsonfrom datetime import datetime,date# print(date.to ...

  • day21 网络编程(下)

    版权声明:本博客转载自路飞学城Python全栈开发培训课件,仅用于学习之用,严禁用于商业用途. 欢迎访问路飞学城官网:https://www.luffycity.com/ 课程目标:学会网络编程开发的 ...

  • Socket编程 (连接,发送消息) (Tcp、Udp)

    本篇文章主要实现Socket在Tcp\Udp协议下相互通讯的方式.(服务器端与客户端的通讯) 1.基于Tcp协议的Socket通讯类似于B/S架构,面向连接,但不同的是服务器端可以向客户端主动推送消息 ...

  • 用 Python 开发一个 【聊天室】

    接下来我们就使用 Python 来操作 socket ,实现一个聊天室的一些主要功能. 首先我们来回想下,一般的聊天室都是怎样的,有多个用户可以同时在线,他们可以实时获取到消息,实时发送消息. 服务端 ...

  • Python网络编程

    TCP 客户端与服务器之间建立连接需要进行三次握手 客户端--->服务器  服务器--->客户端  客户端--->服务器,这样做的好处是可以保证数据的完整缺点是慢. UDP 是用户数 ...

  • (2条消息) Python3的socket和socketserver网络编程(聊天和文件传输功能)

    文章目录 前言 一.TCP以及UDP的选择 二.socket以及socketserver 三.使用步骤 1.打开cmd输入python total_sever.py,创建服务器 2.打开cmd输入py ...

  • python socket编程详细介绍

    第一个是 Socket,它提供了标准的 BSD Sockets API.第二个是 SocketServer, 它提供了服务器中心类,可以简化网络服务器的开发.下面讲的是Socket模块功能1.Sock ...

  • Python网络编程基础及socket之TCP收发消息及文件

    网络编程必须了解的基本概念 MAC地址:是全球唯一标示的网络接口,每一个网卡接口.交换机接口.路由器接口的mac地址均不相同.mac地址是通信子网内部相互通信的标识,交换机根据mac地址区分用户.ma ...

  • 用植物为室内空间添彩,只需要简单的8个插花步骤

    看似繁复的插花,其实并没有想象中的那么难,只需要精心准备材料,花一点点心思,任何人都可以创造一个美丽的作品. 当你了解了其中的乐趣之后,插花就变成一件好玩又简单的事了! 1.先决定一个插花方案 所谓的 ...

  • 【Python核心编程笔记】一、Python中一切皆对象

    Python中一切皆对象 本章节首先对比静态语言以及动态语言,然后介绍 python 中最底层也是面向对象最重要的几个概念-object.type和class之间的关系,以此来引出在python如何做 ...

  • Python游戏编程(Pygame)

    安装Pygame pip install pygame 1 C:\Users> pip install pygame Collecting pygame Downloading https:// ...

  • ABB 机器人 | 输送链跟踪配置和编程步骤

    ABB&ROBOT使用输送链跟踪功能的配置和编程步骤输送链跟踪硬件安装DSQC377A(B)模块安装编码器安装触发开关安装机器人校准探针??安装输送线上的校准针??连接编码器线缆到DSQC37 ...

  • Python GUI编程:界面设计(tkinter)

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 作者:xubingtao 来源:分享录xubingtao Python爬虫.数据分析.网站开发等案 ...

  • 3个简单的杠铃卧推步骤,轻松避免错误动作,构建男性饱满胸肌

    3个简单的杠铃卧推步骤,轻松避免错误动作,构建男性饱满胸肌

  • Python和JavaScript哪个简单?Python入门!

    在编程界,Python和JavaScript都是非常具有影响力的编程语言,占据着主导性的地位,而且简单易学.通俗易懂,非常适合0基础小白.那么Python和JavaScript哪个更容易上手呢?我们通 ...