C# 网络中的奇怪行为

C# 网络中的奇怪行为,c#,networking,xna,network-programming,C#,Networking,Xna,Network Programming,这是我的代码,用于向网络上的计算机发送字符串。在类外部需要时调用Update方法。当我创建一个实例时,一切都很好,直到我按Enter键,它应该在控制台上写“Hello”,但什么也没发生。另一个问题是,当我创建该类的第二个实例时,代码被卡在Console.WriteLine(localIp)行中,在该行中什么也没有发生。为什么会发生这种情况?我如何解决它?如果您一直在向控制台写入内容,则不会出现网络问题。但很难相信。最近有没有键入control+Q?@EJP被困在控制台上写东西不应该是一个网络问题

这是我的代码,用于向网络上的计算机发送字符串。在类外部需要时调用Update方法。当我创建一个实例时,一切都很好,直到我按Enter键,它应该在控制台上写“Hello”,但什么也没发生。另一个问题是,当我创建该类的第二个实例时,代码被卡在
Console.WriteLine(localIp)
行中,在该行中什么也没有发生。为什么会发生这种情况?我如何解决它?

如果您一直在向控制台写入内容,则不会出现网络问题。但很难相信。最近有没有键入control+Q?@EJP被困在控制台上写东西不应该是一个网络问题,但第一个问题显然是,我没有键入ctrl+Q。这是怎么回事?顺便说一句,我尝试在不同的计算机上运行代码。如果有用的话,每次都会发生同样的事情。
public class MultiplayerState : IState
{
    Game1 game;
    Socket sck;
    EndPoint epLocal, epRemote;
    SpriteFont font;
    string localIp, remoteIp = "192.168.137.2";
    int localPort = 80, remotePort = 80;

    public MultiplayerState(Game1 game)
    {
        this.game = game;
        sck = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
        sck.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
        localIp = GetLocalIP();
        remoteIp = localIp;
        Console.WriteLine(localIp);
        connect();
        sendMessage("Hello");
    }

    private string GetLocalIP()
    {
        IPHostEntry host = Dns.GetHostEntry(Dns.GetHostName());
        foreach (IPAddress ip in host.AddressList)
        {
            if (ip.AddressFamily == AddressFamily.InterNetwork)
                return ip.ToString();
        }
        return "127.0.0.1";
    }

    void connect()
    {

        epLocal = new IPEndPoint(IPAddress.Parse(localIp), localPort);
        sck.Bind(epLocal);

        epRemote = new IPEndPoint(IPAddress.Parse(remoteIp), remotePort);
        sck.Connect(epRemote);

        byte[] buffer = new byte[1500];
        sck.BeginReceiveFrom(buffer, 0, buffer.Length, SocketFlags.None, ref epRemote, new AsyncCallback(MessageCallBack), buffer);

        Console.WriteLine("Connected to " + remoteIp);
    }


    void sendMessage(string str)
    {
        System.Text.ASCIIEncoding enc = new ASCIIEncoding();
        byte[] msg = new byte[8000];
        msg = enc.GetBytes(str);

        sck.Send(msg);

    }

    void MessageCallBack(IAsyncResult aResult)
    {
        Console.WriteLine("Message received");
        byte[] buffer = new byte[1500];
        int size = 0;


        size = sck.EndReceiveFrom(aResult, ref epRemote);


        if (size > 0)
        {
            byte[] receivedData = new Byte[1464];
            receivedData = (byte[])aResult.AsyncState;

            ASCIIEncoding eEncpding = new ASCIIEncoding();
            string receivedMessage = eEncpding.GetString(receivedData);
            Console.WriteLine("received message:" + receivedMessage);
        }


        sck.BeginReceiveFrom(buffer, 0, buffer.Length, SocketFlags.None, ref epRemote, new AsyncCallback(MessageCallBack), buffer);
    }

    public void Update(GameTime gameTime)
    {
        if (Keyboard.GetState().IsKeyDown(Keys.Escape))
        {
            sck.Close();
            game.gameState = new MenuState(game);
        }
        if (Keyboard.GetState().IsKeyDown(Keys.Enter))
            sendMessage("Hello");

    }
}