C# 当客户端发送消息时,服务器关闭连接
我试图学习服务器/客户机范例。我已经创建了一个在给定端口上侦听连接和输入的服务器 我的问题是,当客户端连接并发送消息时,服务器会关闭连接,并停止侦听输入。我想要的是,当客户端发送消息时,服务器不应该关闭连接,但仍然要从连接的客户端获取输入。我知道我一次只能处理一个客户机,因为我没有为每个客户机创建线程,但这不会导致服务器在客户机发送消息时立即关闭连接 这是我的服务器代码:C# 当客户端发送消息时,服务器关闭连接,c#,sockets,C#,Sockets,我试图学习服务器/客户机范例。我已经创建了一个在给定端口上侦听连接和输入的服务器 我的问题是,当客户端连接并发送消息时,服务器会关闭连接,并停止侦听输入。我想要的是,当客户端发送消息时,服务器不应该关闭连接,但仍然要从连接的客户端获取输入。我知道我一次只能处理一个客户机,因为我没有为每个客户机创建线程,但这不会导致服务器在客户机发送消息时立即关闭连接 这是我的服务器代码: public void startServer() { try { IPAddres
public void startServer() {
try {
IPAddress iAd = IPAddress.Parse("127.0.0.10");
TcpListener tcpListner = new TcpListener(iAd, 9000);
tcpListner.Start();
Console.WriteLine("The server is running on port: 9000");
Console.WriteLine("The local End point is: " + tcpListner.LocalEndpoint + "\nWaiting for a connection");
Socket socket = tcpListner.AcceptSocket();
Console.WriteLine("\nConnection from client: " + socket.RemoteEndPoint);
byte[] b =new byte[100];
int k = socket.Receive(b);
for (int i=0;i<k;i++) {
Console.Write("Recieved: " + Convert.ToChar(b[i]));
}
ASCIIEncoding asen=new ASCIIEncoding();
socket.Send(asen.GetBytes("The string was recieved by the server."));
Console.WriteLine("\nSent Acknowledgement");
/* clean up */
socket.Close();
tcpListner.Stop();
} catch(Exception e) {
Console.WriteLine(e.Message);
}
}
public void startServer(){
试一试{
IPAddress iAd=IPAddress.Parse(“127.0.0.10”);
TcpListener tcpListner=新的TcpListener(iAd,9000);
tcpListner.Start();
WriteLine(“服务器正在端口9000上运行”);
Console.WriteLine(“本地端点为:“+tcpListner.LocalEndpoint+”\n正在等待连接”);
Socket-Socket=tcpListner.AcceptSocket();
Console.WriteLine(“\n来自客户端的连接:“+socket.RemoteEndPoint”);
字节[]b=新字节[100];
int k=插座接收(b);
对于(inti=0;iIn您的服务器代码-可能是其中的一对..您需要它来接收多条消息吗?(每个客户端)我希望当客户端连接时,他应该能够继续向服务器写入内容,直到他选择断开连接。现在,客户端只能写入1个字,当他发送该字时,服务器打印该字,然后关闭连接,而不是一直等待来自该客户端的更多消息。因此,您需要在服务中循环从声明“b”到“发送确认”的r端。我建议查看MSDN示例:在您的服务器代码中-可能有两个。您需要它来接收多条消息吗?(每个客户端)我希望当客户端连接时,他应该能够继续向服务器写入内容,直到他选择断开连接。现在,客户端只能写入1个字,当他发送该字时,服务器打印该字,然后关闭连接,而不是一直等待来自该客户端的更多消息。因此,您需要在服务中循环r方从声明“b”到“发送确认”。我建议查看MSDN示例:
public void StartClient(string servToConnectTo, int port) {
try{
client.Connect(servToConnectTo, port);
Console.WriteLine("Connected to server: " + servToConnectTo + " on port: " + port);
Console.WriteLine ("Write input to server...");
String input = Console.ReadLine();
Stream stream = client.GetStream();
ASCIIEncoding asen = new ASCIIEncoding();
byte[] b = asen.GetBytes(input);
Console.WriteLine("Sending...");
stream.Write(b, 0, b.Length);
byte[] bb = new byte[100];
int k = stream.Read(bb, 0, 100);
for(int i = 0; i < k; i++) {
Console.Write(Convert.ToChar(bb[i]));
}
client.Close();
} catch (Exception e) {
Console.WriteLine (e.Message);
}
}