TypeError: sendto() takes exactly 3 arguments (2 given)

I dont know why, but when I run my send code for when I walk around it seems to give me this error, but when I 1st do the send code it seems to work just fine. What I was trying to do is when I walk around send the new cordnets to the server to be save.

File “test.py”, line 180, in move
(self.UDPSock.sendto(self.data,self.addr))
TypeError: sendto() takes exactly 3 arguments (2 given)

import direct.directbase.DirectStart  #Initialize Panda and create a window
import random, sys, os, math, time, threading, socket          #libs

from direct.gui.OnscreenText import OnscreenText
from direct.task.Task import Task     #Task run
from pandac.PandaModules import Fog
from pandac.PandaModules import Shader
from pandac.PandaModules import Point3,Vec4
from pandac.PandaModules import NodePath
from pandac.PandaModules import CollisionTraverser,CollisionNode
from pandac.PandaModules import CollisionHandlerQueue,CollisionRay
from direct.showbase.DirectObject import DirectObject



class World(DirectObject):
    def __init__(self):
      #Some texts
      self.infoText = OnscreenText(text = 'Home Town', pos = (0, .9), scale = 0.07, mayChange=1, fg = (255, 255, 255, 1))
      self.DistanceText = OnscreenText(text = '0', pos = (0, .7), scale = 0.07, mayChange=1, fg = (255, 255, 255, 1))
#-----------------------------------------------------
      self.connect()
      self.loadzone()
      self.loadlay1()
