python--网络编程 代码

网络编程:实现计算机与计算机间的通信
通过网络编程我们要了解什么问题?通信协议:
tcp:可靠,有状态的,长连接的协议,像打电话一样
udp:不可靠,无连接,像发短信一样。发送的包的顺序要有编号
http:基于tcp的协议,
ftp:文件传输协议
pop3:邮局协议版本3”。是TCP/IP协议族中的一员
smtp:简单邮件传输协议

示例:服务端代码

# Socket 通信 先创建个服务端
import socket
# 创建个服务端
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 1:绑定 ip和端口
server.bind(('192.168.137.1', 8000))
# 1.5:设置最大挂起数 5
server.listen(5)
print('服务端 启动等待客户端连接......')
# 2:等待客户端连接,如果有链接,将返回一个 连接对象对方的地址
conn, address = server.accept()
# 3:接受客户端发过来,多大字节的数据
while True:
    msg = conn.recv(1024)
    print('客户端发来:', msg.decode())
    # 把接受到的 bytes 转出回去
    # 4:给客户端 回复 数据
    conn.sendall(input('服务端:').encode('utf-8'))
# 以utf-8的字符集去转成bytes
# 结束了 连接关闭 服务关闭
conn.close()
server.close()

客户端代码:

import socket
# 1:创建 客户端
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 2:建立连接
client.connect(('192.168.137.1', 8000))
# 3:发消息 格式:bytes  以utf-8的字符集转成bytes
print('---输入 n 结束对话---')
while True:
    msg = input('客户端:')
    if msg.__eq__('n'):break
    client.send(msg.encode('utf-8'))
    # 4:等待回复 并读取回复
    msg = client.recv(1024)
    print('服务器回复:', msg.decode())
# 关闭连接
client.close()

群聊示例:

群聊服务端:

# Socket 通信 先创建个服务端
import socket, threading
# 创建个服务端
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 1:绑定 ip和端口
server.bind(('192.168.137.1', 8000))
# 1.5:设置最大挂起数 5
server.listen(5)
print('服务端 启动等待客户端连接......')
# 中间转换数据的变量
message = ''
# 创建一把锁
lock = threading.Lock()
Cond = threading.Condition(lock=lock)
# 不停地收,不停发
def recv_msg(conn,address):
    while True:
        msg = conn.recv(1024)
        global message
        Cond.acquire()
        message = str(address)+'>>:'+msg.decode()
        print('收到:'+message)
        Cond.notify_all()  # 唤醒其他给我发消息的线程
        Cond.release()
def send_msg(conn,address):
    while True:
        Cond.acquire()
        Cond.wait()
        Cond.release()
        conn.sendall(message.encode('utf-8'))
        print('发送'+message)
# 为每一个连接者提供收和发的线程
while True:
    conn, address = server.accept()
    threading._start_new_thread((conn, address))  # 不停地收
    threading._start_new_thread((conn, address))  # 不停地发

群聊客户端:

import socket,threading
# 1:创建 客户端
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 2:建立连接
client.connect(('192.168.137.1', 8000))
# 收取其他用户的数据
def recv_msg():
    while True:
        msg = client.recv(1024)
        print('收到:', msg.decode())
threading._start_new_thread(recv_msg,())
# 不停地发
while True:
    msg = input('请输入数据信息:')
    client.send(msg.encode('utf-8'))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值