C#Socket编程时Accept()阻塞,如何解决?

在学习C#编程中,准备写一个窗口socket程序,服务器端接收数据,但是运行到Accept()后就卡住了,请大神指导一下

编程使用的VS2019

程序代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WinFormsApp2
{
    public partial class Form1 : Form
    {
        

        public Form1()
        {
            InitializeComponent();
        }
        
        private void Button1_Click(object sender, EventArgs e)
        {
            
            
                listBox1.Items.Clear();
                if (textBox1.Text == null && textBox2.Text == null)
                {
                    listBox1.Items.Clear();
                    listBox1.Items.Add("请输入IP和端口!");

                }
                else if (textBox1.Text == "192.168.1.3" && textBox2.Text == "52000")
                {
                    listBox1.Items.Clear();
                    listBox1.Items.Add("IP和端口已输入!");
                    listBox1.Items.Add(textBox1.Text);
                    listBox1.Items.Add(textBox2.Text);
                    int port = Convert.ToInt32(textBox2.Text);
                    string host = textBox1.Text;
                    //MessageBox.Show(host);
                    IPAddress ip = IPAddress.Parse(host);
                    IPEndPoint ipe = new IPEndPoint(ip, port);

                    Socket sSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                    sSocket.Bind(ipe);
                    sSocket.Listen(3);
                    listBox1.Items.Add("监听已经打开,请等待");

                    //receive message

                    Socket serverSocket = sSocket.Accept();
                    listBox1.Items.Add("连接已经建立");


                    string recStr = "";
                    byte[] recByte = new byte[4096];
                    while (true)
                    {
                        int bytes = serverSocket.Receive(recByte, recByte.Length, 0);
                        recStr += Encoding.ASCII.GetString(recByte, 0, bytes);

                        //send message
                        listBox1.Items.Add("服务器端获得信息:{0}" + recStr);
                        string sendStr = "send to client :hello";
                        byte[] sendByte = Encoding.ASCII.GetBytes(sendStr);
                        serverSocket.Send(sendByte, sendByte.Length, 0);
                        serverSocket.Close();
                        sSocket.Close();
                    }
                }
                listBox1.Items.Clear();
                listBox1.Items.Add("端口输入错误,请重新输入!");
            }
        }
    }

 

参考一下:https://blog.csdn.net/yijun494610095/article/details/55257787

希望对你有帮助,如有帮助,望采纳,谢谢

您的问题已经有小伙伴解答了,请点击【采纳】按钮,采纳帮您提供解决思路的答案,给回答的人一些鼓励哦~~

ps:开通问答VIP,享受5次/月 有问必答服务,了解详情↓↓↓

【电脑端】戳>>>  https://vip.csdn.net/askvip?utm_source=1146287632
【APP 】  戳>>>  https://mall.csdn.net/item/52471?utm_source=1146287632