- 论坛徽章:
- 0
|
最近需要写一个服务器端的程序,客户端是用C写的,并且不清楚客户端是怎么操作的,而在写服务器端程序出现了以下的问题:
1.客户端上报的数据,经常出现有时候能上报,但大多数时候都不能上报的情况,这是怎么造成的?是不是自己写的服务器程序将数据阻塞住了,需要在服务器端设置一个buffer?这个buffer又应该怎么设置?
2.客户端的数据是一条一条的报文,特点是每条报文结束后都有一个$作为结束符,我想在每条报文前加上日期时间等前缀信息,再一起写入文件,如果仅仅是使用recv,就可能出现只上报了日期,而报文却被截断没有上报的情况,该怎么解决?是不是可以使用唯一字符串结束标示符,这个东西应该怎么用呢?
好像问的问题比较傻比较乱,还烦请大神们帮忙解答,这个程序是我在网络基础编程上的一个例子修改了一下得来的
————————————————————————————————————————————————————————————————————————————
import socket
import traceback
import time
import os
import os.path
dir=os.getcwd()
fname='report.txt'
file=os.path.join(dir,fname)
f=open(file,'a')
host = '' # Bind to all interfaces
port = 10000
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind((host, port))
s.listen(5)
while True:
try:
clientsock, clientaddr = s.accept()
except KeyboardInterrupt:
raise
except:
traceback.print_exc()
continue
# Process the connection
try:
while True:
curtime=time.strftime('%Y-%m-%d,%H:%M:%S',time.localtime())
client=str(clientsock.getpeername())
data = clientsock.recv(4096)
report=' '.join((curtime,client,data))
if data!='':
f.write(report+'\n')
if not len(data):
break
except (KeyboardInterrupt, SystemExit):
raise
except:
traceback.print_exc()
# Close the connection
try:
clientsock.close()
except KeyboardInterrupt:
raise
except:
traceback.print_exc()
f.close()
|
|