Sida 1 av 1

Hjälp med min socket-server

Postat: 16 aug 2007, 02:51
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)

SV: Hjälp med min socket-server

Postat: 16 aug 2007, 10:46
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å.

SV: Hjälp med min socket-server

Postat: 16 aug 2007, 11:24
av Galgalid
Tack så mycket :D

SV: Hjälp med min socket-server

Postat: 17 aug 2007, 02:45
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å?

SV: Hjälp med min socket-server

Postat: 17 aug 2007, 10:44
av Lars
SO_REUSEADDR var det visst, se här för ett exempel i Perl.

SV: Hjälp med min socket-server

Postat: 19 aug 2007, 01:36
av Galgalid
Skulle någon kunna ge ett exempel för jag får det inte att fungera...

SV: Hjälp med min socket-server

Postat: 19 aug 2007, 11:04
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)

SV: Hjälp med min socket-server

Postat: 19 aug 2007, 11:29
av Galgalid
tack :)

SV: Hjälp med min socket-server

Postat: 20 aug 2007, 01:37
av Galgalid
Fungerade inte  :-\  problemet kvarstår

SV: Hjälp med min socket-server

Postat: 20 aug 2007, 10:03
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.

SV: Hjälp med min socket-server

Postat: 20 aug 2007, 19:44
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

SV: Hjälp med min socket-server

Postat: 20 aug 2007, 20:43
av Galgalid
ska prova senare :)

SV: Hjälp med min socket-server

Postat: 06 sep 2007, 16:59
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???

SV: Hjälp med min socket-server

Postat: 07 sep 2007, 18:57
av jabbadoo
det verkar som om man måste starta en ny socket....

SV: Hjälp med min socket-server

Postat: 08 sep 2007, 11:32
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 :)

SV: Hjälp med min socket-server

Postat: 08 sep 2007, 11:38
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?