Golang : Get UDP client IP address and differentiate clients by port number
Problem :
Your UDP server program needs to find out the UDP client IP address before writing to client. However, you are not able to find out the client IP address from net.UDPConn.RemoteAddr()
For instance:
conn *net.UDPConn
clientIP := conn.RemoteAddr()
fmt.Println(clientIP) // <---- returns NIL
Solution :
Your UDP server must first receive data from the UDP client before the server is able to find out the client IP address. There are ReadFrom()
, ReadFromUDP()
and ReadMsgUDP()
functions that your server will probably use to read the UDP data from client. These functions will return the source Addr
( https://golang.org/pkg/net/#Addr) that you can use to extract client IP address.
For example :
buffer := make([]byte, 1024)
n, addr, err := conn.ReadFromUDP(buffer)
fmt.Println("UDP client : ", addr)
IF you have more than one client connection connecting from the same client machine and you need to distinguish them, use the port numbers to differentiate the client programs.
For example :
Client 1 program :
UDP client : 127.0.0.1:63937
Client 2 program :
UDP client : 127.0.0.1:52132
NOTE : See UDP client server example at https://socketloop.com/tutorials/golang-udp-client-server-read-write-example
References :
https://golang.org/pkg/net/#UDPConn.ReadFrom
See also : Golang : UDP client server read write example
By Adam Ng
IF you gain some knowledge or the information here solved your programming problem. Please consider donating to the less fortunate or some charities that you like. Apart from donation, planting trees, volunteering or reducing your carbon footprint will be great too.
Advertisement
Tutorials
+10.7k Golang : Resolve domain name to IP4 and IP6 addresses.
+8.6k Golang : Progress bar with ∎ character
+41.2k Golang : How to count duplicate items in slice/array?
+7.2k Golang : Check if one string(rune) is permutation of another string(rune)
+18.7k Golang : convert int to string
+16.5k Golang : File path independent of Operating System
+12.3k Golang : Validate email address
+5.8k Golang : Fix opencv.LoadHaarClassifierCascade The node does not represent a user object error
+10.9k Golang : Removes punctuation or defined delimiter from the user's input
+6.6k Elasticsearch : Shutdown a local node
+6.2k Golang : Process non-XML/JSON formatted ASCII text file example
+17.1k Golang : Capture stdout of a child process and act according to the result