私は今まで数時間執着してきたが、今まではやっていない。 Googleのトンと研究のトンがまだストレートではありません。C#ソケット(TCPとUDP)
私はクライアントと、完全に機能するTCP用にコード化されたサーバーを持っていますが、クライアントがサーバー上でUDPをプレイヤーの場所などの重要でないパケットにも使用できるようにします。
今のところ、これは接続されたクライアントの接続コードです。
public void ConnectToServer(){
tcp_client = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
tcp_client.Connect(server_ip, server_port);
tcp_stream = new NetworkStream(this.tcp_client);
this.udp_client = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
this.udp_client.BeginConnect(IPAddress.Parse(server_ip), server_port,new AsyncCallback(udp_connected), null);
}
今、クライアントは私がudp.Send(byteArray)
を使用する場合、それが例外をスローいないが、サーバ自身が受け取った任意のデータに応答していないとして送信されるように見えるために問題を持っていたものではありません。
これは100%コピー/ペーストされたコードではありません。何が問題になっているかを表示するように変更します。
private Socket c;
private UdpClient udp;
private isRunning = true;
public Client(Socket c){
// This was accepted from TcpListener on Main Server Thread.
this.c = c;
this.networkStream = new NetworkStream(this.c);
udp = new UdpClient();
udp.Connect((IPEndPoint)c.RemoteEndPoint);
// Then starts 2 thread for listening, 1 for TCP and 1 for UDP.
}
private void handleUDPTraffic(){
IPEndPoint groupEP = (IPEndPoint)c.RemoteEndPoint;
while (isRunning){
try{
byte[] udp_received = udp.Receive(ref groupEP);
Console.WriteLine("Received UDP Packet Data: " + udp_received.Length);
}catch{
log.ERROR("UDP", "Couldn't Receive Data...");
}
}
}
は、私は右のあなたが一緒にUDPクライアントとサーバーの作業を行うことができないことを理解しているだろうか? –
私の知るところでは、同じポート上でTCPとUDPを同時に受信することはできません。一般に、ポート上で実行できるプロトコルは1つだけです。例:リッスンと送信のためのあなたのUDPポート番号、それは動作するはずです。 – KBO
@KBOポートフォワーディングルールを見ると "Both"というオプションが許可されるので、私はUDPとTCPに単一のポートを使うことができるという仮定をしているので、わからなかった。 –