summaryrefslogblamecommitdiffstats
path: root/notFinishedCode/testServer.py
blob: c9f58ca76fa3a43e61e961a0ef7a2e1b656af5d4 (plain) (tree)



















































































































                                                                                                                                     
# Echo server program
import socket
import sys
import os
import string
from time import sleep

class ServerHandler:
	
	def __init__(self,p):
		self.port = p 
		self.host = None #symbolic name meaning all available interfaces
		self.s = None
		self.connected = 0
		self.address = "127.0.0.1" #address of the main controller
		self.onceConnected = 0
		self.error = 'No error'

	def openSocket(self):
		self.error = 'No error'
		for res in socket.getaddrinfo(self.host, self.port, socket.AF_UNSPEC,
                              socket.SOCK_STREAM, 0, socket.AI_PASSIVE):
    			af, socktype, proto, canonname, sa = res

    			try:
        			self.s = socket.socket(af, socktype, proto)
				self.s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) #this resolves the bug with live packets
    			except socket.error, msg:
        			self.s = None
				self.connected = 0
				self.error = str(msg)
        			continue

    			try:
        			self.s.bind(sa)
        			self.s.listen(1)
    			except socket.error, msg:
        			self.s.close()
        			self.s = None
				self.connected = 0
				self.error = str(msg)
        			continue
    			break

		if self.s is None:
			self.connected = 0
			return 0
    		else:	#accept the connection
			self.connection, self.address = self.s.accept()
			self.connected = 1
			self.onceConnected = 1
			return 1

	def connectedTo(self):
		return self.address

	def receiveData(self):
		if self.connected == 1:
			while 1:
    				data = self.connection.recv(1024)
				if not data:
					return 'NO DATA'
				else:
					return data
		else:
			return 0

	def sendData(self, data):
		if self.connected == 1:
    			self.connection.send(data)
			return 1
		else:
			return 0
		
	def closeConnection(self):
		if self.onceConnected == 1:
			self.connection.close()
			return 1
		else:
			return 0

	def killPort(self):
		killResult = os.popen('lsof -i tcp:' + str(self.port) + ' | grep "python " | awk -F" " ' + "'{print $2}'").read()
		killResult = killResult.replace('\n','')
		print killResult
		if killResult!='':
			print killResult
			killPort = os.popen("kill -9 " + killResult).read()
			return 1
		return 0
while 1:		
	server = ServerHandler(50008) #define the port
	tried = server.openSocket() 

	if server.error != 'No error':
		print server.error
		if server.error == '[Errno 98] Address already in use':
			print 'one should try to kill the port'
			print server.killPort()

	if server.connected == 1:
		test = server.receiveData()
		print test

	if server.connected == 1:
		if server.sendData(test) == 1:
			print 'data sent successfully'

	if server.connected == 1:
		print server.receiveData()

	close = server.closeConnection()
	if close == 1:
		print 'Closed connection successfully'

	del server