python网络编程0

半双工通信

使用python的socket库
本次实现的是客户端与服务端的通信,以后还会实现全双工通信,还会添加群聊,可能还会尝试使用UDP。
代码如下:

# 服务端
import socket as sk

port = 134
socket = sk.socket(sk.AF_INET, sk.SOCK_STREAM)
host = sk.gethostname()
socket.bind((host, port))
socket.listen(5)
while True:
    print("监听中...")
    connection, address = socket.accept()
    print("{}请求连接".format(address))
    state = input("Y/N?")
    if state == "N":
        connection.send("Sorry, the server refuse your connection.".encode('utf-8'))
        socket.close()
        print("拒绝连接")
    elif state == "Y":
        print("允许连接")
        connection.send("Connect successfully".encode('utf-8'))
        name = connection.recv(2048).decode('utf-8')
        print("连接成功")
        print("Welcome {}!".format(name))
        connection.send("Welcome {}!".format(name).encode('utf-8'))
        while True:
            data = connection.recv(2048).decode('utf-8')
            if data == "quit":
                print("{} 离开了聊天室".format(name))
                connection.close()
            print(data)
            connection.send(input().encode('utf-8'))

客户端
# import socket as sk

ip = input("请输入目标IP:")
port = int(input("请输入端口号:"))
socket = sk.socket(sk.AF_INET, sk.SOCK_STREAM)
socket.connect((ip, port))
socket.settimeout(180)
print(socket.recv(2048).decode('utf-8'))
name = input("请输入昵称:")
socket.send(name.encode('utf-8'))
print(socket.recv(2048).decode('utf-8'))
print("开始聊天吧!(输入‘quit’退出聊天)")

while True:
    data = input().encode('utf-8')
    if data.decode('utf-8') == "quit":
        socket.send(data)
        socket.close()
        break
    else:
        socket.send(data)
    print("等待对方输入。。。")
    print(socket.recv(2048).decode('utf-8'))

客户端输出如下:
在这里插入图片描述
服务端输出如下:
在这里插入图片描述
已知缺陷:由于socket.recv()是阻塞的,所以当发送空消息时会导致客户端与服务端同时阻塞,通过对消息进行过滤应该可以解决,这次先就这样,以后再改。
PS:注意服务端端口可能会被占用,建议先用netstat命令查看端口占用然后进行修改
等全部完成后项目会上传github

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值