c#网络编程之接收与发送信息代码
### C# 网络编程之接收与发送信息代码详解 #### 一、概述 本文将详细介绍一个基于C#语言实现的简单网络通信程序,该程序主要针对客户端/服务器(C/S)架构下的聊天软件进行开发。通过本例,我们可以学习如何在C#中建立Socket连接、发送请求并接收响应数据。 #### 二、核心类与方法介绍 ##### 2.1 类 `GetSocket` 说明 `GetSocket` 类包含两个私有静态方法:`ConnectSocket` 和 `SocketSendReceive`,以及一个公共静态方法 `Main`。这些方法协同工作来实现客户端与服务器之间的通信。 ##### 2.2 方法 `ConnectSocket` **功能描述**: 此方法用于创建与指定服务器的Socket连接,并返回该Socket对象。 **参数说明**: - `string server`:表示服务器的IP地址或域名。 - `int port`:表示服务器监听的端口号。 **实现细节**: 1. 使用 `Dns.GetHostEntry(server)` 获取服务器的相关信息。 2. 遍历获取到的 `IPHostEntry` 对象中的 `AddressList` 属性,以找到兼容的地址族。 3. 使用找到的 `IPAddress` 创建 `IPEndPoint` 对象,并基于此对象创建一个新的 `Socket` 实例。 4. 调用 `Socket.Connect` 方法尝试连接服务器。 5. 如果连接成功,则返回当前Socket实例;否则继续遍历 `AddressList`,直到找到可用的连接或所有地址均尝试完毕。 **返回值**: - 返回一个 `Socket` 对象,代表与服务器建立的连接。如果连接失败,则返回 `null`。 ##### 2.3 方法 `SocketSendReceive` **功能描述**: 此方法用于向指定的服务器发送HTTP GET请求,并接收服务器的响应数据。 **参数说明**: - `string server`:表示服务器的IP地址或域名。 - `int port`:表示服务器监听的端口号。 **实现细节**: 1. 构建一个简单的HTTP GET请求字符串。 2. 将请求字符串转换为字节数组。 3. 调用 `ConnectSocket` 方法建立Socket连接。 4. 使用 `Socket.Send` 方法发送请求数据。 5. 使用 `Socket.Receive` 方法接收服务器响应的数据,并将其存储在一个字节数组中。 6. 解码接收到的字节数组为字符串格式,并返回。 **返回值**: - 返回一个 `string` 类型的变量,包含服务器的响应数据。如果连接失败,则返回错误消息。 ##### 2.4 方法 `Main` **功能描述**: 这是程序的入口点,用于初始化服务器地址和端口号,并调用 `SocketSendReceive` 方法发起请求。 **参数说明**: - `string[] args`:命令行参数,通常包含服务器地址。 **实现细节**: 1. 检查是否通过命令行传入了服务器地址,如果没有则默认使用本机地址。 2. 调用 `SocketSendReceive` 方法并向其传递服务器地址和端口号。 3. 输出服务器响应的数据。 #### 三、总结 通过上述代码示例,我们可以看到在C#中如何利用Socket API来实现客户端与服务器之间的通信。这种方法不仅适用于简单的文本聊天程序,还可以扩展应用于更复杂的网络应用开发中。掌握了这些基本概念后,开发者可以进一步探索如多线程、异步处理等高级特性,以提高应用程序的性能和稳定性。
using System.Text;
using System.IO;
using System.Net;
using System.Net.Sockets;
public class GetSocket
{
private static Socket ConnectSocket(string server, int port)
{
Socket s = null;
IPHostEntry hostEntry = null;
// Get host related information.
hostEntry = Dns.GetHostEntry(server);
// Loop through the AddressList to obtain the supported AddressFamily. This is to avoid
// an exception that occurs when the host IP Address is not compatible with the address family
// (typical in the IPv6 case).
foreach (IPAddress address in hostEntry.AddressList)
{
IPEndPoint ipe = new IPEndPoint(address, port);
Socket tempSocket =
new Socket(ipe.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
tempSocket.Connect(ipe);
if (tempSocket.Connected)
{
s = tempSocket;
- xiaoxuexue2014-07-08很有用,修改一下就能用了
- sunzl22002013-09-23自己已经修改过了,简单应用应该没啥问题
- superman0718w2012-06-22不错,可以自己修改下
- 粉丝: 1
- 资源: 3
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助