C# TCP连接失败

C# TCP连接失败,c#,.net,sockets,tcp,C#,.net,Sockets,Tcp,我厌倦了找出我的代码有什么问题。。。请帮帮我 我正在尝试在LAN中的服务器和客户端之间创建TCP连接。发生的情况是,当客户端尝试连接时,程序崩溃。 请参阅代码: public void Go() { if (whatjob == true) { IPEndPoint server_ipEndPoint = new IPEndPoint(IPAddress.Any, PortNum);

我厌倦了找出我的代码有什么问题。。。请帮帮我

我正在尝试在LAN中的服务器和客户端之间创建TCP连接。发生的情况是,当客户端尝试连接时,程序崩溃。 请参阅代码:

public void Go()
        {
            if (whatjob == true)
            {
                IPEndPoint server_ipEndPoint = new IPEndPoint(IPAddress.Any, PortNum);
                server_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                server_socket.Bind(server_ipEndPoint);
                try
                {

                    server_socket.Listen(1);
                    server_GotClient = server_socket.Accept();
                }
                catch (SocketException e)
                {
                    MessageBox.Show("Unable to listen...");
                    MessageBox.Show(e.ToString());
                }


                reading = new Thread(new ThreadStart(this.get_msg));
                reading.Start();
            }

            if (whatjob == false)
            {
                IPEndPoint client_ipEndPoint = new IPEndPoint(IPAddress.Parse(IpAddress), PortNum);
                client_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                try
                {
                    client_socket.Blocking = true;
                    client_socket.Connect(client_ipEndPoint); //here it stops execution
                    //client_socket.BeginConnect(client_ipEndPoint, new AsyncCallback(NowConnected), client_socket);
                }
                catch (SocketException e)
                {
                    MessageBox.Show("Unable to connect...");
                    MessageBox.Show(e.ToString());
                    return;
                }
                reading = new Thread(new ThreadStart(this.get_msg));
                reading.Start();
            }
什么工作是布尔。。。true表示执行服务器作业,false表示执行客户端作业

此功能位于聊天窗口的windows窗体内。当它到达client_socket.connect(ipendpoint)时,它崩溃了,甚至聊天窗口也变形了

线程化函数

public void get_msg()
        {
            byte[] byte_message = new byte[1000];
            string string_message = null;
            int x = 0;
            while (true)
            {
                if (server_GotClient != null)
                {
                    x = server_GotClient.Receive(byte_message);
                }
                if (client_socket != null)
                {
                    x = client_socket.Receive(byte_message);
                }

                if (x != 0)
                {
                    string_message = Encoding.ASCII.GetString(byte_message);
                    this.richTextBox_GetMessage.Invoke(new MethodInvoker(delegate
                    {
                        richTextBox_GetMessage.Text = richTextBox_GetMessage.Text + "\nFriend: " + string_message;

                    }));
                }
                x = 0;
            }
            server_socket.Close();
        }
有关此代码,请提供帮助。
更进一步地说,我不了解异步技术,请帮助我了解一些简单的方法。

了解完整的错误消息会有所帮助

从您展示的内容来看,我的想法是抛出的异常不是SocketException。Socket.Connect的MSDN文档显示它可以抛出四个异常中的任何一个,包括SocketException

我会将catch中的异常类型更改为一个异常,并在开始括号中设置断点。下一次失败时,你将确切地知道出了什么问题,你可以从那里抓住并处理它

另外,我注意到,虽然您的客户机作业在连接错误时返回此方法,但服务器作业不会返回;捕获异常,显示消息,然后继续执行
reading=new Thread(new ThreadStart(this.get_msg))。这可能会导致抛出您不期望的其他异常。除非你确定客户工作流程在这里失败,否则我会注意这个方法的另一面


关于多线程的帮助,有很多资源,包括其他问题,可以帮助您入门。目前还不清楚您想要多线程处理什么,以及您需要如何控制它,因此我试图给出的任何答案都可能有错误,这可能会让您更加沮丧,因为这不是正确的方法。

谢谢,您的建议非常有帮助。我发现这不是真正的连接的东西造成的问题。。。但这是线。。。实际上,我正在表单加载时生成的事件中运行此函数。我想,我需要找到一些其他的方法来运行这个函数。。。你有什么想法吗?基本上,你应该重构事件处理程序,把所有繁重的工作放在一个方法中。然后,将该方法赋予将从处理程序启动的线程构造;有一个线程对象,ThreadPool,Delegate.BeginInvoke,BackgroundWorker组件等等。正如我所说,有很多方法可以设置它,其中一种可能是“最好的”。我完成了连接,我发现了错误。。。但是客户端的窗口仍然变形……,让我编辑这个问题,然后查看另一个线程化的函数,你是否看到了一些错误?@Jasim:与其留下“请…”的评论,不如每个问题问1个问题,并从中学习,以提供更好的信息。