首页 > 其他 > 详细

Socket编程二

时间:2020-04-12 18:55:24      阅读:49      评论:0      收藏:0      [点我收藏+]

模拟服务器端和客户端通信

# 服务端
# encoding=utf-8
import socket   # socket模块

HOST = 127.0.0.1
PORT = 8085
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  # 定义socket类型,网络通信,TCP
s.bind((HOST, PORT))  # 套接字绑定的IP与端口
s.listen(5)  # 开始TCP监听,listen中的参数表示可以多少客户端来进行连接

while 1:
    conn, addr = s.accept()  # 接受TCP连接,并返回新的套接字与IP地址
    print(客户端地址:, addr)  # 输出客户端的IP地址
    while 1:
        try:
            conn.settimeout(10)  # 设置多长时间内没有收到数据,抛出异常
            data = conn.recv(1024)    # 把接收的数据实例化
            print(data)
            conn.sendall(服务返回结果.encode("utf-8")+data.upper())
        except socket.timeout:
            print(等客户端半天了,连接后都不发数据)
            conn.close()  # 关闭连接
            break
        except Exception:
            conn.close()  # 关闭连接
            break
# 客户端
#encoding=utf-8
import socket

HOST=127.0.0.1
PORT=8085
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)  # 定义socket类型,网络通信,TCP
s.connect((HOST,PORT))  # 要连接的IP与端口

count=3
while count>0:
    cmd=input("向服务器发送命令:") 
    s.sendall(cmd.encode("utf-8"))  # 把命令发送给对端
    data=s.recv(1024)  # 把接收服务器返回的数据
    print(data.decode("utf-8"))  # 输出变量
    count -= 1

s.close()   #关闭连接

执行结果:

服务端

技术分享图片

客户端

技术分享图片

 

备注: 

send 和 sendall 区别

sendall:尝试发送string的所有数据, 成功则返回None, 失败则抛出异常。

send:send()的返回值是发送的字节数量, 这个数量值可能小于要发送的string的字节数,也就是说可能无法发送string中所有的数据。如果有错误,则会抛出异常。

 

Socket编程二

原文:https://www.cnblogs.com/su-sir/p/12686143.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!