python之通信

简单C/S模型,实现两主机通过socke通信。

服务端

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

客户端

import socket
#1创建客户端
client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#2.建立连接
client.connect(('127.0.0.1',8010))
#3.发消息 格式:bytes 以utf-8的字符集去转bytes
print('服务端  成功连接!')
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()

下面是群聊的服务端  和客户端

客户端发出信息以后服务端接收到,将会下发所有客户端

服务端

import socket,threading
server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server.bind(('192.168.0.143',8011))
server.listen(5)
print('服务端启动!!!')
#中间转换的一个数据变量
message=''
#创建一把锁
lock=threading.Lock()
cond=threading.Condition(lock=lock)
#不停的收,不停地发
def recv_msg(conn,adderess):
    while True:
        msg=conn.recv(1024)
        global message
        cond.acquire()
        message=str(adderess)+'>>:'+msg.decode()
        print('收到:'+message)
        cond.notify_all()#唤醒其他给我发消息的线程
        cond.release()
def send_msg(conn,adderess):
    print(55555)
    global message
    while True:
        cond.acquire()
        cond.wait()
        cond.release()
        conn.sendall(message.encode('utf-8'))
        print('发送:'+message)
#为每一个连接者提供收和发的线程

while True:
    conn,adderess=server.accept()
    threading._start_new_thread(send_msg,(conn,adderess))#不停地发
    threading._start_new_thread(recv_msg,(conn,adderess))#不停地收

顾客端

import socket,threading

client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

client.connect(('192.168.0.143',8011))
#收取其他用户的数据
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'))

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值