伍华 2021-05-30 09:50 采纳率: 0%
浏览 543

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("端口输入错误,请重新输入!");
            }
        }
    }

 

  • 写回答

2条回答 默认 最新

  • CSDN专家-黄老师 2021-05-30 12:40
    关注

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

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

    评论

报告相同问题?

悬赏问题

  • ¥15 上传图片时提交的存储类型
  • ¥15 Ubuntu开机显示器只显示kernel,是没操作系统(相关搜索:显卡驱动)
  • ¥15 VB.NET如何绘制倾斜的椭圆
  • ¥15 在rhel8中安装qemu-kvm时遇到“cannot initialize crypto:unable to initialize gcrypt“报错”
  • ¥15 arbotix没有/cmd_vel话题
  • ¥15 paddle库安装时报错提示需要安装common、dual等库,安装了上面的库以后还是显示报错未安装,要怎么办呀?
  • ¥20 找能定制Python脚本的
  • ¥15 odoo17的分包重新供应路线如何设置?可从销售订单中实时直接触发采购订单或相关单据
  • ¥15 用C语言怎么判断字符串的输入是否符合设定?
  • ¥15 通信专业本科生论文选这两个哪个方向好研究呀