2024年3月9日发(作者:)

下面直接讲多线程服务器端开发。(直接给代码和解释吧)

首先定义一个新类,用于传递(连接socket )和接受发送数据。

class ClientThread

{

Encoding encoding = oding("GB2312"); //解码器(可以用于汉字)

private Socket client;

private string data = null;

private byte[] receiveBytes = new byte[1024];//服务器端设置缓冲区

private int recCount;

//传递连接socket

public ClientThread(Socket ClientSocket)

{

= ClientSocket;

}

//数据处理接口

public void ClientServer()

{

try

{

while (true)

{

recCount = e(receiveBytes, , 0);//从客户端接收信息

if (recCount != 0)//当服务器端的缓冲区接收到的信息不为空时

{

data = ing(receiveBytes, 0, recCount); //接收数据

//接收数据成功后给客户端返回OK

(es("OK"), 2, 0);

}

else

{

break;

}

}

}

catch (Exception ex)

{

("出现异常:");

ine(ng());

ne();

}

();

}

}

开始服务器端的多线程开发。

string HostName = tName(); //得到主机名

IPHostEntry IpEntry = tEntry(HostName); //得到主机IP

string strIPAddr = sList[0].ToString();

IPAddress ip = (strIPAddr); //把ip地址字符串转换为IPAddress

IPEndPoint ipep = new IPEndPoint(ip, 9001); //用指定的端口和ip

newsock = new Socket(etwork, , );

(ipep);//绑定

(10);//监听

while (true)

{

try

{

//当有可用的客户端连接尝试时执行,并返回一个新的

Socket client = ();

//创建消息服务线程对象,并把连接socket赋于ClientThread

ClientThread newclient = new ClientThread(client);

//把ClientThread 类的ClientService方法委托给线程

Thread newthread = new Thread(new ThreadStart(Server));

// 启动消息服务线程

();

}

catch

{

//连接中断或者连接失败

}

}

}

这样就完成了多线程socket的开发。一个服务器能对多个客户端:当有客户端要求连接的时候创建新

的线程去处理对应的客户端。但是这有一个缺点是,当有N个连接客户端的时候,就有N个线程,会对程序性

能以及计算机性能影响很大。下面用线程池的方法对线程进行线程管理(限制最大的线程数,把空闲的线程重

新使用,以提高性能)。

Thread newthread = new Thread(new ThreadStart(Server));

();

将以上程序代码换成threadpool的静态方法 QueueUserWorkItem(这个方法默认最多能有25个线程,

你可以根据你自己的需要进行设置,这里不详说了):

serWorkItem(new WaitCallback(Server));

这个方法要求被调用的函数至少有一个参数object。比如:public void ClientServer(object 0)

socket