C# Socket编程入门教程

4星 · 超过85%的资源 需积分: 9 92 下载量 123 浏览量 更新于2024-08-01 1 收藏 71KB DOCX 举报
"这篇文档是关于C#中的Socket类,主要面向初学者,提供了一个简单的服务器端示例代码。" 在C#编程中,Socket类是进行网络通信的基础,它允许程序通过网络发送和接收数据。Socket类是.NET Framework提供的,位于System.Net.Sockets命名空间下。Socket类提供了对低级别网络协议的访问,可以用于TCP(传输控制协议)或UDP(用户数据报协议)等不同的通信协议。 以下是对`Listen()`方法中部分代码的详细解释: 1. 首先,定义了几个变量: - `port`:这是一个整数,用于指定服务器监听的端口号。 - `thThreadRead`:线程对象,用于处理客户端连接后的读取操作。 - `TcpListener TcpListen`:创建一个TcpListener实例,用于监听指定端口的TCP连接请求。 - `bListener`:布尔值,表示服务器是否继续监听新的连接。 - `stRead`:Socket对象,表示与客户端建立的连接。 2. `TcpListen = new TcpListener(port);` 创建一个新的TcpListener,设置监听的端口为`port`。 3. `TcpListen.Start();` 开始监听指定端口,等待客户端的连接请求。 4. `stRead = TcpListen.AcceptSocket();` 当有客户端连接时,AcceptSocket方法会阻塞,直到有连接请求到达。它返回一个新的Socket对象,代表与客户端的连接。 5. `EndPoint tempRemoteEP = stRead.RemoteEndPoint;` 获取客户端的远程端点信息,这通常是客户端的IP地址和端口。 6. `IPHostEntry host = Dns.GetHostByAddress(tempRemoteEP.Address);` 使用DNS服务获取远程IP地址对应的主机名信息。 7. `string hostName = host.HostName;` 从IPHostEntry对象中获取主机名。 8. 在循环中,服务器不断地向客户端发送数据(用`%%1`占位,实际应替换为实际发送的内容),并读取客户端的响应: - `stRead.Send(Encoding.ASCII.GetBytes(%%1));` 发送字符串编码为ASCII的字节到客户端。 - `stringsTime = DateTime.Now.ToShortTimeString();` 获取当前时间并转换为短时间格式。 - `Byte[] byRead = new Byte[1024];` 定义一个字节数组,用于存储接收到的数据。 - `int iRead = stRead.ReceiveFrom(byRead, ref tempRemoteEP);` 接收来自客户端的数据,`ReceiveFrom`方法会返回实际接收到的字节数。 - `Byte[] byText = new Byte[iRead];` 创建一个新的字节数组,存储接收到的实际数据。 - `Array.Copy(byRead, 0, byText, 0, iRead);` 将接收到的数据复制到新数组。 - `string line = System.Text.Encoding.Default.GetString(byRead);` 将接收到的字节流解码为字符串。 9. 如果遇到`System.Security.SecurityException`,则说明监听失败,可以根据具体异常处理。 整个示例展示了如何使用C#的Socket类创建一个简单的TCP服务器,监听客户端的连接,发送和接收数据。对于初学者来说,这是理解Socket编程的一个良好起点,可以通过这个基础代码逐步扩展,实现更复杂的网络应用。