• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Cybernavigator

[Sockets] Ajuda com recepções

5 mensagens neste tópico

Boas ppl, os probs sao os seguintes:

Primeiro não percebo nada de conecções de sockets

Segundo não entendo partes de um código em python (já vão perceber)

Terceiro não percebo nada de conecções de sockets

O código em python que eu quero traduzir é o seguinte

class GameNetworkThread(threading.Thread):

    

    def __init__(self, host, port=8080):
        threading.Thread.__init__(self)

        HOST = host
        PORT = port
        s = None
        for res in socket.getaddrinfo(HOST, PORT, socket.AF_UNSPEC, socket.SOCK_STREAM):
            af, socktype, proto, canonname, sa = res
            try:
                s = socket.socket(af, socktype, proto)
            except socket.error, msg:
                print msg
                s = None
                continue
            try:
                s.connect(sa)
            except socket.error, msg:
                print msg
                s.close()
                s = None
                continue
            break
        if s is None:
            raise Exception('Could not open socket')

        print "Connected to", host
        self.socket = s

        # non blocking sockets
        self.socket.setblocking(0)
        
        
        self.stop = False
        self.sendQueue = Queue.Queue(1024)
        self.recvQueue = Queue.Queue(1024)
        self.enableDecoder = False
        self.client = None
    def run(self):

        data = None
        messageComplete = True

        while not self.stop:
            readReady, writeReady, _ =  select.select([self.socket], [self.socket], [] )
            for socket in readReady:

                rdata = ""

                try:
                    rdata = socket.recv(8192)
                except:
                    self.client.emergency("Connection error, receive failed.")
                    return
                    
                if len(rdata) != 0:

                    #print "received data [length:%i]", len(rdata)
                    if (rdata[-1] == chr(0x0)):
                        messageComplete = True
                    else:
                        messageComplete = False
                      
                      
                    if data == None:
                        data = rdata
                        
                    else:
                        #print "appending"
                        data += rdata

                            
                            
                        
                        
                    if messageComplete:
                        chunks = filter( lambda x : len(x) > 0, data.split(chr(0x0)))
                    
                        for chunk in chunks:
                            message = GameMessage()
                            message.setData(chunk)

                            if not self.enableDecoder:
                                self.recvQueue.put(message)
                            else:
                                self.processServerMessage(message)

                                
                        data = None

            for socket in writeReady:
                try:
                    item = self.sendQueue.get(False)
                except:
                    item = None

                    

                if item != None:
                    if item.__class__ == str:
                        try:
                            socket.send(item)
                        except:
                            self.client.emergency("Connection error, send failed.")
                            return
                            
                            
                    elif item.__class__ == GameMessage:
                        try:
                            socket.send(item.data)
                        except:
                            self.client.emergency("Connection error, send failed.")
                            return
                        
            time.sleep(.1)

        self.socket.close()
        print "end of thread"
        

    def put(self, data):
        self.sendQueue.put(data)
            

    def get(self, blocking=True, timeout=15):
        try:
            return self.recvQueue.get(blocking, timeout)
        except Exception, e:
            self.client.emergency("Server response timed out. Max %i seconds" % timeout)
            raise e
    

    def processServerMessage(self, message):
        self.client.msgQueue.put(message) #handleMessage(message)

O que eu tenho até agora é isto

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        hostconnect = "72.5.72.101"
        Dim tcpClient As New TcpClient()
        tcpClient.Connect(hostconnect, 8080)
        Dim networkStream As NetworkStream = tcpClient.GetStream()

    End Sub

A partir daki não sei que fazer, alguém em pode ajudar ou dar umas luzes no que diz respeito a sockets?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pessoal... Nada? Um CLientzito de sockets explicadito?! Nada mesmo?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Para percebees esse código tens de dominar mais do que sockets  :D Nesse código são utilizadas threads sopostamente para poder trabalhar com várias conexões ao mesmo tempo.

Sockets são API's. Em windows têm o nome de Winsock. Também existem vários tipos de sockets como Stream Sockets, Datagram Sockets Geralmente Raw Sockets, etc...

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora