帮忙看看进程问题-----------------------------?
1.为什么窗口关闭后,进程还在
![]()
用了很多方法如Application.Exit()和Application.ExitThread()都不行
2.Form类中定义一个类MyTCPServer,无法使用Form中得Listbox,说是不在进程中创建的Listbox,
怎么把这句话 Console.WriteLine("正在监听...") ;写在Listbox中
怎么实现,新手,写下代码。
代码如下:
用了很多方法如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;
}
}
/////////////////////////////////////////////////////////////////////////////
...全文
相关推荐
如何使用Shell解决问题进程?
在IT运维中,当面临服务器稳定性问题,尤其是在凌晨高负载时段难以即时发现异常进程时,Shell脚本成为了一种有效的解决方案。本文将详细介绍如何编写一个简单的Shell脚本来自动监控和处理这种情况。
Linux系统下用户进程死循环问题解决方法.docx
Linux 系统下的用户进程死循环问题是什么?答:Linux 系统下的用户进程死循环问题是指业务进程(用户态多线程程序)挂死,操作系统反应迟钝,系统日志没有任何异常。2. 问题的根源是什么?
Windows下80端口被进程System占用的解决方法亲测可用.docx
有时,System进程可能会占用80端口,以便提供一些系统服务。如何解决80端口被System进程占用的问题呢?
进程的同步与互斥问题总结.doc
下面是十一个经典问题的解决方案:1、wait 与 signal 为什么要设计成原语?
操作系统中进程相关题目
信号量是操作系统中的一种机制,用于解决多个进程对共享资源的访问问题。信号量机制可以实现进程的互斥访问和同步。三、 说明发生死锁的原因及避免死锁的方法。


