Ich erstelle eine Server-Client-Anwendung, bei der Server und Client miteinander kommunizieren können. Als ich die Startmethode auf dem Server aufrufen, erhalte ich einen Fehler dieses sagen:Server Start-Methode wirft Ausnahme, Port bereits in Verwendung?
Only one usage of each socket address (protocol/network address/port) is normally permitted
Hier ist Program.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Net.Sockets;
namespace NetworkingTest {
class Program {
static void Main(string[] args) {
bool readLine = true;
string input = "";
while (true) {
if (readLine == true) {
input = Console.ReadLine();
}
if (input == "server") {
Server server = new Server(IPAddress.Any, 12346);
readLine = false;
}
if (input == "client") {
Client client = new Client(IPAddress.Parse("myipv4"), 12346);
readLine = false;
}
}
}
}
}
Hier ist Server.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Net.Sockets;
using System.Threading;
namespace NetworkingTest {
class Server {
public TcpListener server;
public Server (IPAddress ip, int port) {
server = new TcpListener(ip, port);
server.Start();
Thread serverRunThread = new Thread(new ThreadStart(RunServer));
serverRunThread.Start();
}
void RunServer() {
while (true) {
TcpClient client = server.AcceptTcpClient();
Console.WriteLine("Client connected!");
Thread serverHandlerThread = new Thread(new ParameterizedThreadStart(HandleClient));
serverHandlerThread.Start(client);
}
}
void HandleClient(object c) {
TcpClient client = (TcpClient)c;
NetworkStream stream = client.GetStream();
int i;
string data = null;
byte[] bytes = new byte[256];
while((i = stream.Read(bytes, 0, bytes.Length)) != 0) {
data = Encoding.ASCII.GetString(bytes, 0, i);
Console.WriteLine("Received: " + data);
}
stream.Close();
client.Close();
}
}
}
Und hier ist Client.cs:
EDIT: Es gab ein Problem in Program.cs, while-Schleife festgelegt:
while (readLine == true) {
input = Console.ReadLine();
if (input == "server") {
Server server = new Server(IPAddress.Any, 12346);
readLine = false;
}
if (input == "client") {
Client client = new Client(IPAddress.Parse("10.0.0.5"), 12346);
readLine = false;
}
}
Jede Verbindung eine einzigartige Kombination aus folgenden haben muss: 1) Quell-IP-2) Ziel-IP-3) Portnummer. Wenn der Server und der Client sich auf demselben PC befinden, kann ein Fehler auftreten. Also folgendes tun: 1) Server hört auf IPAnyAddress mit Portnummer. 2) Der Client verbindet sich mit der IP-Adresse des Servers. IPAnyAddress behebt das Problem, da die IP-Adresse im Server nicht mit der des Clients identisch ist. – jdweng
Beachten Sie, dass Ihr Code nicht repariert ist - er hat immer noch eine unendliche While-Schleife, aber jetzt verschwendet er nur noch Ihre CPU-Ressourcen. – Evk
Ok jetzt sollte es behoben werden –