帮忙看看进程问题-----------------------------?

kangbo818 kangbo818 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
1.为什么窗口关闭后,进程还在



用了很多方法如Application.Exit()和Application.ExitThread()都不行

2.Form类中定义一个类MyTCPServer,无法使用Form中得Listbox,说是不在进程中创建的Listbox,
怎么把这句话 Console.WriteLine("正在监听...") ;写在Listbox中

怎么实现,新手,写下代码。


代码如下:

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

namespace TcpService
{
public partial class Form1 : Form
{
public delegate void SetThreadState(int nClientID);
public static int nCountRecv = 0;
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{

}


/////////////////////////////////////////////////////////////////////////////
/// <summary>
/// socket服务器类,负责监听以及连接
/// </summary>
public class MyTCPServer
{
private int nListenPort = 4000;
private int nMaxClient = 500; //同时连接500个客户端
private TcpListener tlTcpListen;
private bool bIsListen = true;
private Thread thAccept;
MySocketProv[] RunSocketInfo;
bool[] ThreadRun;

public void DoStartIT()
{
try
{
RunSocketInfo = new MySocketProv[nMaxClient]; //500个客户端数组
ThreadRun = new bool[nMaxClient]; //500个客户端状态数组

for (int i = 0; i < nMaxClient; i++)
{
ThreadRun[i] = false;
RunSocketInfo[i] = new MySocketProv();
RunSocketInfo[i].ThreadState = SetExitThread;
}

tlTcpListen = new TcpListener(nListenPort); //以20812端口号来初始化TcpListener实例
tlTcpListen.Start(); //开始监听网络的连接请求
Console.WriteLine("正在监听...");


thAccept = new Thread(AcceptThread);
thAccept.Start();


}
catch (System.Security.SecurityException)
{
Console.WriteLine("侦听失败!错误");
Console.ReadLine();
}

}

public void DoExitIT()
{
bIsListen = false;
thAccept.Abort();
tlTcpListen.Stop();

for (int i = 0; i < nMaxClient; i++)
{
if (ThreadRun[i])
{
RunSocketInfo[i].ExitThread();
}
}
}

/// <summary>
/// 获取当前空的 ID
/// </summary>
/// <returns></returns>
private int GetEmptySocket()
{
int i = 0;
for (i = 0; i < nMaxClient; i++)
{
if (ThreadRun[i] == false)
{
break;
}
}

if (i == nMaxClient)
{
return -1;
}
else
{
return i;
}
}

/// <summary>
/// 接收线程
/// </summary>
private void AcceptThread()
{
while (bIsListen)
{
int nSocketID = GetEmptySocket();
if (nSocketID != -1)
{
Console.WriteLine("启动监听 {0} ", nSocketID);
RunSocketInfo[nSocketID].nClientID = nSocketID;
RunSocketInfo[nSocketID].mSocket = tlTcpListen.AcceptSocket();
RunSocketInfo[nSocketID].bIsRunNow = true;


Console.WriteLine("已经连接!{0}", nSocketID);
ThreadRun[nSocketID] = true;

RunSocketInfo[nSocketID].DoStartRead();

// Thread workObject = new Thread(ThreadProv);
// workObject.Start();
}
else
{
Thread.Sleep(100); //延时100ms 再尝试 -> 此时为已经满连接,等待中>>>>>
}
}

//////

}

private void SetExitThread(int nClientID)
{
ThreadRun[nClientID] = false;
}

}



/////////////////////////////////////////////////////////////////////////////






...全文

相关推荐

评论 15
收藏 已收藏
分享
返回顶部
kangbo818
C# 111,128 成员 642,536 内容