Hjälp med min socket-server

Här diskuteras programmering och utveckling
Användarvisningsbild
Galgalid
Inlägg: 1646
Blev medlem: 08 dec 2006, 12:30

Hjälp med min socket-server

Inlägg av Galgalid »

Jag har gjort en enkel socket-server och klient. Problemet är att jag kan bara starta upp servern och klienten 1 gång med tillexempel port nr 1337....nästa gång jag vill testa måste jag ändra den till 1338..osv...hur kirnggår jag det här?

Här är servern(började kolla på nätverks-delen inatt liksom....noobigt än):

Kod: Markera allt

#!/usr/bin/env python

#A simple Socket-server

import time
import socket
import math

server = socket.socket()
host = socket.gethostname()
port = 1338
server.bind((host,port))

server.listen(5)
while True:
	c, addr = server.accept()
	print 'Got connection from', addr
	c.send('you connected to this server on ' + str(time.asctime()) + '\n')
	c.send('Thank you for connecting')
	c.close()
Klienten:

Kod: Markera allt

#!/usr/bin/env python

#A simple socket-client

import socket
import time
import math

s = socket.socket()

host = socket.gethostname()
port = 1338

s.connect((host,port))
print s.recv(10000)
Lars
Inlägg: 6191
Blev medlem: 14 jan 2007, 19:31
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Ort: Stockholm

SV: Hjälp med min socket-server

Inlägg av Lars »

Jag har också råkat ut för det där, om jag inte minns fel så är det setsockopt() och SO_REUSEPORT du ska kika på.
Användarvisningsbild
Galgalid
Inlägg: 1646
Blev medlem: 08 dec 2006, 12:30

SV: Hjälp med min socket-server

Inlägg av Galgalid »

Tack så mycket :D
Användarvisningsbild
Galgalid
Inlägg: 1646
Blev medlem: 08 dec 2006, 12:30

SV: Hjälp med min socket-server

Inlägg av Galgalid »

Skulle du kunna förklara mer hur det där fungerar?  setsocketopt() har 3 argument....och level är....SO_REUSEPORT va? men de andra 2 då?
Lars
Inlägg: 6191
Blev medlem: 14 jan 2007, 19:31
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Ort: Stockholm

SV: Hjälp med min socket-server

Inlägg av Lars »

SO_REUSEADDR var det visst, se här för ett exempel i Perl.
Användarvisningsbild
Galgalid
Inlägg: 1646
Blev medlem: 08 dec 2006, 12:30

SV: Hjälp med min socket-server

Inlägg av Galgalid »

Skulle någon kunna ge ett exempel för jag får det inte att fungera...
Lars
Inlägg: 6191
Blev medlem: 14 jan 2007, 19:31
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Ort: Stockholm

SV: Hjälp med min socket-server

Inlägg av Lars »

Kläm in den här raden efter server = socket.socket():

Kod: Markera allt

server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
Användarvisningsbild
Galgalid
Inlägg: 1646
Blev medlem: 08 dec 2006, 12:30

SV: Hjälp med min socket-server

Inlägg av Galgalid »

tack :)
Användarvisningsbild
Galgalid
Inlägg: 1646
Blev medlem: 08 dec 2006, 12:30

SV: Hjälp med min socket-server

Inlägg av Galgalid »

Fungerade inte  :-\  problemet kvarstår
Användarvisningsbild
Barre
Inlägg: 2298
Blev medlem: 13 dec 2006, 10:23
OS: Ubuntu
Ort: Stockholm
Kontakt:

SV: Hjälp med min socket-server

Inlägg av Barre »

Nu vet jag inte riktigt om jag missuppfattat det hela, men...

Försöker du starta serverprocessen flera gånger och binda dessa olika processer mot samma port?
I sådant fall kommer detta inte att fungera.
Hur skall isådant fall proccesserna veta vilken instans av serverprocessen som skall knyta till ett klientanrop?.

