Mi stavo esercitando in python seguendo dei video su youtube così ho provaro a riscrivere tutto..praticamente l'obbiettivo è far comunicare un server con un client attraverso una connessione tcp così ho appunto creato due file (seguendo una guida) tcpServer.py e tcpClient.py però quando eseguo i due file ricevo sempre il seguente errore:
Da quello che ho capito è perchè nella porta è già presente un altro processo ma dopo svariati tentativi cambiando porta sono giunto alla conclusione che il processo che ostruisce la porta è appunto il processo del file tcpServer.py che è in attesa. Spero possiate aiutarmi.
Qui di seguito posto i due codici rispettivamente del server e del client.
P.S. ho capito tutte le istruzioni tranne una...a cosa serve questa assegnazione " c, addr = s.accept() " ? Ho poi notato che successivamente a data viene assegnato c.recv() ma non riesco a capire cosa significhi c.
Codice:
Traceback (most recent call last):
File "tcpClient.py", line 19, in <module>
main()
File "tcpClient.py", line 7, in main
s.bind((host, port))
File "/usr/lib/python2.7/socket.py", line 224, in meth
return getattr(self._sock,name)(*args)
socket.error: [Errno 98] Address already in use
Qui di seguito posto i due codici rispettivamente del server e del client.
Codice:
import socket
def main():
host = '127.0.0.1'
port = 6666
s = socket.socket()
s.bind((host,port))
s.listen(1)
c, addr = s.accept()
print "[+]Connection from: " + str(addr)
while True:
data = c.recv(1024)
if not data:
break
print "[!]Message from the connected user: " + str(data)
data = raw_input("[?]Answer?" + "/t" + "Press q to quit")
if data == q:
s.close()
print "[!]Connection finished"
else:
print "[..]Sending message "
c.send(data)
if __name__ == '__main__':
main()
Codice:
import socket
def main():
host = '127.0.0.1'
port = 6666
s = socket.socket()
s.bind((host, port))
message = raw_input("-> ")
while message != 'q':
print "[..]Sending message "
s.send(message)
data = s.recv(1024)
print '[+]Received message: ' + str(data)
message = raw_input("-> ")
print '[!]Connection finished'
s.close()
if __name__ == "__main__":
main()