Я только что просмотрел учебник YouTube по серверам и клиентам tcpip и использовал код из него: https://www.youtube.com/watch?v=uXFso7xSSWk как часть 1, так и часть 2. Я дважды переделал код и убедился, что все одинаково , Всякий раз, когда я запускаю сервер, я получаю сообщение об ошибке «SocketException был необработанным» в строке «tcpListener.Start();
» следующим способом.C# SocketException был необработанным
private void TcpServerRun()
{
TcpListener tcpListener = new TcpListener(IPAddress.Any, 5004);
tcpListener.Start();
updateUI("Listening");
while (true)
{
TcpClient client = tcpListener.AcceptTcpClient();
updateUI("Connected");
Thread tcpHandlerThread = new Thread (new ParameterizedThreadStart(tcpHandler));
tcpHandlerThread.Start(client);
}
}
я получаю ту же ошибку, когда я запускаю клиента, но он находится на линии «client.Connect(IPAddress.Parse("10.3.29.252"), 5004);
» в следующем методе:
private void ConnectAsClient()
{
TcpClient client = new TcpClient();
client.Connect(IPAddress.Parse("10.3.29.252"), 5004);
NetworkStream stream = client.GetStream();
string s = "Hello from client";
byte[] message = Encoding.ASCII.GetBytes(s);
stream.Write(message, 0, message.Length);
updateUI("Message send");
stream.Close();
client.Close();
}
Любые и вся помощь очень ценится. Я довольно новичок в кодировании и очень новичок в C#, поэтому я прошу прощения за все, что может быть неясно.
Вот весь код сервера:
namespace TcpServerTutorial
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void bStartServer_Click(object sender, EventArgs e)
{
Thread tcpServerRunThread = new Thread(new ThreadStart(TcpServerRun));
tcpServerRunThread.Start();
TcpServerRun();
}
private void TcpServerRun()
{
TcpListener tcpListener = new TcpListener(IPAddress.Any, 5004);
tcpListener.Start();
updateUI("Listening");
TcpClient client = tcpListener.AcceptTcpClient();
while (true)
{
TcpClient client = tcpListener.AcceptTcpClient();
updateUI("Connected");
Thread tcpHandlerThread = new Thread (new ParameterizedThreadStart(tcpHandler));
tcpHandlerThread.Start(client);
}
}
private void tcpHandler(object client)
{
TcpClient mClient = (TcpClient)client;
NetworkStream stream = mClient.GetStream();
byte[] message = new byte[1024];
stream.Read(message, 0, message.Length);
updateUI("New Message = " + Encoding.ASCII.GetString(message));
stream.Close();
mClient.Close();
}
private void updateUI(string s)
{
Func<int> del = delegate()
{
textBox1.AppendText(s + System.Environment.NewLine);
return 0;
};
Invoke(del);
}
}
}
первый мысль - это тот адрес не достижим. если вы попытаетесь поймать и проверить внутреннее исключение, вы можете получить дополнительную информацию. –
SocketException.ErrorCode должен дать вам более подробную информацию о том, какую ошибку вы получаете. Есть ли вероятность, что используемая вами машина-разработчик имеет брандмауэр, блокирующий неожиданные исходящие соединения? –
, когда я помещаю 'tcpListener.Start();' в попытке поймать это, кажется, передает эту точку, но затем я получаю «недопустимое исключение операции» в «TcpClient client = tcpListener.AcceptTcpClient();» –