简体   繁体   English

服务器接受更多客户端TCP C#

[英]Server accepting more clients TCP C#

I'm trying to get a TCP server to connect with "multiple" TCP clients. 我正在尝试使TCP服务器与“多个” TCP客户端连接。

My project is basically 2 applications, which is designed like a 3 tier model. 我的项目基本上是2个应用程序,其设计类似于3层模型。 In the data tier for each applications i want a socket connection, so i can send data(string values) from one application to the other. 在每个应用程序的数据层中,我需要一个套接字连接,因此我可以将数据(字符串值)从一个应用程序发送到另一个应用程序。 As i have multiple methods in my logic tier that i want to send with my socket connection (same client basically), i have a problem with my TCP server - that it only accepts one TCP client (for some reason i don't know). 因为我在逻辑层中想通过套接字连接(基本上是相同的客户端)发送多种方法,所以我的TCP服务器存在问题-它仅接受一个TCP客户端(出于某种原因,我不知道) 。

Do I need some kind of loop, so my server does'nt close the connection? 我是否需要某种循环,所以我的服务器不会关闭连接?

I'm pretty new to TCP programming, so I will be very happy to get some help to get going with my project. 我对TCP编程非常陌生,因此我很高兴获得一些帮助来进行我的项目。

This is my code for my TCP client: 这是我的TCP客户端的代码:

public class Tx_Data
{
    const int PORT = 9000;

    private TcpClient clientSocket;

    public Tx_Data()
    {
        Console.WriteLine("Client startet");
        clientSocket = new TcpClient();
        clientSocket.Connect("192.168.122.169", 9000);
        Console.WriteLine("Forbindelse oprettet");
    }

    public void sendDataTCP(string puls, string QT, string QTc)
    {
        NetworkStream outToServer = clientSocket.GetStream();
        string line = "Puls: " + puls + ", QT: " + QT + ", QTc: "+ QTc;
        LIB.writeTextTCP(outToServer, line);
        outToServer.Flush();
    }

}

When i call the sendDataTCP method in one of my Logic Tier methods it looks like this: 当我在我的逻辑层方法之一中调用sendDataTCP方法时,它看起来像这样:

  public void sendData()
    {
        Tx_Data tD = new Tx_Data();
        string puls = beregnPuls().ToString();
        string QT = beregn_QT().ToString();
        string QTc = beregn_QTC().ToString();
        tD.sendDataTCP(puls,QT,QTc);
    }

My TCP server that recieve the data looks like this atm: 我的接收数据的TCP服务器看起来像这样的atm:

  public class Rx_Alarm
{

    const int PORT = 9000;

    public Rx_Alarm()
    {
        TcpListener serverSocket = new TcpListener(IPAddress.Any, 9000);
        TcpClient clientSocket = default(TcpClient);
        serverSocket.Start();
        clientSocket = serverSocket.AcceptTcpClient();
        Console.WriteLine(">> Accept connection from client");


        NetworkStream io = clientSocket.GetStream();
        Console.WriteLine(LIB.readTextTCP(io));
    }
}

I don't know about TCPListeners, but in good old fashion socket programming. 我不了解TCPListeners,但使用老式的套接字编程。 You can create server code and tell it how many clients to listen to 您可以创建服务器代码并告诉它要听多少个客户端

enter code here

var socListener = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
    var ipLocal = new IPEndPoint ( IPAddress.Any ,##Port Number##);
    //bind to local IP Address...
    socListener.Bind( ipLocal );
    //start listening...
    socListener.Listen (4); // where 4 is the number of clients to listen simultaneously
    // create the call back for any client connections...
    socListener.BeginAccept(new AsyncCallback ( OnClientConnect ),null);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM