`
tulunta
  • 浏览: 360239 次
文章分类
社区版块
存档分类
最新评论

C#网络应用|理解Scoket协议 |新手教程

 
阅读更多

///自己看书总结的,希望对刚接触者有所帮助。

///套接字(Scoket)是在TCP/IP协议之上的网络通信协议。
///套接字可以看做是通信主机之间的端点,构成了单个主机内及整个网络间的编程界面。
///套接字存在于通信域(通信域是为了处理一般的线程通过套接字通信而引进的一种抽象概念)中。
///同一域中,不同的套接字是可以互相通信的。
///套接字分为两种类型:同步套接字和异步套接字。

下面让我们一起来了解它吧:

using System;

using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;


namespace 理解Scoket协议
{
class 同步套接字
{
static void Main(string[] args)
{
///使用同步套接字技术实现网络通信有5个方面:主机解析、主机绑定、端口监听、数据接收和数据发送
}
public void 定义主机对象()
{
//①定义主机对象(有两种方法)
//第一种使用IPEndPoint方法定义主机对象
IPEndPoint myServer1 = new IPEndPoint(12345, 80);
//第二种使用IPAddress类,其作用是把字符串转换为IP地址的格式
IPAddress myIP = IPAddress.Parse("127.0.0.1");
IPEndPoint myServer2 = new IPEndPoint(myIP, 8080);
}
public void 主机解析()
{
//②主机解析(在绑定主机之前,要先使用DNS服务器解析主机)
//下面的代码是使用Dns类的GetHostEntry()方法解析远程的google主机
IPHostEntry myHost = new IPHostEntry();
myHost = Dns.GetHostEntry("www.google.com");
//然后使用IPHostEntry对象的AddressList()方法,可以获得与主机关联的IP地址列表,获取IP地址列表的代码如下:
for (int i = 0; i < myHost.AddressList.Length; i++)
{
myHost.AddressList[i].ToString();
}
//使用IPHostEntry对象的HostName()方法还可以获取主机的DNS名称
}
public void 端口绑定和监听()
{
//③端口绑定和监听都使用Socket类,其方法Bind()表示绑定通信主机,方法Listen()表示监听。
//下面的代码是使用Dns类的GetHostEntry()方法解析远程的google主机
IPAddress myIP = IPAddress.Parse("127.0.0.1");
IPEndPoint myServer = new IPEndPoint(myIP, 8080);
//创建Socket对象
Socket socket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
//绑定主机
socket.Bind(myServer);
//侦听
socket.Listen(123);
}
public void 数据发送()
{
//④在绑定主机端口和监听之后,必须要使用Socket类的Accept()方法,接收客户端的连接请求;
//这样,客户端和服务器端就建立了连接,数据发送使用Socket类的Send()方法。代码如下:
IPAddress myIP = IPAddress.Parse("127.0.0.1");
IPEndPoint myServer = new IPEndPoint(myIP, 8080);
//创建Socket对象
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//绑定主机
socket.Bind(myServer);
//侦听
socket.Listen(123);
Socket mySend = socket.Accept();


//定义发送的消息
Byte[] myByte=new Byte[64];
string message = "发送一个消息!";
myByte = System.Text.Encoding.BigEndianUnicode.GetBytes(message.ToCharArray());
//发送
mySend.Send(myByte,myByte.Length,0);


}
public void 数据接收()
{
//⑤数据接收可以使用Socket类的Receive()方法。代码如下:
IPAddress myIP = IPAddress.Parse("127.0.0.1");
IPEndPoint myServer = new IPEndPoint(myIP, 8080);
//创建Socket对象
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//绑定主机
socket.Bind(myServer);
//侦听
socket.Listen(123);
Socket mySend = socket.Accept();


//定义接收格式
Byte[] myByte=new Byte[64];
//接收
mySend.Receive(myByte,myByte.Length,0);
//格式转换
string msg = System.Text.Encoding.BigEndianUnicode.GetString(myByte);
}
}
class 异步套接字
{
///异步套接字与同步套接字一样,也有5个方面:主机解析、主机绑定、端口监听、数据接收和数据发送。
///其中,主机解析、主机绑定和端口监听是相同的,所以这里就不再详细讲述。下面重点讲解数据接收和数据发送。
public void 数据发送()
{
///与同步套接字不同的是,异步套接字使用的是Socket类的BeginSend()方法。这个方法有六个参数。
///第一个参数是字节数组
///第二个参数是开始发送的位置
///第三个参数是发送的字节数
///第四个参数是SocketFlags值的按位组合
///第五个参数是异步回调
///第六个参数是自定义对象
}
public void 数据接收()
{
///与同步套接字不同的是,异步套接字使用的是Socket类的BeginReceive()方法。这个方法有六个参数。
///第一个参数是字节数组
///第二个参数是开始发送的位置
///第三个参数是发送的字节数
///第四个参数是SocketFlags值的按位组合
///第五个参数是异步回调
///第六个参数是自定义对象
}
}
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics