码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-10-23 12:04:02      阅读:124      评论:0      收藏:0      [点我收藏+]

标签:接受   服务   com   客服端   roc   客户   shadow   while   dal   

服务端:
#!/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编程之多客服端(简易版)

标签:接受   服务   com   客服端   roc   客户   shadow   while   dal   

原文地址:http://blog.51cto.com/2032872/2307715

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!