【发布时间】:2026-02-02 17:50:01
【问题描述】:
我最近开始学习计算机网络并决定尝试 TCP/IP 服务器和客户端。它们都可以工作,但是我在向服务器发送多个数据时遇到了问题。我使它看起来像客户端之间的聊天服务,但服务器只接受一个客户端并在发送数据后关闭连接,并且客户端在向服务器发送数据后由于某种原因停止响应(我认为问题来自服务器而不是客户端本身),没有错误消息,仅在我强制关闭客户端时在服务器端。 这就是我的服务器的样子...
static void Main(string[] args)
{
//User can define port
Console.WriteLine("open a port:");
string userInputPort = Console.ReadLine();
//listening for connections
TcpListener listener = new TcpListener(System.Net.IPAddress.Any, Convert.ToInt32(userInputPort));
listener.Start();
Console.WriteLine("listening...");
while (true)
{
//waiting for client to connect to server
Console.WriteLine("Waiting for connection...");
//when user connects to server, server will accept any request
TcpClient client = listener.AcceptTcpClient();
Console.WriteLine("Client Accepted");
NetworkStream stream = client.GetStream();
StreamReader streamR = new StreamReader(client.GetStream());
StreamWriter streamW = new StreamWriter(client.GetStream());
while (true)
{
if(client.Connected)
{
if (stream.CanRead)
{
//buffer
byte[] buffer = new byte[1024];
stream.Read(buffer, 0, buffer.Length);
int recv = 0;
foreach (byte b in buffer)
{
if(b != 0)
{
recv++;
}
}
string request = Encoding.UTF8.GetString(buffer, 0, recv);
Console.WriteLine("request recived: " + request);
streamW.Flush();
}
}
}
}
}
}
}
这就是客户端的样子……
...
try
{
//try to connect
client = new TcpClient(textBoxIP.Text, Convert.ToInt32(textBoxPort.Text));
}
...
static void sendMessage(string message, TcpClient client)
{
int byteCount = Encoding.ASCII.GetByteCount(message);
byte[] sendData = new byte[byteCount];
sendData = Encoding.ASCII.GetBytes(message);
NetworkStream stream = client.GetStream();
stream.Write(sendData, 0, sendData.Length);
StreamReader streamReader = new StreamReader(stream);
string respone = streamReader.ReadLine();
stream.Close();
client.Close();
}
就像我说的,我还在学习计算机网络,对此代码的任何评论都会有所帮助! 谢谢
【问题讨论】:
-
因此,当您调试每个专业、行和状态时。你得到了什么结果,程序与你的期望有什么不同?如果你不能回答这个问题,那么你在调试代码方面做得还不够。编写复杂软件时需要掌握事实,需要确定它的运行方式,猜测会以失败告终,以及在*上无法回答的问题
标签: c# winforms tcp tcpclient tcpserver