三.python 高级内容 ------网络编程 客户端 服务端 群聊

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

一.单向聊天

     1.服务端:

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

  2.客户端

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

=============================================

二.群聊

     1.服务端:

# 群聊的客户端
import socket,threading
# 创建个服务器
server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 绑定 IP和端口
server.bind(('192.168.0.147',8000))
# 设置最大挂起连接数 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(recv_msg,(conn,address))  #不停的收
    threading._start_new_thread(send_msg,(conn,address))  # 不停的发


   2.客户端

import socket,threading
#1.创建客户端
client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#2.建立连接
client.connect(('192.168.0.147',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'))

这个很好玩 ,两人分别输入自己的IP地址,分别使用服务端和客户端,可建立聊天 信息交流。

注:必须是使用同一局域网!!!



猜你喜欢

转载自blog.csdn.net/hwj990/article/details/80547596
今日推荐