Socket
1.什么是Socket
socket是一个模块,可以写一套c/s架构的套接字
2.为甚要使用Socket
socket套接字会封装好各层协议的工作
好处:
可以节省开发成本。
3.如何使用
import scoket
注意:客户端与服务端必须遵循:
一端send 另一端recv
不能两端同时send或recv
初始socket套接字
# 服务端*********************************
import socket
server=socket.socket()
#绑定(主机,端口号)到套接字
server.bind(('127.0.0.1',9527))
#开始TCP监听
server.listen(5)#listen(5)半连接池 设置等待程序个数
#被动接受TCP客户的连接,(阻塞式)等待连接的到来
# conn: 相当于服务端往客户端挖的管道
conn,addr=server.accept()
print(addr)
data=conn.recv(1024).decode('utf-8')
print(data)
conn.send('我不好'.encode('utf-8'))
conn.close()
server.close()
# 客户端*************************************
import socket
client=socket.socket()
#主动初始化TCP服务器连接
# client: 相当于客户端往服务端挖的管道
client.connect(('127.0.0.1',9527))
client.send('你好'.encode('utf-8'))
data=client.recv(1024).decode('utf-8')
print(data)
# 关闭连接
client.close()
循环通信套接字
# 服务端
import socket
server=socket.socket()
#绑定(主机,端口号)到套接字
server.bind(('127.0.0.1',9527))
#开始TCP监听
server.listen(5)#listen(5)半连接池 设置等待程序个数
#被动接受TCP客户的连接,(阻塞式)等待连接的到来
conn,addr=server.accept()
print(addr)
while True:
data=conn.recv(1024).decode('utf-8')
print(data)
if data=='q':
break
send_msg=input('server--->client').encode('utf-8')
conn.send(send_msg)
conn.close()
server.close()
# 客户端
import socket
client=socket.socket()
#主动初始化TCP服务器连接
client.connect(('127.0.0.1',9527))
while True:
send_msg=input('client--->srevre:').encode('utf-8')
client.send(send_msg)
if send_msg=='q':
break
data=client.recv(1024).decode('utf-8')
print(data)
client.close()
服务端多个客户端
# 服务端
import socket
server=socket.socket()
#绑定(主机,端口号)到套接字
server.bind(('127.0.0.1',9527))
#开始TCP监听
server.listen(5)#listen(5)半连接池 设置等待程序个数
while True:
#被动接受TCP客户的连接,(阻塞式)等待连接的到来
conn,addr=server.accept()
print(addr)
while True:
try:
data=conn.recv(1024).decode('utf-8')
print(data)
# mac和linux系统bug: b''
if len(data) == 0:
continue
if data=='q':
break
conn.send(data.encode('utf-8'))
except Exception as e:
print(e)
break
conn.close()
server.close()
# 客户端
import socket
client=socket.socket()
#主动初始化TCP服务器连接
client.connect(('127.0.0.1',9527))
while True:
send_msg=input('client--->srever:').encode('utf-8')
client.send(send_msg)
if send_msg=='q':
break
data = client.recv(1024).decode('utf-8')
print(data)
client.close()