just printing the incoming traffic
This commit is contained in:
		
							parent
							
								
									7d23603b8c
								
							
						
					
					
						commit
						5a7d125ea2
					
				
							
								
								
									
										70
									
								
								chatserver.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								chatserver.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,70 @@ | |||||||
|  | package main | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  |   "flag" | ||||||
|  |   "fmt" | ||||||
|  |   "io" | ||||||
|  |   "net" | ||||||
|  |   "os" | ||||||
|  |   "strconv" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | func usage() { | ||||||
|  |   fmt.Fprintf(os.Stderr, "\nusage: go run chatserver.go\n") | ||||||
|  |   flag.PrintDefaults(); | ||||||
|  |   fmt.Println() | ||||||
|  | 
 | ||||||
|  |   os.Exit(1) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func handleConnection(conn net.Conn) { | ||||||
|  |   // Why don't these work? | ||||||
|  |   //buf := make([]byte, 0, 1024) | ||||||
|  |   //buf := []byte{} | ||||||
|  |   // But this does | ||||||
|  |   buf := make([]byte, 1024) | ||||||
|  |   for { | ||||||
|  |     count, err := conn.Read(buf) | ||||||
|  |     if nil != err { | ||||||
|  |       if io.EOF != err { | ||||||
|  |         fmt.Fprintf(os.Stderr, "Non-EOF socket error: %s\n", err) | ||||||
|  |       } | ||||||
|  |       fmt.Fprintf(os.Stdout, "Ending socket\n") | ||||||
|  |       break | ||||||
|  |     } | ||||||
|  |     // not so sure about why this case exists | ||||||
|  |     // we'll just ignore it for now... | ||||||
|  |     if 0 == count { | ||||||
|  |       // fmt.Fprintf(os.Stdout, "Weird") | ||||||
|  |       continue | ||||||
|  |     } | ||||||
|  |     fmt.Fprintf(os.Stdout, "Message:\n%s\n", buf[0:count]) | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func main() { | ||||||
|  |   flag.Usage = usage | ||||||
|  |   port:= flag.Uint("telnet-port", 4080, "tcp telnet chat port") | ||||||
|  |   flag.Parse() | ||||||
|  |   addr := ":" + strconv.Itoa(int(*port)) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   // https://golang.org/pkg/net/ | ||||||
|  |   sock, err := net.Listen("tcp", addr) | ||||||
|  |   if nil != err { | ||||||
|  | 		fmt.Fprintf(os.Stderr, "Couldn't bind to TCP socket %q: %s\n", addr, err) | ||||||
|  | 		os.Exit(2) | ||||||
|  |   } | ||||||
|  |   fmt.Println("Listening on", addr); | ||||||
|  | 
 | ||||||
|  |   for { | ||||||
|  |     conn, err := sock.Accept() | ||||||
|  |     if err != nil { | ||||||
|  |       // Not sure what kind of error this could be or how it could happen. | ||||||
|  |       // Could a connection abort or end before it's handled? | ||||||
|  |       fmt.Fprintf(os.Stderr, "Error accepting connection:\n%s\n", err) | ||||||
|  |     } | ||||||
|  |     fmt.Fprintf(os.Stdout, "Accepting socket\n") | ||||||
|  |     go handleConnection(conn) | ||||||
|  |   } | ||||||
|  | } | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user