Zdravím,
chtěl bych vás (někoho) poprosit o vysvětlení níže uvedeného programu. Jedná se o TCP/IP (sockety) komunikaci. Jo, funguje, dělá to to, co chci, ale já tomu prostě nerozumím. Mám doma referenční příručku, ale v té to nění nijak blíže vysvětleno. Mohl by mi to prosím někdo okomentovat? Děkuji mnohokráte, Vojtěch Kurka
Kód:
Server:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import socket
import thread
import time
import message
LOCALHOST=''
DEFAULT_PORT=43210
def clientHandler(dataSocket):
try:
while 1:
data = message.receiveMessage(dataSocket)
print '\n\nprijato:', data
rdata = raw_input('zadej zpravu: ')
sent = message.sendMessage(dataSocket, rdata)
except:
pass
def startServer(port):
serverSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serverSocket.bind((LOCALHOST, port))
serverSocket.listen(1)
while 1:
clientSocket, clientAddress = serverSocket.accept()
print "spojeni prijato..."
thread.start_new_thread(clientHandler, (clientSocket,))
if __name__ == "__main__":
startServer(DEFAULT_PORT)
Klient:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import socket
import thread
import time
import message
DEFAULT_PORT=43210
DEFAULT_HOST=raw_input('zadej adresu pocitace na kterem je server: ')
def client(dataSocket):
while 1:
outMsg = raw_input('zadej zpravu: ')
message.sendMessage(dataSocket, outMsg)
inMsg = message.receiveMessage(dataSocket)
print "\n\nprijato:", inMsg
def mainLoop(hostName, port):
dataSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
print 'pripojuji...'
dataSocket.connect((hostName, port))
print 'zacinam nove vlakno...'
thread.start_new_thread(client, (dataSocket,))
except:
print 'pripojeni selhalo...'
while 1:
time.sleep(1)
if __name__ == '__main__':
import sys
try:
outMsg = sys.argv[1]
except:
pass
mainLoop(DEFAULT_HOST, DEFAULT_PORT)
Message.py:
#!/usr/bin/python
# -*- coding: utf-8 -*-
def receiveMessage(dataSocket):
size = int(dataSocket.recv(4))
return dataSocket.recv(size)
def sendMessage(dataSocket, message):
size = len(message)
if size > 9999:
size = 9999
dataSocket.send(str(size).rjust(4))
return dataSocket.send(message[:size])