【问题标题】:How to make TCP Client accepts hosts如何使 TCP 客户端接受主机
【发布时间】:2013-09-27 08:06:29
【问题描述】:

我的 TCP 客户端应该:

  1. 接受主机、端口和文本字符串。
  2. 连接到主机/端口并在您单击按钮时发送字符串(+ 两个换行符 \r\n\r\n )。
  3. 然后读取结果并将结果放回文本框中。

问题是我得到了 port 和 string 的结果,但我没有得到任何关于主机的信息。

这是我目前得到的:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Net;
    using System.IO;
    using System.Net.Sockets;


   namespace TCP_Client
   {
public partial class Form1 : Form
{

    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {

        string port = port1.Text;
        int myParsedInt = Int32.Parse(port);
        System.Net.IPAddress[] adresslist = Dns.GetHostAddresses(host1.Text);

        Socket connectSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        connectSocket.Connect(adresslist[0], myParsedInt);
        System.IO.StreamReader connectionRead = new System.IO.StreamReader(new NetworkStream(connectSocket));

        connectSocket.Send(System.Text.Encoding.UTF8.GetBytes(sendText.Text + "\r\n"));
        while (connectionRead.Peek() >= 0)
        {
            this.textOutput.AppendText(connectionRead.ReadLine() + "\r\n");
        }

        connectSocket.Close();
    }

    private void textOutput_TextChanged(object sender, EventArgs e)
    {

    }

    private void host1_TextChanged(object sender, EventArgs e)
    {

    }

    private void port1_TextChanged(object sender, EventArgs e)
    {

    }

    private void sendText_TextChanged(object sender, EventArgs e)
    {

    }
}
}

【问题讨论】:

  • 您应该在哪里看到有关主机的信息?也许你应该向我们展示服务器代码。
  • 它应该转到 sendText.Text
  • 那么,您正在尝试接收您发送的文本吗?

标签: c# tcp


【解决方案1】:

您尝试过TcpClient 课程吗?

除非您需要低级套接字 IO,否则您可能会发现这个类更容易处理(当然对于您这里的用例来说更容易)。

在 TcpClient 上,构造函数(或 Connect)可以接受主机名,并且有一些方法可以访问 NetworkStreams(入站和出站)

该链接中的 MSDN 示例或多或少地包含了您正在尝试执行的操作。

编辑: 您能否更明确地说明到底出了什么问题?是 DNS 解析失败,还是您获得了有效的 IP?

您的服务器是否看到流量?您是否尝试在发送文本后调用 Shutdown(SocketShutdown.Send)?

【讨论】:

  • 我正在使用低级套接字 IO。我不允许在这个作业中使用 TcpClient 类
  • 显示结果需要超过 2 分钟。结果通常是这样的:客户端。
    Apache/2.2.16 (Debian) Server at new.utm.edu Port 80
猜你喜欢
  • 2014-04-07
  • 2012-11-16
  • 1970-01-01
  • 2013-02-17
  • 1970-01-01
  • 2015-02-14
  • 2013-01-24
  • 2016-10-05
  • 1970-01-01
相关资源
最近更新 更多