#-----------------------------------------------------
	
      self.keyMap = {"left":0, "right":0, "forward":0, "back":0}
      # Accept the control keys for movement
      self.accept("escape", sys.exit) 
      self.accept("arrow_left", self.setKey, ["left",1]) 
      self.accept("arrow_right", self.setKey, ["right",1])
      self.accept("arrow_up", self.setKey, ["forward",1])
      self.accept("arrow_down", self.setKey, ["back",1])
      self.accept("arrow_left-up", self.setKey, ["left",0]) 
      self.accept("arrow_right-up", self.setKey, ["right",0]) 
      self.accept("arrow_up-up", self.setKey, ["forward",0])
      self.accept("arrow_down-up", self.setKey, ["back",0])


      taskMgr.add(self.move,"moveTask")
      taskMgr.add(self.camera,"cameraTask")
      

      #Game state variables 
      self.prevtime = 0

      #disable camera
      base.disableMouse()


    def connect(self):
      # Set the socket parameters
      self.host = "192.168.1.135"
      self.ip = socket.gethostbyaddr(socket.gethostname())[-1][0]
      self.client = self.ip
      self.port = 21568
      self.port2 = 21567
      self.buf = 1024
      self.buf2 = 1024
      self.addr = (self.host,self.port)
      self.addr2 = (self.client,self.port2)
      self.zone = " "
      self.pos = " "

      # Create socket
      self.UDPSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
      self.UDPSock.bind(self.addr2)

      self.data = self.client
      (self.UDPSock.sendto(self.data,self.addr))
      self.data = "Hey you there?"
      (self.UDPSock.sendto(self.data,self.addr))
      self.data,self.addr2 = self.UDPSock.recvfrom(self.buf2)
      if self.data == "Yes":
        print "Connected."
      else:
        print "No connection, please retry later."
      def_msg = "===Enter User name and Password===";
      self.data = raw_input('User name>> ')
      (self.UDPSock.sendto(self.data,self.addr))
      self.data = raw_input('password>> ')
      (self.UDPSock.sendto(self.data,self.addr))
      self.data,self.addr = self.UDPSock.recvfrom(self.buf2)
      if self.data == "Sending zone.":
        self.data = "ok"
        (self.UDPSock.sendto(self.data,self.addr))
        print "got zone"
      else:
        print "Lost connection."
      self.data,self.addr = self.UDPSock.recvfrom(self.buf2)
      self.zone = self.data
      self.data,self.addr = self.UDPSock.recvfrom(self.buf2)
      if self.data == "Sending pos.":
        self.data = "ok"
        (self.UDPSock.sendto(self.data,self.addr))
        print "got pos"
      else:
        print "Lost connection."
      self.data,self.addr = self.UDPSock.recvfrom(self.buf2)
      pos = self.data
      print pos
      self.data,self.addr = self.UDPSock.recvfrom(self.buf2)
      name = self.data + ": "
      self.data,self.addr = self.UDPSock.recvfrom(self.buf2)
      print self.data


    def loadzone(self):
      #Load the first environment model town.egg 
      self.environ = loader.loadModel(self.zone)
      self.environ.reparentTo(render) 
      self.environ.setScale(0.15,0.15,0.15) 
      self.environ.setPos(0,0,0)
      self.loaded = 1
      
    def loadlay1(self):
      #Load the grass
      self.grass = loader.loadModel("towns\objects\grass")
      self.grass.reparentTo(render) 
      self.grass.setScale(0.005,0.005,0.005) 
      self.grass.setPos(0,0,-60) #(3500,-10000,-60)



      
    def camera(self, task):
      if self.zone == "towns\a1":
        if self.loaded == "1":
          base.camera.setPos(0,0,77)
          base.camLens.setFar(500000)
          self.myFog = Fog("Fog Name")
          self.myFog.setColor(167,162,154)
          self.myFog.setExpDensity(.001)
          render.setFog(self.myFog)
          base.setBackgroundColor(167,162,154)
          self.loaded = 0
      elif self.zone == "towns/controlroom":
        if self.loaded == "9999":
          base.camera.setPos(0,0,115) 
          base.camLens.setFar(2000)
          self.infoText['text']='Control Room'
          base.setBackgroundColor(0,0,0)
          self.loaded = 0
      elif self.zone == "towns/dg1":
        if self.loaded == "9242":
          base.camera.setPos(0,0,115) 
          base.camLens.setFar(5000)
          self.infoText['text']='Dg1'
          self.myFog = Fog("Fog Name")
          self.myFog.setColor(167,162,154)
          self.myFog.setExpDensity(.001)
          render.setFog(self.myFog)
          base.setBackgroundColor(167,162,154)
          self.loaded = 0	
      else:
        return
	    


    #Records the state of the arrow keys 
    def setKey(self, key, value): 
      self.keyMap[key] = value 


    def move(self, task):
      elapsed = task.time - self.prevtime
      camright = base.camera.getNetTransform().getMat().getRow3(1)
      if (self.keyMap["left"]!=0): 
          base.camera.setH(base.camera.getH() + elapsed*250)
      if (self.keyMap["right"]!=0): 
          base.camera.setH(base.camera.getH() - elapsed*250)
      if (self.keyMap["forward"]!=0):
          base.camera.setPos(base.camera.getPos() + camright*(elapsed*500))
          self.distance=camera.getDistance(self.grass)
         [b] self.data = self.distance--Here[/b]
          [b](self.UDPSock.sendto(self.data,self.addr))---Here[/b]
          print repr(self.distance)
      if (self.keyMap["back"]!=0):
          base.camera.setPos(base.camera.getPos() - camright*(elapsed*500))
          self.distance=camera.getDistance(self.grass)
[b]          self.data = self.distance----Here
          (self.UDPSock.sendto(self.data,self.addr))----Here[/b]
          print repr(self.distance)
      #store camrea pos
      startpos = base.camera.getPos()

      self.prevtime = task.time 
      return Task.cont

World()
run() 

Your trying to send a python object via python udp sockets. You need convert it to a character array (ie String) first using str()

Sending floating points are bit tricky. If your not worried about network bandwidth I actually recommend sending them as a string with comma delimiters and then decoding it on the other end using float()

If you want to go with the most optimized route then you have to worry about network byte order and endianess which always gets fun.

Alright thanks. I been working on it for a few weeks now and couldnt figure it out for the life of me lol.

Hi,
I tried to use your code to get UDP communication working. I am trying to receive joint positions of virtual hand from UDP packets. How do I update them in real time?

Thanks