Пожалуйста, прости меня за дубликат вопроса.Я знаю, что он задавался здесь много раз, но ни один из ответов не работал для меня, и ни один из сценариев не совпадает с моим, и на многие вопросы вообще нет ответов.
Я работалВ течение нескольких недель он работал над проектом для университета, но теперь ему было поручено заменить полное работающее приложение клиент-серверным (детали проекта не имеют значения).Я планирую создать консольное приложение, которое будет скрыто и будет действовать как сервер (в основном будет обрабатывать запросы SQL, которые будут выполняться в моей базе данных, затем создавать объекты на основе результатов этих запросов, сериализовывать их и отправлять их клиенту).Клиентское приложение - это приложение Windows Forms.
Я новичок в использовании сокетов (только начался с ними 3 дня назад, но я думаю, что я их хорошо понимаю - я могу воссоздать приложение чата клиент-сервер иззнания (и логика) без ссылки на код, который мне дали.)
Я провел много исследований, чтобы попытаться это исправить, но сейчас я попробовал все и надеюсь, что кто-то может мне помочь.
У меня проблема в том, что мой клиент не подключается к серверу.В моих «практических» приложениях у меня не было этой проблемы, и клиенту всегда удавалось соединиться.
Я пытался:
- Разрешение приложениям сервера (консоли) и клиента (форм) через брандмауэр
- Полное отключение брандмауэра
- Убедитесь, что сервер прослушивает правильный номер порта, указанный на клиентской стороне
- Я даже скопировал код (только часть сокетов) из своего проекта и создал новые серверные и клиентские приложения (которые работали полностьюотлично, точно такой же код, поставленный точно в том же месте, что и оригинал, отлично работал в новых "тестовых" приложениях, но не в моем проекте)
После попытки этого безуспешно, у меня естьпонял, что, скорее всего, проблема не в брандмауэре, и не может быть проблемы с номером порта, который я использовал, потому что в моем «тестовом» приложении работал точно такой же код с теми же номерами портов.
Iпопытался запустить netstat -anb согласно этому ответу: https://stackoverflow.com/a/9695442/9886482, и я нигде не вижу номер порта.
Несколько других ответов, которые яaw on stackoverflow не помог мне, так как большинство из них используют веб-службы или реальное серверное программное обеспечение, которое не имеет отношения к делу или не разрешено в моем случае.
Я попытался дать как можно больше информации, и вот мойкод.Любая помощь будет принята с благодарностью.
Код сервера:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using HelperLibrary;
using System.Net;
using System.Net.Sockets;
using System.Threading;
namespace Farmulator_PRG221_Project
{
class Program
{
static void Main(string[] args)
{
Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
serverSocket.Bind(new IPEndPoint(IPAddress.Loopback, port: 9000));
serverSocket.Listen(50);
Thread accepterThread = new Thread(new ParameterizedThreadStart(Accept));
accepterThread.Start(serverSocket);
}
static void Accept(object obj)
{
Socket serverSocket = (Socket)obj;
while (true)
{
Socket clientSocket = serverSocket.Accept();
Console.WriteLine("New client connected!");
}
}
Код клиента:
clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
clientSocket.Connect(new IPEndPoint(IPAddress.Loopback, port: 9000));