C#中的TCP端口读取

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#应用程序从该端口读取值。


你试过 Telnet 吗?看看当你 telnet 到远程端口时会发生什么。在提问之前,你应该先尝试一下 :) - Jeremy
我认为这是不可能的。这看起来不安全,你要么需要配置许多权限,要么需要改变架构以公开API,与当前的远程查询方法相比。 - oleksii
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();
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接