Socket在C#程序中的应用

2014-03-20 07:18许锐炮
科技视界 2014年21期
关键词:端口号服务器端网络通信

许锐炮

(民航汕头空管站 技术保障部,广东 揭东515558)

0 引言

当前网络通信日益应用广泛,以民航汕头空管站为例,单业务网就超过5 个,而信息化集中程度越来越多的同时,分布式系统之间的信息传输也成为一个研究课题。 而对于传统的TCP/IP 协议来说,TCP能提供一种可靠的、有连接的数据流服务,IP 协议则能通过识别IP 地址实现网络个体的互相通信, 相关文献也将两者称为底层网络通信。而对比之下,已经成熟应用的Socket 中间件便可以以应用程序的方式存在于各大网络分布式系统,应用日趋广泛。因此,探讨Socket 的运行机制及应用对相关网络编程和技术维护有一定意义。本文将从实际出发,介绍其在C# 程序编写中的相关技术及特点。

1 Socket 运行机制

Socket 是应用层与TCP/IP 协议族通信的中间软件抽象层,它是一组接口。 在设计模式中,Socket 作为一个门面模式把复杂的TCP/IP 协议族隐藏在Socket 接口后面,对开发人员来说,一组简单的接口就是全部,让Socket 去组织数据,以符合指定的协议。 它主要由IP 地址和端口号组成。 在TCP/IP 网络协议中, 基于服务器客户端模式的通信上,建立Socket 连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket , 另一个运行于服务器端, 称为ServerSocket 。 对于ServerSocket 来说主要用于服务器监听, 服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态,等待客户端的连接请求。一旦有请求或者相关命令信息,立即响应。而对于ClientSocket 来说将主动向服务器端套接字发出连接请求。因此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号, 然后就向服务器端套接字提出连接请求。当服务器端套接字监听到或者说接收到客户端套接字的连接请求时,就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,双方就正式建立连接。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。

2 Socket 在C# 编程中的机制

2.1 C# 中的Socket 类

C# Socket 类为网络通信提供了一套丰富的方法和属性。 Socket类允许开发人员使用ProtocolType 枚举中所列出的任何一种协议执行异步和同步数据传输。 如果应用程序在执行期间只需要一个线程。对于面向连接的协议的TCP 协议通信, 服务器可以使用Listen 方法侦听连接。 Accept 方法则处理任何传入的连接请求,并返回可用于与远程主机进行数据通信的Socket。 同时可以使用此返回的Socket 来调用Send 或Receive 方法。 调用Bind 方法后便可以要指定本地IP地址和端口号。连接侦听主机,则可以调用Connect 方法。在数据通信上,主要用Send 或Receive 方法。

对 于TCP/IP 的 通 信 在C# 中 可 使 用 Socket、BeginConnect 和EndConnect 方法来连接侦听主机。 通过使用BeginSend 和EndSend方法,或者使用BeginReceive 和EndReceive 方法,可以进行异步数据通信。 与此同时,使用BeginAccept 和EndAccept 处理传入的连接请求。

而在实际应用中,C# 的Socket 经常需要与多线程配合以解决异步传输问题。C# 支持通过多线程并行地执行代码,一个线程有它独立的执行路径,能够与其它的线程同时地运行。一个C# 程序开始于一个单线程,这个单线程是被CLR 和操作系统(也称为“主线程”)自动创建的,并具有多线程创建额外的线程。

2.2 实际应用

作为典型的C/S 模式结构设计,一般情况下包括服务器端软件设计和客户端软件设计,因此服务器端软件与客户端软件不可避免需要对其进行网络通信编程。以客户端软件设计为例,Socket 在C# 中则可以通过以下实现:

private IPEndPoint ServerInfo;

private Socket ClientSocket;

private Byte[] MsgBuffer;//信息接收缓存

private Byte[] MsgSend; //信息发送存储

ClientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

MsgBuffer = new Byte[65535];

MsgSend = new Byte[65535];

this.UserName.Text =Environment.MachineName;

ServerInfo = new IPEndPoint (IPAddress.Parse(this.ServerIP.Text),Convert.ToInt32(this.ServerPort.Text));

ClientSocket.Connect(ServerInfo);

ClientSocket.Send (Encoding.Unicode.GetBytes (" 用 户: " + this.UserName.Text + " 进入系统! "));

ClientSocket.BeginReceive (MsgBuffer, 0, MsgBuffer.Length,SocketFlags.None, new AsyncCallback(ReceiveCallBack), null);

3 结束语

本文讨论了Socket 的运行机制以及其在C# 编程中的设计以及相关技术功能,Socket 作为一种应用程序接口其在实际应用中将底层的相关通信协议等各种技术封装在程序背后, 为开发人员提供了快速、高效的开发方式。 讨论其运行机制,对开发和技术维护有实际意义。

[1]胡晶晶,鲁漫红.基于Java Socket 的聊天室系统设计与实现[J].微处理机,2010,5:66-70.

[2]周谭凯,马玉祥.网络通信编程架构研究[J].电子科技,2005(12).

[3]寇海洲,宗慧.利用Socket 实现被动方式实时提醒系统设计[J].淮阴工学院学报,2008(03).

猜你喜欢
端口号服务器端网络通信
Linux环境下基于Socket的数据传输软件设计
在Docker容器中安装应用程序
基于网络通信的智能照明系统设计
网络通信中信息隐藏技术的应用
基于网络通信的校园智能音箱设计
浅析异步通信层的架构在ASP.NET 程序中的应用
谈计算机网络通信常见问题及技术发展
浅谈以java为基础的Socket通信简介及实现
基于Qt的安全即时通讯软件服务器端设计
Winsock编程在《计算机网络基础》教学中的应用