Bir sohbet istemcisi oluşturmak için eko sunucu programımı değiştirmeye çalışıyorum. Şu anda, müvekkilimin başlamasında sunucumun bir bağlantı noktasını dinlemesini istiyorum. Ardından, istemci sunucuya bir mesaj yazıp gönderebilir ve sunucu bunu tekrarlar. Bununla birlikte, 2 istemciyi 2 farklı bağlantı noktasına bağlayabilmem ve istemcilerin sunucu üzerinden birbirlerine ileti göndermesine izin vermek istiyorum. Bunu yapmamın bir yolu var mı? İlk adımın bir tane yerine 2 portu dinleyeceğini varsayıyorum.1 Sunucuda 2 Bağlantı Noktası Dinleme
Şimdiye dek sahip olduğum şeyler.
Sunucu:
package main
import (
"fmt"
"log"
"net"
)
func main() {
fmt.Println("The server is listening on Port 3000")
listener, _ := net.Listen("tcp", "localhost:3000")
//listener2, _ := net.Listen("tcp", "localhost:8080")
defer listener.Close()
//defer listener2.Close()
// Listen for connections
for {
conn, _ := listener.Accept()
//conn2, _ := listener2.Accept()
fmt.Println("New connection found!")
go listenConnection(conn)
//go listenConnection(conn2)
}
}
//Listen for messages and reply
func listenConnection(conn net.Conn) {
fmt.Println("Yay")
for {
buffer := make([]byte, 1400)
dataSize, err := conn.Read(buffer)
if err != nil {
fmt.Println("Connection has closed")
return
}
//This is the message you received
data := buffer[:dataSize]
fmt.Print("Received message: ", string(data))
// Send the message back
_, err = conn.Write(data)
if err != nil {
log.Fatalln(err)
}
fmt.Print("Message sent: ", string(data))
}
}
Müşteri:
package main
import (
"fmt"
"log"
"net"
"bufio"
"os"
)
func main() {
conn, err := net.Dial("tcp", "localhost:3000")
if err != nil {
log.Fatalln(err)
}
for {
reader := bufio.NewReader(os.Stdin)
fmt.Print("Enter text: ")
text, _ := reader.ReadString('\n')
_, err = conn.Write([]byte(text))
if err != nil {
log.Fatalln(err)
}
for {
buffer := make([]byte, 1400)
dataSize, err := conn.Read(buffer)
if err != nil {
fmt.Println("The connection has closed!")
return
}
data := buffer[:dataSize]
fmt.Println("Received message: ", string(data))
break
}
}
}
1 sunucuda 2 istemcileri (port) dinlemek ve onları iletişim kurmasını sağlamak için herhangi bir yolu var mı? Bunu, aynı bağlantı noktasındaki iki istemciyle yapmak mümkün mü? Sunucu programına başka bir dinleyici eklemeyi denedim, ancak bu satırlar işe yaramadıkları için şimdilik yorum yaptım. Her türlü yardıma minnettar olurum!
Neden? Tek bir bağlantı noktasıyla istediğiniz kadar istemciniz olabilir. Onları boşa harcamayın, onlar sınırlı bir kaynaktır. – EJP
2 müşterinin mesajların birbirlerini oluşturduğunu görmesini istedim ve bunun tek yolu 2 bağlantı noktası olacağını düşündüm. Ağa ve Golang'a oldukça yeniyim, bu yüzden işleri yapmanın en iyi yolunu gerçekten bilmiyorum. Sadece 1 port kullanırken 2 istemci programı iletişim kurmanın bir yolu var mı? – user6126174
Zaten bunu yapıyorsunuz. – EJP