通过C#中的网络将字符串从1个程序传输到另一个程序

时间:2013-12-12 19:50:27

标签: c# network-programming

简单的概念。我在计算机A上有一个字符串,我想把它移到计算机B,怎么做,为什么它如此复杂:)

我正在设置一个程序,我需要在不同节点需要通信的多台PC上运行。需要发送的是文本字符串(已序列化为字符串的命令对象)。其中一些节点可能是防火墙后面的“客户端”,那么它们如何启动双向通信,以便一旦连接就能收回信息?

我的期望是在转会部分之外看到你有一个入口点和一个取件点。以下是我如何看待伪代码,但我根本不了解网络编码,以弄清楚它是如何实现正确的。到目前为止,我的搜索给我留下了代码我不明白是什么,或背后的想法。 (见代码后的问题)

public void SendCommand(String commandObject, String targetService)
{
    <lookup service address>
    <connect to address>  || <connect to address if not already connected>
    <send string>
    <close connection>  || <keep connection open>
}

public List<String> GetCommands()
{
    <Grab Mutex on Outbox>
        <Copy Outbox to tmpList>
        <empty Outbox List>
    <release Mutex>
    <return tmpList>
}

???如何处理这个

    <accept connection>
    <receive string and move it to local buffer List<String> DropOff>
    <get mutex via (waitOne(0)) for access to List<String> Outbox
        <move DropOff entries to Outbox>
        <empty DropOff>
    <release Mutex>

我的理解失败了。

*我不明白网络代码的接收部分是如何进入的,并以不会冒多线程问题的方式进入“DropOff”(因此在此代码中DropOff和Outbox的想法是这已经处理好了吗?)

*我不明白如何设置客户端以某种方式连接到此网络层,以便双向通信可以发生。 (这里我理解它的两台计算机都有一个监听器和一种发送给其他发送方的方法,但是如果客户端计算机上的监听器在防火墙后面,那么一旦两台计算机之间的连接发生了,我该如何发送回复并设置这个监听器成立了?)

我相信这些问题之前已被问过很多次,但我根本不理解这一点,知道要搜索什么来获得所需的理解。如果您可以指导我这一点,并且如果我对伪代码设置的理解是错误的,也可以帮助我理解。

1 个答案:

答案 0 :(得分:1)

MSDN有一个很好的部分可以审核TcpClient课程。这是我用来传达简单字符串的方法。

基本概念代码:

TcpClient tcpClient = new TcpClient();
tcpClient.Connect(server, port);
Stream stream = tcpClient.GetStream();

//Send a Carriage Return
byte[] CR = Encoding.ASCII.GetBytes("\r\n");
stream.Write(CR, 0, CR.Length);

stream.Close();
tcpClient.Close();

该代码会在ServerPort发送回车。非常简单的例子,但提供的链接有更大的深度。

第2部分:评论

// Create a TcpClient. 
TcpClient client = new TcpClient(server, port);

// Get a client stream for reading and writing. 
NetworkStream stream = client.GetStream();

// Read the message to the connected TcpServer.
Byte[] data = new Byte[5];
List<byte> dataBytes = new List<byte>();
stream.Read(data, 0, data.Length);

// Receive the Stream and Convert to Hex
foreach (byte a in data)
{
    dataBytes.Add(a);
}
string hexDatabytes = BitConverter.ToString(dataBytes.ToArray());
Console.WriteLine("Received: {0}", hexDatabytes);

这是我从过去完成的一些旧东西中抓取的一些代码。