om jag inte misstar mig (vilket inte skulle vara konstigt om jag gjorde för jag är ingen hejjare på Python) så måste du ha en serverprocess som i sin tur skapar en ny tråd för varje klientanslutning, på så sätt skall du kunna ha flera klienter som ansluter sig till samma destinationsport.
________________________________________________________________
twitter @ BarreGargamel
blogg @ Gargamel.NU
mrolfson
Inlägg: 2
Blev medlem: 20 aug 2007, 19:28

SV: Hjälp med min socket-server

Inlägg av mrolfson »

Din kod är lite konstig.
Normalt en server några beståndsdelar såsom

# skapa socket tex
serversocket = socket(AF_INET, SOCK_STREAM)   
# gör socketen tillgänglig för inet inte bara localhost
serversocket.bind((gethostname(), myport))
# set upp hur många connection du kan öppna samtidigt tex
serversocket.listen(5)
# acceptera (öppna socket'en) tex
(clientsocket, address) = sockobj.accept()
# Vänta på att nåt kommer in i socketen
data=clientsocket.recv(1024)
# svara clienten
clientsocket.send('Echo==>' + data)
# stäng socketen
clientsocket.close()

Din server saknar recv anropet

Din Klient är också konstig: Den saknar send
Här har du en enkel klient:
#create an INET, STREAMing socket
from socket import *
message=['Hello world']
s = socket(AF_INET, SOCK_STREAM)
#now connect to the web server on port 4442
s.connect(("ovata", 4442))
for line in message:
    s.send(line)
    data=s.recv(1024)
    print 'Client received data:', data

    s.close()



länk till bra exempel
http://docs.python.org/lib/socket-example.html
Användarvisningsbild
Galgalid
Inlägg: 1646
Blev medlem: 08 dec 2006, 12:30

SV: Hjälp med min socket-server

Inlägg av Galgalid »

ska prova senare :)
jabbadoo
Inlägg: 232
Blev medlem: 11 dec 2006, 21:09
OS: Ubuntu
Utgåva: 10.04 Lucid LTS
Ort: Sweden
Kontakt:

SV: Hjälp med min socket-server

Inlägg av jabbadoo »

jag får ett fel i min socket client:

Traceback (most recent call last):
  File "Client.py", line 10, in <module>
    server.connect((ip, port))
  File "<string>", line 1, in connect
  File "/usr/lib/python2.5/socket.py", line 141, in _dummy
    raise error(EBADF, 'Bad file descriptor')
socket.error: (9, 'Bad file descriptor')


detkommer när jag connectar för andra ggn, vare sig det är till samma eller inte... konstigt tycker jag, men så är det.... någon som har en lösning???
jabbadoo
Inlägg: 232
Blev medlem: 11 dec 2006, 21:09
OS: Ubuntu
Utgåva: 10.04 Lucid LTS
Ort: Sweden
Kontakt:

SV: Hjälp med min socket-server

Inlägg av jabbadoo »

det verkar som om man måste starta en ny socket....
Användarvisningsbild
DrMegahertz
Inlägg: 296
Blev medlem: 06 maj 2006, 14:37
OS: Ubuntu
Utgåva: 14.04 Trusty Tahr LTS
Ort: Södra Dalarna

SV: Hjälp med min socket-server

Inlägg av DrMegahertz »

jabbadoo skrev: det verkar som om man måste starta en ny socket....
Om du har använt socket.close() på din socket så går den inte längre att använda :)
BildAre you shpongled? Bild
jabbadoo
Inlägg: 232
Blev medlem: 11 dec 2006, 21:09
OS: Ubuntu
Utgåva: 10.04 Lucid LTS
Ort: Sweden
Kontakt:

SV: Hjälp med min socket-server

Inlägg av jabbadoo »

hur gör man så att man reconnectar till en annan server, port? utan att close()... alla säger det... att om man closar så kan man inte använda den, men hur gör man för att använda den igen?
Skriv svar

Återgå till "Programmering och webbdesign"