///自己看书总结的,希望对刚接触者有所帮助。
///套接字(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值的按位组合
///第五个参数是异步回调
///第六个参数是自定义对象
}
}
}
分享到:
相关推荐
C#的Socket实现UDP协议通信 CSharp
C# 基于SMTP协议和SOCKET发送邮件及附件。 在WIN7的VS2010环境下编译测试OK。
c# socket 接口协议
c#超级Socket库SuperSocket,SOCKET多线程编程
例子主要包括SocketAsyncEventArgs通讯封装、服务端实现日志查看、SCOKET列表、上传、下载、远程文件流、吞吐量协议,用于测试SocketAsyncEventArgs的性能和压力,最大连接数支持65535个长连接,最高命令交互速度...
【程序老媛出品,必属精品,亲测校正,...资源名:C#与三菱PLC 进行socket通信 程序源码 资源类型:程序源代码 源码说明: C#与三菱FX5U socket通信,内有C#程序 三菱FX5U程序 适合人群:新手及有一定经验的开发人员
C#应用socket进行网络通信的示例。
本人通过网络搜索,搜索到的一个感觉蛮不错的socket通讯demo示例。希望对想学习C#网络编程的朋友有所帮助! 对于想开发网络通讯程序的朋友具有不错的参考价值!
C# 采用SuperSocket开源库实现了C/S架构的服务器程序和客户端程序,附完整的工程项目
C#解决socket通信过程中粘包分包问题,本项目是一个只有6个C#代码文件的开源小工程,用来学习基于TCP的套接字通信包,可以自定义通信协议,处理分包和粘包,内置一个服务端和客户端的套接字程序,也有测试代码和对应...
C#.Net网络程序开发-Socket篇 教程 加 源码 c#网络编程经典入门,示例,原理的精辟讲解,学习的好材料 <br> Microsoft.Net Framework为应用程序访问Internet提供了分层的、可扩展的以及受管辖的网络服务,其...
一本有关于c#网络开发技术的好书,里面的内容包括 .net下的网络通信协议,.net remoting技术
从书中截取的,想了解C#下SOCKET开发的朋友可以参考下
c#基于TCP协议的Socket通信完整实例(实现多人聊天室),通过C#winform实现多人聊天,同时服务器可以向指定客户端发送消息
IOCPDemo_NET(C#高性能大容量SOCKET并发完成端口例子(有C#客户端)完整实例源码),主要包括SocketAsyncEventArgs通讯封装、服务端实现日志查看、SCOKET列表、上传、下载、远程文件流、吞吐量协议,用于测试...
Visual C#网络程序开发之Socket篇
基于C#网络通信编程,SOCKET客户端与服务端通信协议的程序连
SuperSocket Socket C# 通讯详细介绍,不错的 Socket,学习很有用处SuperSocket Socket 技能
都是自己写的,每个人的理解方式都不一样,但是基本原理就是样的, 你可以在这个基础上扩展其他的功能。 直接打开就可以用,代码简单 清晰,一看就懂了那种,不满意你私信我。 都是自己写的,每个人的理解方式都不...
c#与PLC通过SocketTcp通讯代码.仅通讯部分,不包含协议解析