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 转出 回去
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()
即:这是一对一的
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()
#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))#不停地发
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'))
# 不停的发
while True:
msg = input('请数据消息:')
client.send(msg.encode('utf-8'))
完毕!