C#实现简单的网络通信

来源:互联网 发布:淘宝复刻潮牌店铺排行 编辑:程序博客网 时间:2024/03/29 18:58

需要使用到的命名空间有:

System.NetSystem.Net.SocketsSystem.Threading

l 服务器端

在服务器端,要单独用一个线程和套接字来监听客户端的连接请求

首先,准备一个要绑定的本地终结点

IPAddress address = null;

IPAddress.TryParse(本地的IP地址, out address);

IPEndPoint ep = new IPEndPoint(address, 要绑定的端口);

然后创建一个用来监听的套接字
Socket socWatcher = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

在创建套接字的三个参数中:

AddressFamily.InterNetword表示此Socket将采用的寻址协议

SocketType.Stream表示此Socket的类型,SocketType.Stream支持可靠、双向、基于连接的字节流,而不重复数据,也不保留边界。

ProtocolType.Tcp表示此Socket支持的协议为TCP协议

socWatcher.Bind(ep);//将此套接字绑定到指定的终结点

socWatcher.Listen(10);//将此套接字置于侦听状态,并设置最多同时处理的请求数为10

接着,开启一个单独的线程

Thread thrWatcher = new Thread(Watch);

thrWatcher.IsBackground = true;

thrWatcher.Start();

Watch方法用来用来监听来自客户端的请求

此方法中使用一个死循环来不断为请求创建套接字

while(true)

{

Socket socNew = socWatcher.Accept();

//处理socNew的代码

//一般讲socNew存储到一个集合中,并新建立一个线程,利用此套接字与客户端通信

}

Accept 以同步方式从侦听套接字的连接请求队列中提取第一个挂起的连接请求,然后创建并返回新的 Socket

socNew建立起来后,可以利用此套接字与客户端进行通信

大部分的时候,利用一个新的线程使用socNew监听来自对方的信息。

socNew.Receive(字节数组,起始索引,长度,SocketFlags.None);

此方法将阻塞线程,直到接受完数据为止。

同时也可利用socNew.Send(字节数组, 起始索引, 长度, SocketFlags.None);向对方发送数据。

l 客户端:

客户端必须知道服务器端的IP地址和端口号。

和服务器端类似,首先利用此IP地址和端口号创建一个终结点,然后创建一个套接字。

然后,利用此套接字向服务器端请求建立连接:

SocClient.Connect(ep);

连接建立完毕后,客户端同样可以使用此套接字的Send方法和Receive方法进行通信了。

附上一个简单示例的源代码