Простой пример сокетов на golang
Пример использования сокетов на Golang:
```go
package main
import (
"fmt"
"net"
)
func main() {
// создание сокета
socket, err := net.Dial("tcp", "localhost:8000")
if err != nil {
fmt.Println("Ошибка при создании сокета:", err)
return
}
defer socket.Close()
// отправка сообщения
msg := "Hello, server!"
_, err = socket.Write([]byte(msg))
if err != nil {
fmt.Println("Ошибка при отправке сообщения:", err)
return
}
// получение ответа от сервера
response := make([]byte, 1024)
_, err = socket.Read(response)
if err != nil {
fmt.Println("Ошибка при чтении ответа:", err)
return
}
fmt.Println("Ответ сервера:", string(response))
}
```
Серверная часть для принятия сообщений выглядит так:
```go
package main
import (
"fmt"
"net"
)
func main() {
// создание сокета
listener, err := net.Listen("tcp", ":8000")
if err != nil {
fmt.Println("Ошибка при создании сокета:", err)
return
}
defer listener.Close()
// обработка подключений
for {
conn, err := listener.Accept()
if err != nil {
fmt.Println("Ошибка при подключении клиента:", err)
return
}
go handleRequest(conn)
}
}
func handleRequest(conn net.Conn) {
defer conn.Close()
// чтение сообщения от клиента
request := make([]byte, 1024)
_, err := conn.Read(request)
if err != nil {
fmt.Println("Ошибка при чтении сообщения:", err)
return
}
fmt.Println("Сообщение от клиента:", string(request))
// отправка ответа клиенту
response := "Hello, client! I got your message"
_, err = conn.Write([]byte(response))
if err != nil {
fmt.Println("Ошибка при отправке ответа:", err)
return
}
}
```
Это минимальный пример, который можно доработать для своих задач.