37,722
社区成员
发帖
与我相关
我的任务
分享
# -*- coding: UTF-8 -*-
import socket
import threading
users=[]#存储连接的对象
class state:
def __init__(self,data,addr):
self.data=data
self.addr=addr
def logout(self):
message=self.addr[0]+": logout"#地址+退出消息
return message
def online(self):
message=self.addr[0]+": "+self.data#地址+端口号
return message
def running(conn,addr):
try:
while True:
data=conn.recv(1024)
state_now=state(data,addr)
if not data or data =="exit":#输入exit退出
word=state_now.logout()
sendall(word)
break#跳出循环关闭连接
else:
word=state_now.online()
sendall(word)
conn.close()#关闭连接
except:
exit(0)
def sendall(word):#遍历对象把消息发给所有对象
for i in users:
i.send(word)
def main():
port=1234
print ("server start at port "+str(port))
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)#地址复用
s.bind(('127.0.0.1',port))
s.listen(5)
while True:
conn,addr=s.accept()
users.append(conn)#把对象存储到数组中
t=threading.Thread(target=running,args=(conn,addr))
t.start()
if __name__=='__main__':
main()
import socket
import threading
def send(sock):
while True:
word=raw_input()
sock.send(word)
if word=="exit":
break
sock.close()
print "logout!!!"
def recv(sock):
while True:
data=sock.recv(1024)
print data
def main():
sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.connect(('127.0.0.1',1234))
t1=threading.Thread(target=send,args=(sock,))
t2=threading.Thread(target=recv,args=(sock,))
t1.start()
t2.start()
if __name__=='__main__':
main()