C# 客户端与服务器 控制台代码

用C#控制台编写,要求,服务器可以同时处理多个客户端的请求,一个客户端可以同时分多个线程给服务器发送请求。我要代码和解释!!!写的好加分!!!急!... 用C#控制台编写,要求,服务器可以同时处理多个客户端的请求,一个客户端可以同时分多个线程给服务器发送请求。我要代码和解释!!!写的好加分!!!急! 展开
 我来答
bambuz
2012-06-20 · TA获得超过168个赞
知道小有建树答主
回答量:329
采纳率:0%
帮助的人:315万
展开全部
private TcpClient client = null;
private TcpListener server = null;

private bool stopped = false;
private void button1_Click(object sender, EventArgs e)
{
//IPAddress localIp = Dns.GetHostAddresses("localhost")[0];
server = new TcpListener(12345);
server.Start();
showInfo("服务端启动 ..");

Thread thServer = new Thread(serverHandler) { IsBackground = true};
thServer.Start(server);

client = new TcpClient();
client.Connect("127.0.0.1", 12345);
if (client.Connected)
showInfo("客户端已经连接: " + client.Client.RemoteEndPoint.ToString());
else
showInfo("未连接上服务端.");
if (client.Connected)
{
Thread th = new Thread(clientHandler) { IsBackground = true };
th.Start(client);
}
}

private void serverHandler(object obj)
{
TcpListener svr = (TcpListener)obj;
while (!stopped)
{
try
{
TcpClient tcpClient=null;
if (svr.Pending())
{
tcpClient = svr.AcceptTcpClient();
Thread th = new Thread(serverClientHandler) { IsBackground = true };
th.Start(tcpClient);
showInfo("服务端接收连接, 并开始通讯: " + tcpClient.Client.RemoteEndPoint.ToString());
}
else
{
showInfo("暂时无连接请求:");
Thread.Sleep(60000);
}
}
catch(Exception ex)
{
showInfo("服务端监听连接异常: " + ex.Message);
Thread.Sleep(1000);
}
}

}

// 服务端处理连接
private void serverClientHandler(object obj)
{
byte[] buf = new byte[1024];
TcpClient client = (TcpClient)obj;
while (!stopped && client.Connected)
{
try
{
showInfo("等待客户端指令 ..");
int count = client.Client.Receive(buf);
if (count > 0)
{
//parse
string cmd = Encoding.Default.GetString(buf, 0, count);
showInfo("收到客户端指令: " +cmd);

switch (cmd)
{
case "OK":
client.Client.Send(Encoding.Default.GetBytes(cmd));
break;
default:
break;
}
}
}
catch (Exception ex)
{
showInfo("接收客户端指令超时: " + ex.Message);
}
}
}

// 客户端处理连接
private void clientHandler(object obj)
{
byte[] buf = new byte[1024];
TcpClient client = (TcpClient)obj;
client.Client.Send(Encoding.Default.GetBytes("OK"));
while (!stopped && client.Connected)
{
try
{
int count = client.Client.Receive(buf);
if (count > 0)
{
//parse
}
}
catch (Exception ex)
{
showInfo("接收服务端数据超时: " + ex.Message);
}
}

}
启帆信息
2024-11-22 广告
NVIDIA AI服务器在业界具有显著影响力。英伟达推出的AI服务器,如NVL72,凭借其卓越的性能和前所未有的计算能力,迅速成为市场的新宠。这些服务器采用高性能的GPU和CPU架构,支持万亿参数的多模态大模型,满足了大规模模拟和3D数据生... 点击进入详情页
本回答由启帆信息提供
Tommyn
2012-06-22 · 超过50用户采纳过TA的回答
知道小有建树答主
回答量:378
采纳率:50%
帮助的人:88.1万
展开全部
这个就是:private TcpClient client = null;
private TcpListener server = null;

private bool stopped = false;
private void button1_Click(object sender, EventArgs e)
{
server = new TcpListener(12345);
server.Start();
showInfo("服务端启动 ..");

Thread thServer = new Thread(serverHandler) { IsBackground = true};
thServer.Start(server);

client = new TcpClient();
client.Connect("127.0.0.1", 12345);
if (client.Connected)
showInfo("客户端已经连接: " + client.Client.RemoteEndPoint.ToString());
else
showInfo("未连接上服务端.");
if (client.Connected)
{
Thread th = new Thread(clientHandler) { IsBackground = true };
th.Start(client);
}
}

private void serverHandler(object obj)
{
TcpListener svr = (TcpListener)obj;
while (!stopped)
{
try
{
TcpClient tcpClient=null;
if (svr.Pending())
{
tcpClient = svr.AcceptTcpClient();
Thread th = new Thread(serverClientHandler) { IsBackground = true };
th.Start(tcpClient);
showInfo("服务端接收连接, 并开始通讯: " + tcpClient.Client.RemoteEndPoint.ToString());
}
else
{
showInfo("暂时无连接请求:");
Thread.Sleep(60000);
}
}
catch(Exception ex)
{
showInfo("服务端监听连接异常: " + ex.Message);
Thread.Sleep(1000);
}
}

}

// 服务端处理连接
private void serverClientHandler(object obj)
{
byte[] buf = new byte[1024];
TcpClient client = (TcpClient)obj;
while (!stopped && client.Connected)
{
try
{
showInfo("等待客户端指令 ..");
int count = client.Client.Receive(buf);
if (count > 0)
{
//parse
string cmd = Encoding.Default.GetString(buf, 0, count);
showInfo("收到客户端指令: " +cmd);

switch (cmd)
{
case "OK":
client.Client.Send(Encoding.Default.GetBytes(cmd));
break;
default:
break;
}
}
}
catch (Exception ex)
{
showInfo("接收客户端指令超时: " + ex.Message);
}
}
}

// 客户端处理连接
private void clientHandler(object obj)
{
byte[] buf = new byte[1024];
TcpClient client = (TcpClient)obj;
client.Client.Send(Encoding.Default.GetBytes("OK"));
while (!stopped && client.Connected)
{
try
{
int count = client.Client.Receive(buf);
if (count > 0)
{
//parse
}
}
catch (Exception ex)
{
showInfo("接收服务端数据超时: " + ex.Message);
}
}

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
桃李不言教书育人
2012-06-20 · TA获得超过1530个赞
知道小有建树答主
回答量:381
采纳率:0%
帮助的人:300万
展开全部
下面这个大牛的博客有详细的讲解,你可以去看看,研究一下,比直接看代码会有收获。有两篇文章,下面这个是part1,还一个part2在博客底部下一篇中能看到。

参考资料: http://www.cnblogs.com/JimmyZhang/archive/2008/09/07/1286300.html

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式