python网络编程之通讯

Socket:通信 先创建一个服务端

import socket
#1创键个服务端:
server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 1绑定IP 和端口
server.bind(('192.168.0.190',8000))
#1.5 设置最大挂起连接数 5
server.listen(5)
print('服务端 启动等待客户端连接...')
#2 等待客户端连接 如果有链接 将返回一个  链接对象和对方的地址
conn,address=server.accept()
while True:
    #3 从连接获取接收客户端发过来  多大字节 的数据
    msg= conn.recv(1024)
    print('客户端:',msg.decode())#把接受到 byes 转出 回去
  
  # 4 给客户端 回复 数据
    conn.sendall(input('服务端:').encode('utf-8'))#以utf-8的字符集物转换成bytes
# 5.结束了 链接关闭 服务关闭
conn.close()
server.close()
第二步
import socket
#创建客户端
client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 2建立链接  查找IP地址 : cmd  IPconfig
client.connect(('192.168.2.178',8000))
# 3.发消息 格式:byte 以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())#把接受的  bytes 转出 回去
# 关闭链接
client.close()
即:这是一对一的

创建一个群聊:
import socket,threading
#1创键个服务端:
server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 1绑定IP 和端口
server.bind(('192.168.0.190',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(message)+'>>:'+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))#不停地发


import socket,threading
#创建客户端
client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 2建立链接  查找IP地址 : cmd  IPconfig 注意:外网不同 IP地址不同
client.connect(('192.168.0.190',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'))
完毕!

猜你喜欢

转载自blog.csdn.net/angelayouran/article/details/80587817