3

ローカル ポートにデータ (文字列) を書き込むアプリケーションをリモート サーバーで実行しています。別のシステムで実行している別の C# アプリケーションでこのシステム ポートを読み取りたいのですが、リモート マシンのこのポートに接続するとエラーが発生します。ターゲット マシンがアクティブに接続を拒否したこと。

任意の提案をいただければ幸いです。

私はこのコードを試しました:

Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
var ipaddress = IPAddress.Parse("192.168.1.12");
IPAddress add = new IPAddress(ipaddress.GetAddressBytes());
EndPoint ep = new IPEndPoint(add, 7862);
sock.Connect(ep);

if (sock.Connected)
{
    byte[] bytes = new byte[256];
    int i = sock.Receive(bytes);
    Console.WriteLine(Encoding.UTF8.GetString(bytes));
}

ここで、192.168.1.12 はリモート システムの IP アドレスで、アプリケーションがポート 7862 に連続して文字列を書き込んでいます。C# アプリケーションを介してそのポートから値を読み取る必要があります。

4

1 に答える 1

1

私は少し前にそのようなプログラムを書いていました...私はそれをそのままコピーして貼り付けます。パケットが実際に通過するように、ファイアウォールとNATへの「ポート」を許可することを忘れないでください

    class Transmitter
{
    public Boolean Transmit(String ip ,String port, String data){
        TcpClient client = new TcpClient();
        int _port = 0;
        int.TryParse(port, out _port);
        IPEndPoint serverEndPoint = new IPEndPoint(IPAddress.Parse(ip), _port);
        client.Connect(serverEndPoint);
        NetworkStream clientStream = client.GetStream();
        ASCIIEncoding encoder = new ASCIIEncoding();
        byte[] buffer = encoder.GetBytes(data);
        clientStream.Write(buffer, 0, buffer.Length);
        clientStream.Flush();
        return true;
    }
}

class Listener
{

    private TcpListener tcpListener;
    private Thread listenThread;
    // Set the TcpListener on port 13000.
    Int32 port = 8081;
    IPAddress localAddr = IPAddress.Parse("192.168.1.3");
    Byte[] bytes = new Byte[256];
    MainWindow mainwind = null;
    public void Server(MainWindow wind)
    {
        mainwind = wind;
        this.tcpListener = new TcpListener(IPAddress.Any, port);
        this.listenThread = new Thread(new ThreadStart(ListenForClients));
        this.listenThread.Start();

    }
    private void ListenForClients()
    {

        this.tcpListener.Start();

        while (true)
        {
            //blocks until a client has connected to the server
            TcpClient client = this.tcpListener.AcceptTcpClient();

            //create a thread to handle communication 
            //with connected client
            Thread clientThread = new Thread(new ParameterizedThreadStart(HandleClientComm));
            clientThread.Start(client);
        }
    }
    private void HandleClientComm(object client)
    {
        TcpClient tcpClient = (TcpClient)client;
        NetworkStream clientStream = tcpClient.GetStream();

        byte[] message = new byte[4096];
        int bytesRead;

        while (true)
        {
            bytesRead = 0;

            try
            {
                //blocks until a client sends a message
                bytesRead = clientStream.Read(message, 0, 4096);
            }
            catch
            {
                //a socket error has occured
               // System.Windows.MessageBox.Show("socket");
                break;
            }

            if (bytesRead == 0)
            {
                //the client has disconnected from the server
               // System.Windows.MessageBox.Show("disc");
                break;
            }

            //message has successfully been received
            ASCIIEncoding encoder = new ASCIIEncoding();
            mainwind.setText(encoder.GetString(message, 0, bytesRead));
            //System.Windows.MessageBox.Show(encoder.GetString(message, 0, bytesRead));
           // System.Diagnostics.Debug.WriteLine(encoder.GetString(message, 0, bytesRead));
        }

        tcpClient.Close();
    }
}
于 2013-03-31T08:23:57.640 に答える