Ошибка связи с сокетом - PullRequest
0 голосов
/ 28 июля 2011

Я делаю небольшую программу для связи через сокет в C #.Вот мои коды: Клиент (отправитель данных):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;

namespace Client
{
class Program
{
    static Socket sck; //vytvor socket
    static void Main(string[] args)
    {
        sck = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 1234); //nastav premennú loacalEndPoint na lokálnu ip a port 1234
        try  //Skús sa
        {
            sck.Connect(localEndPoint); // pripojiť

        }
        catch { //ak sa to nepodarí
            Console.Write("Unable to connect to remote ip end point \r\n"); //vypíš chybovú hlášku
            Main(args);
        }

        Console.Write("Enter text: ");
        string text = Console.ReadLine();
        byte[] data = Encoding.ASCII.GetBytes(text);
        sck.Send(data);
        Console.Write("Data sent!\r\n");
        Console.Write("Press any key to continue...");
        Console.Read();
        sck.Close();
    }
}
}

Сервер (приемник данных):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;


namespace Server
{
class Program
{
    static byte[] Buffer { get; set; } //vytvor Buffer
    static Socket sck;

    static void Main(string[] args)
    {
        sck = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //vytvor Socket
        sck.Bind(new IPEndPoint(0, 1234));
        sck.Listen(80);
        Socket accepted = sck.Accept();
        Buffer = new byte[accepted.SendBufferSize];
        int bytesRead = accepted.Receive(Buffer);
        byte[] formatted = new byte[bytesRead]; //vytvor novú Array a jej dĺžka bude dĺžka priatých infomácii
        for(int i=0; i<bytesRead;i++){
            formatted[i] = Buffer[i]; //načítaj z Buffer do formatted všetky priate Bajty

        }
        string strData = Encoding.ASCII.GetString(formatted); //z ASCII hodnôt urob reťazec
        Console.Write(strData + "\r\n"); //vypíš data
        sck.Close(); //ukonči spojenie


    }
}

} Моя проблема: В клиентской программе я отправляю данные напорт 1234 на локальный ip.Но я не могу подключиться.Я попробовал порт 80, и он подключился.Так, пожалуйста, где моя проблема?Как я могу подключиться к каждому порту?Пожалуйста, игнорируйте комментарии в коде и помогите мне.

Ответы [ 2 ]

1 голос
/ 28 июля 2011

на каком ip слушает сервер?вы проверили с помощью netstat -an |НАЙТИ "СЛУШАТЬ" |НАЙТИ "1234"?(Примечание: замените listen на свое языковое представление ...).

0 может быть не 127.0.0.1, а первым назначенным IP-адресом первого NIC ... (хотя 0 должен прослушивать все интерфейсы... но увы ...

Я бы всегда использовал IP-адреса как на клиенте, так и на сервере

hth

Mario

1 голос
/ 28 июля 2011

Вы слушаете порт 80, это порт, к которому должна подключиться ваша клиентская программа.«1234» - это ЛОКАЛЬНЫЙ порт, к которому привязан сервер.На этом порту ничего не слушается.

...