socket 基本流程:如下图
基于pyhton 3.5 的简单 socket 应用:
server.py
import socket
sk=socket.socket()
ip_port=('127.0.0.1',9999)
#绑定ip+协议+端口:用来唯一标识一个进程,ip_port必须是元组格式
sk.bind(ip_port)
sk.listen(5)
while True:
conn,adress=sk.accept() #conn:表示与客户端连接线路 可理解为 conn=sk.accept()[0]
conn.send(bytes("Hello World", encoding = "utf8")) #发送消息
flag=True
while flag:
data=conn.recv(1024) #接受的数据
print(data)
if data =='exit':
flag=False
conn.send(bytes("sb", encoding = "utf8"))
conn.close()
client.py
import socket
client=socket.socket()
ip_port=('127.0.0.1',9999)
client.connect(ip_port)
while True:
data=client.recv(1024)
print(data)
msg=input('client:请输入')
client.send(bytes(msg, encoding = "utf8"))
if msg=='exit':
break
注意事项:
- 1、套接字错误:python3.5版本后套接字只能发字节数(bytes),不能发字符串,在python2.7中支持发字符串形式(str)
- 2、退出只在客户端退出就ok了
- 3、accept()和s.recv()是堵塞(基于链接正常)
- 4、listen(n):n代表:能挂起的链接数,如果n=1,代表可以链接的一个,挂起一个,第三个拒绝链接
socket 常用参数:
send()
发送数据
python3.5:只支持字节方式传递 ,需要字符串转字节 --> bytes('xxx' ,encoding='utf-8')
python2.7:可以按照字符串方式传递 ,可以直接使用字符串