문제

좋아, 단순한 문제가 되길 바랍니다. 간단한 MORPG 게임 IM IM을위한 간단한 서버를 만들기 시작한 다음 클라이언트가 연결 된 다음 단순화, 간단하게 서버가 새 클라이언트를 잡지만 연결이 끊어지면 잡히지 않습니다. 무엇이 잘못 되었습니까?

나는 그것이 어리석게 분명한 것을 바라고 있습니다.

내 서버 코드는 다음과 같습니다.

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.Sockets;
using System.IO;
using System.Threading;

namespace ChaWilPeiBle
{
    public partial class MainForm : Form
    {
        public bool ServerON = false;
        public TcpListener ServerL;
        public int ServerLoad = 2;
        public string ServerINFtxt = "";
        public ASCIIEncoding AE = new ASCIIEncoding();

        public MainForm()
        {
            InitializeComponent();
        }

        private void LBL_SS_Click(object sender, EventArgs e)
        {

        }

        private void MainForm_Load(object sender, EventArgs e)
        {
            LBL_SS.ForeColor = Color.Red;
        }

        public void AddH(string S)
        {
            ServerINFtxt += S;
        }

        public void Server()
        {
            try
            {
                ServerL = new TcpListener(47);
                ServerL.Start();
                AddH("\nServer Started On Port 47");
            }
            catch(Exception e)
            {
                MessageBox.Show("Error starting Server.__________________\n"+e.ToString());
            }
            while (true)
            {
                TcpClient TCPC;
                TCPC = ServerL.AcceptTcpClient();
                if (ServerLoad < 100)
                {
                    Thread T = new Thread(HandleClient);
                    T.Start((object)TCPC);
                }
                else
                {
                    byte[] BYTES = AE.GetBytes("NoAccess:Full");
                    NetworkStream NS = TCPC.GetStream();
                    NS.Write(BYTES, 0, BYTES.Length);
                }
            }
        }

        public void HandleClient(object C)
        {
            ServerLoad++;
            TcpClient Client = (TcpClient)C;
            NetworkStream NS = Client.GetStream();
            AddH("Client Connected.\nServer Load: " + ServerLoad);
            Thread T = new Thread(ReadClient);
            T.Start(C);
            try
            {
                while (true) { NS.Write(AE.GetBytes(""), 0, AE.GetBytes("").Length); }
            }
            catch { }
            ServerLoad--;
            AddH("Client Disconnected.\nServer Load: " + ServerLoad);
        }

        public void ReadClient(object C)
        {
            //TcpClient Client = (TcpClient)C;
        }

        private void startStopToolStripMenuItem_Click(object sender, EventArgs e)
        {
                LBL_SS.Text = "Server On";
                LBL_SS.ForeColor = Color.Green;
                if (ServerON == false)
                {
                    Thread T = new Thread(Server);
                    T.Start();
                }
                ServerON = true;
        }

        private void Update_Tick(object sender, EventArgs e)
        {
            ServerINF.Text = ServerINFtxt;
            PB_SL.Value = ServerLoad;
        }
    }
}
도움이 되었습니까?

해결책

네트워크 스트림에서 읽기 위해 차단 호출을하고 읽은 길이로 0 바이트를 반환하면 클라이언트가 연결이 끊어 졌음을 의미합니다. 이 연결에 글을 쓰기 전까지는 예외가 없습니다. 그것이 무슨 일이 일어나고 있는지에 대한 나의 가장 좋은 추측입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top