【发布时间】:2015-04-25 04:41:51
【问题描述】:
我目前正在尝试使用 C# 学习网络连接,我直接从套接字开始。
我现在阅读了一些指南,发现了一个不错且易于理解的指南,但是现在他们为我提供了此服务器套接字的代码,我在理解某些段落时有些困难
代码:
public void startServer()
{
TcpListener serverSocket = new TcpListener(8888);
TcpClient clientSocket = default(TcpClient);
serverSocket.Start();
Console.WriteLine(" >> Server Started");
clientSocket = serverSocket.AcceptTcpClient();
Console.WriteLine(" >> Accept connection from client");
while ((true))
{
try
{
NetworkStream networkStream = clientSocket.GetStream();
byte[] bytesFrom = new byte[10025];
networkStream.Read(bytesFrom, 0, (int)clientSocket.ReceiveBufferSize);
string dataFromClient = System.Text.Encoding.ASCII.GetString(bytesFrom);
dataFromClient = dataFromClient.Substring(0, dataFromClient.IndexOf("$"));
Console.WriteLine(" >> Data from client - " + dataFromClient);
string serverResponse = "Last Message from client" + dataFromClient;
Byte[] sendBytes = Encoding.ASCII.GetBytes(serverResponse);
networkStream.Write(sendBytes, 0, sendBytes.Length);
networkStream.Flush();
Console.WriteLine(" >> " + serverResponse);
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
clientSocket.Close();
serverSocket.Stop();
Console.WriteLine(" >> exit");
Console.ReadLine();
}
首先,一开始发生的事情非常明显。正在创建一个 TcpListener,它代表服务器套接字。
然而,有些混乱始于 TcpClient 部分。如果这应该是一个服务器,为什么我必须在这里创建一个客户端?考虑到服务器应该独立运行,服务器和客户端方法不应该分开吗?
那么,在try catch中,为什么是NetworkStream = clientsocket.GetStream();?我在这里可能完全错了,但为什么我必须从我的客户那里获取流?这条线听起来像是服务器正在期待定期更新。或者要传输的信息/消息是否存储在客户端中,直到服务器“收集”它?
字节数组应该存储一条消息,这是我很确定的。
关于 try 块中的其他语句,我真的不能说太多,只要我仍然对其他部分感到困惑。但总的来说,看起来服务器在这里与客户端建立连接,并双向发送/接收消息。
我在网络或套接字技术方面并不是很先进(说实话,我刚开始使用它),所以如果我在这里做了一些非常错误的假设,我很抱歉,但我真的很想得到这个sn-p的代码,没有任何解释。
如果有人能帮我弄清楚这段代码,我将非常感激。
【问题讨论】:
-
在我看来,示例代码旨在同时说明服务器和客户端,以提供信息。我认为这是您不理解的部分;)您认为在本应用于服务器的代码中创建自己的连接客户端很奇怪。
-
哇,示例代码在很多地方都混淆了。不要从字面上理解。
标签: c# sockets network-programming