socket编程之多客服端(简易版)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了socket编程之多客服端(简易版)相关的知识,希望对你有一定的参考价值。

服务端:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import socket
import sys
sk=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sk.bind((‘127.0.0.1‘,8080))
sk.listen(5)

while True:              #让服务端不停接受客户端
    print("开始接受请求!")
    conn,addr=sk.accept()       
    while True:
        try:             #这里是为了防止当某一个客户端断开后的异常导致服务端停止
            msg=conn.recv(1024).decode()
            if msg == "exit":
               sys.exit("进程通讯结束!")
            conn.sendall("服务器端已收到消息!".encode())
            print("来自%s向你发送了:%s" %(addr,msg))
        except Exception:
            break
    conn.close()

客户端1:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import socket
sk=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sk.connect((‘127.0.0.1‘,8080))
while True:
    inp=input("请输入要发送给服务端的消息:")
    if not inp:
        continue
    if inp == "exit":
        break
    sk.sendall(inp.encode())
    print("数据已发送成功等待返回数据")
    msg=sk.recv(1024).decode()
    print(msg)

sk.close()

客户端2:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import socket
sk=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sk.connect((‘127.0.0.1‘,8080))
while True:
    inp=input("请输入要发送给服务端的消息:")
    if not inp:
        continue
    if inp == "exit":
        break
    sk.sendall(inp.encode())
    print("数据已发送成功等待返回数据")
    msg=sk.recv(1024).decode()
    print(msg)

sk.close()

注释:我们在最前面学习了单客户端方式,但有一个问题当客服端断开的时服务端也会被断开,但这不是我们想要的效果,我们希望的服务是希望多客服端和不间断服务,不能因为一个客服端断开就停止服务。所以我们修改一下服务端,让服务端不停的接受客户端连接。这个时候当两个客户端一起发消息的时候只有一个客服端能得到服务端返回数据,另外一个客户端则需要等待第一个客户端连接断开后才能收到服务端的返回值。

技术分享图片

技术分享图片

技术分享图片

以上是关于socket编程之多客服端(简易版)的主要内容,如果未能解决你的问题,请参考以下文章

简易版聊天系统实现 Socket VS NIO两种实现方式

基于socket简易版客户端,服务端交互

web开发之http和wsgi

Python 之 Socket编程(TCP/UDP)

简易版聊天系统实现 Socket VS NIO两种实现方式

Android第一行代码之制作简易版新闻应用