繁体   English   中英

使用套接字多次使用C发送和接收TCP(C#)

[英]Sending and recieving with TCP, using a socket more than once (C#)

编辑:原来我两次使用相同的端口。 不过,任何人都可以将其留在这里,像htis这样的线程过去曾帮助过我。

我目前正在一个项目中,在服务器和客户端上都有一个高分列表,这两个文件夹同步数据,并保存为XML。 我的所有工作都差不多,但是我不断收到异常“ System.Net.Sockets.SocketException:每个套接字地址只有一种用法”,我不知道该如何摆脱它。 对我来说,代码看起来不错,因为我在Update前关闭了TcpClient ,然后再转到Recieve 谁能发现我所缺少的内容,或者向我解释我做错了什么? 我是新手,所以解释中的一些实际代码会很有帮助!

static void Main(string[] args)
    {
        Update();
        Recieve();

    }

服务器发送给客户端:

public static void Update()
    {
        List<string> stringList = new List<string>();
        XmlDocument highScore = new XmlDocument();
        highScore.Load("hs.xml");
        for (int i = 0; i < 5; i++)
        {
            int placering = i + 1;
            stringList.Add(highScore.SelectSingleNode("highScores/score" + (placering)).InnerText);

        }
        string toSend = stringList[0] + stringList[1] + stringList[2] + stringList[3] + stringList[4];

        string adress = "127.0.0.1";
        int port = 82;
        TcpClient tcpClient = new TcpClient();

        tcpClient.Connect(adress, port);
        NetworkStream stream = tcpClient.GetStream();

        Byte[] bSend = Encoding.ASCII.GetBytes(toSend);
        NetworkStream tcpStream = tcpClient.GetStream();
        tcpStream.Write(bSend, 0, bSend.Length);
        tcpClient.Close();
    }

服务器从客户端接收:

public static void Recieve()
    {
        //skapa ett TcpListener objekt
        IPAddress myIp = IPAddress.Parse("127.0.0.1");
        TcpListener tcpListener;
        int port = 82;


        tcpListener = new TcpListener(myIp, port);
        tcpListener.Start();   //Throws the exception
        Socket socket = tcpListener.AcceptSocket();

        int messageSize;
        Byte[] bMessage = new Byte[256];


        while (true)
        {
            try
            {
                messageSize = socket.Receive(bMessage);
                break;
            }
            catch { }
        }

        //konvertera till string och skriv ut
        string message = "";
        for (int i = 0; i < messageSize; i++)
        {
            message += Convert.ToChar(bMessage[i]);
        }

        for (int i = 0; i < 5; i++)
        {
            SaveScore(int.Parse(message[i].ToString()), i + 1);
        }

        socket.Close();
    }

两种方法都在与游戏分开的解决方案中的同一Program.cs中。

您还应该在Receive方法中停止TcpListener,是否有可能在上一次运行应用程序时仍处于打开状态?

事实证明,这是那些简单的事情之一,在基本上重写了方法之后,我发现从其他项目中复制粘贴后,发送和接收的方法都使用了端口82。是的。 感谢那些试图帮助我的人

暂无
暂无

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

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