Проблемы при создании клиента и сервера. [C#]
От: Requiem  
Дата: 24.01.07 10:37
Оценка:
Собственно это мой первый опыт написания сетевого кода и проблема с которой я сталкнулся поставила меня в тупик.
Сервер:

static void Main(string[] args)
{
...
        cO.Out("SERVER MyServer [v0.1]: active.");
    byte[] data = new byte[1024];
    IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 9050);
    UdpClient newsock = new UdpClient(ipep);
    cO.Out("Waiting for a client...");
    IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
    data = newsock.Receive(ref sender);
    cO.Out("Message received from: " + sender.ToString());
    cO.Out(Encoding.ASCII.GetString(data, 0, data.Length));
    // Ответ клиенту.
    string welcome = "Welcome on Server: MyServer [v0.1].";
    data = Encoding.ASCII.GetBytes(welcome);
    newsock.Send(data, data.Length, sender);
    // Прием сообщенрия от клиента
    data = newsock.Receive(ref sender);
    int test = BitConverter.ToInt32(data, 0);
    cO.Out("Client 1: " + test.ToString());
    newsock.Close();
    cO.Out("Stopping server.");
    Console.ReadLine();
}

Клиент:

...
public class cForm1 : System.Windows.Forms.Form
{
        private UdpClient server = new UdpClient("127.0.0.1", 9050);
    private IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
...
        // Обработчик нажатия кнопки Connect
    private void button1_Click(object sender, System.EventArgs e)
    {
                // Сообщение серверу: "Client 1 has connected."
        string welcome = "Client 1 has connected.";
        data = Encoding.ASCII.GetBytes(welcome);
        server.Send(data, data.Length);

        // Получения сообщения от сервера и вывод в консоль
        data = new byte[1024];
        data = server.Receive(ref this.sender);
        cO.Out("Message received from: " + this.sender.ToString());
        cO.Out(Encoding.ASCII.GetString(data, 0, data.Length));
        }

        // Обработчик нажатия кнопки Send
    private void button2_Click(object sender, System.EventArgs e)
    {

               // Отправка на сервер содержимого textBox1
        data = BitConverter.GetBytes(Convert.ToInt32(this.textBox1.Text));
        server.Send(data, data.Length);

        cO.Out("Stopping client");
        server.Close();
    }
}

В данном случае все работает как часы.
Но стоит изменить в клиенте private UdpClient server = new UdpClient("127.0.0.1", 9050);
на private UdpClient server = new UdpClient();
и в обработчик кн. Connect добавить

        try
    {
        server.Connect("Допустим_мой_IP_адрес", 9050);
                ...
        }
        catch (Exception a)
    {
        cO.Out(a.ToString());
    }

при попытке присоедениться к серверу получаю следущее:
[13:6:20] System.Net.Sockets.SocketException: Удаленный хост принудительно разорвал существующее подключение
at System.Net.Sockets.Socket.ReceiveFrom(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags, EndPoint& remoteEP)
at System.Net.Sockets.UdpClient.Receive(IPEndPoint& remoteEP)
at Client.cForm1.button1_Click(Object sender, EventArgs e) in c:\...\...\...\visual studio projects\...\client v0.1\cform1.cs:line 123

Примечания:
1)Вместо "..." указан путь до проэкта.
2)line 123 : data = server.Receive(ref this.sender);
3)cO.Out() <- Функция мною созданного класса, изпользую для логирования консоли.
Вопрос: почему при подключении через лок. хост все работает, а при указании внешнего IP нет?
Заранее благодарен за любую помощь.
Just think...
Re: Проблемы при создании клиента и сервера. [C#]
От: Requiem  
Дата: 25.01.07 09:15
Оценка:
up
Just think...
Re[2]: Проблемы при создании клиента и сервера. [C#]
От: Vercors  
Дата: 26.01.07 14:43
Оценка:
http://www.java2s.com/Code/CSharp/Network/Udp-Client.htm
Проблемы при создании клиента и сервера. [C#]
От: Аноним  
Дата: 25.01.07 13:26
Оценка:
server.Connect("Допустим_мой_IP_адрес", 9050);

А ты sender"у IP прописал или так IPAddress.Any и остался?
И вообще — зачем ты два сокета создаёшь, а не через один и тот же не передаёшь/принимаешь?


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re: Проблемы при создании клиента и сервера. [C#]
От: Requiem  
Дата: 22.02.07 21:04
Оценка:
нет, в данном примере так и оставил Any...
в данный момент проблему решил, тема закрыта.
Just think...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.