So this works fine... func handleConnection(c net.Conn) { // get user details username := createUser(c, "Please enter you username (new users will be created / existing users will be loaded): ") // map username to connection var m = make(map[string]net.Conn) m[username] = c n := len(m) fmt.Println(strconv.Itoa(n))
But due to the concurrent nature of the function ( I can't have player 1 blocking player 2 ) the map only ever has details of your own connection...as seen from the output of len on the server... $ go run game-server.go 6666 1 1 I guess I need to handle this outside of a goroutine... On Saturday, September 12, 2020 at 7:55:34 AM UTC+1 Andy Hall wrote: > I think this is exactly what I need to do...thanks very much. I'm looking > forward to implementing it. > > On Saturday, September 12, 2020 at 5:43:09 AM UTC+1 Shulhan wrote: > >> >> >> Pada tanggal Sab, 12 Sep 2020 02.54, Andy Hall <andyjo...@gmail.com> >> menulis: >> >>> if I have multiple clients connected to a tcp server and I wish to write >>> back to specific connections I can record the net.Conn value and then use >>> the Write method on it...but when using Println I get the following for two >>> clients... >>> >>> &{{0xc000094000}} >>> &{{0xc000094080}} >>> >>> which when testing with a simple write doesn't work... >>> >>> package main >>> import "net" >>> var c net.Conn = "&{{0xc000094000}}" >>> func writeConn(c net.Conn) { >>> c.Write([]byte(string("Hello\n"))) >>> } >>> func main() { >>> writeConn(c) >>> } >>> >>> ...and results in the following... >>> >>> cannot use "&{{0xc000094000}}" (type string) as type net.Conn in >>> assignment >>> >>> clearly using Println to output the net.Conn is not a viable var to use >>> so how could I do this ? I intend to record each users net.Conn in a >>> database which can then be queried as required. >>> >>> any help would be most greatly appreciated. >>> >> >> >> Either I miss something or Go has different socket concept, but last time >> I learn this is not how the network socket works in general. >> >> First, &{{0xc000094000}} is the address of a variable. You can't convert >> an address from string back to variable, because that would be security >> issue. Usually socket connection is signed integer, in C you can assign >> integer value to variable let other process write into it. But in Go, >> connection is an interface/structure. >> >> If you want to record each users, you have two options: >> >> 1) Let the user send unique ID (for example their user ID or email or >> username) on first accept. >> >> 2) Get unique ID from connection IP address (beware that two or more >> connection may come from the same IP address). >> >> You then must have a map that store unique ID as key and net.Conn as >> value. So, if you want to send some value to specific user, you query the >> map first and if exist then you can proceeds. >> >> I hope that helps. >> >>> -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/c14d7e30-5ead-4e47-8987-710b25b4a91fn%40googlegroups.com.