-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathserver.py
More file actions
58 lines (49 loc) · 1.54 KB
/
server.py
File metadata and controls
58 lines (49 loc) · 1.54 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from multiprocessing import Process
import os
import socket
import time
import fileinput
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind(('10.3.45.144',1027))
s.listen(10)
usend=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
def Tcp(sock,addr):
print("connection from %s:%s..."%addr)
sock.send(b'Please enter your name:')
sock.send(addr[0].encode())
usrname=sock.recv(1024)
while True:
data=sock.recv(1024)
if data.decode('utf-8')=='exit':
exi=Process(target=udpsend,args=('%s exit'%usrname.decode('utf-8'),'%s\n'%addr[0]))
exi.start()
break
if data.decode('utf-8')=='ask':
out(addr[0])
continue
sen=Process(target=udpsend,args=('%s:%s'%(usrname.decode('utf-8'),data.decode('utf-8')),'%s\n'%addr[0]))
sen.start()
print('%s:%s(from %s)'%(usrname.decode('utf-8'),data.decode('utf-8'),addr[0]))
sock.close()
print("connection end(%s:%s)"%addr)
def udpsend(data,address):
for con in fileinput.input('/sor/usr.list'):
adr=str(con)
if adr!=address:
usend.sendto(data.encode(),(adr,1027))
return
def out(address):
for con in fileinput.input('/sor/usr.list'):
usend.sendto(con.encode(),(address,1027))
print("Waiting...")
sor=open('/sor/usr.list','w')
sor.close()
while True:
sock,addr=s.accept()
sor=open('/sor/usr.list','a')
sor.write("%s\n"%addr[0])
sor.close()
p=Process(target=Tcp,args=(sock,addr))
p.start()