搜 索

使用python实现单线程通信

  • 102阅读
  • 2022年08月16日
  • 0评论
首页 / 技术积累 / 正文

先声明一下,本人是学习web方向,这篇文章是关于我在学校学习python的时候学到一个比较有意思的东西,所以写来记录一下,并非专业python学生,不足之处欢迎指正,另外,图片是CSDN的很正常,DianC(AcssGood是我CSDN的id)是我本人哈,只不过不在CSDN上更新了而已。

先了解一些其中的原理

socket简称套接字,是进程间通信的一种方式。与其他的方式的进程间的通讯的方式不同的是,socket是实现了主机间进程间的通讯。我们网络上的各种服务都是基于socket来完成的,例如QQ、微信。

udp—–数据报文协议,是一个无连接的简单的面向数据报的运输层协议,UDP不提供可靠性,他只是将应用程序传送给IP层的数据报文发送出去,并不保证能否达到目的地。由于UDP在传输的过程中不需要和服务器建立链接。且没有超时重发的的机制。故而传输很快。

1.jpg

通过这张图我们来看代码就明了多了

代码实现

服务器端源码:

import socket

serverSocket = socket.socket()
serverSocket.bind(('127.0.0.1',12345))
serverSocket.listen(5)
print("等待客户端发起请求")
while True:
    conn,addr = serverSocket.accept()
    print("客户端连接成功,等待对方响应中 !")
    while True:
        try:
            recv_data = conn.recv(1024)
            if len(recv_data) == 0:
                print("服务器: 退出连接")
                break
            print("客户端: "+ str(recv_data.decode()))
            send_data = input("请输入你的回应: ")
            conn.send(bytes(send_data,encoding='UTF-8'))
            print("正在等待客户端回应: ")
        except Exception:
            break
    conn.close()

客户端源码:

import socket

clientSocket = socket.socket()
clientSocket.connect(('127.0.0.1', 12345))
while True:
    send_data = input("客户端: ")
    if send_data == 'exit':
        print("客户端: 退出连接")
        break
    if len(send_data) == 0:
        continue
    clientSocket.send(bytes(send_data, encoding='utf-8'))
    print("正在等待服务器回应: ")
    recv_data = clientSocket.recv(1024)
    print("服务器: "+str(recv_data.decode()))
clientSocket.close()

运行效果

1.png

本代码仅限单线程,即一个人只能说一句话然后等待对方回应,后续我可能会去了解一下关于群聊的方式,就是多线程聊天,但目前我还是不会的。

评论区
暂无评论
avatar