import socket
import threading
def recv_msg(new_client_socket, ip_port):
"""
接收消息 的函数
:param new_client_socket: socket
:param ip_port: ip地址元祖
:return:
"""
while True:
recv_data = new_client_socket.recv(1024)
# 判断是否有消息返回
if recv_data:
recv_text = recv_data.decode("gbk")
print("来自【%s】的消息:%s" % (str(ip_port), recv_text))
else:
# 如果断开连接会执行这行代码,此时关闭socket的连接
new_client_socket.close()
print("已经断开【%s】的连接" % (str(ip_port)))
break
def main():
# 创建套接字
tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 设置地址可复用
tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
# 绑定TCP端口
tcp_server_socket.bind(("", 8888))
# 设置监听 最多128个连接
tcp_server_socket.listen(128)
while True:
new_client_socket, ip_port = tcp_server_socket.accept()
print("新连接:", ip_port)
new_thread = threading.Thread(target=recv_msg, args=(new_client_socket, ip_port))
# 设置守护线程:在主线程关闭的时候 子线程也会关闭
new_thread.setDaemon(True)
new_thread.start()
# 此代码不被执行的 事实上也不需要被执行 因为服务器不需要被关闭
tcp_server_socket.close()
if __name__ == '__main__':
main()