|
楼主 |
发表于 2013-5-15 19:05:01
|
显示全部楼层
Socket:
Stream Socket流套接字 Socket提供双向、有序、无重复的数据流服务,出溜大量的网络数据。
Dgram socket数据包套接字 支持双向数据流,不保证传输的可靠性、有序、无重复。
Row socket 原始套接字 访问底层协议
建立socket 用C#
命名空间:using System.Net;using System.Net.Socket;
构造新的socket对象:socket原型:
Public socket (AddressFamily addressFamily,SocketType sockettype,ProtocolType protocolType)
AddressFamily 用来指定socket解析地址的寻址方案。Inte.Network标示需要ip版本4的地址,Inte.NetworkV6需要ip版本6的地址
SocketType参数指定socket类型Raw支持基础传输协议访问,Stream支持可靠,双向,基于连接的数据流。
ProtocolType表示socket支持的网络协议
定义主机对象:
IPEndPoint类:IPEndPoint构造方法 位置:System.Net
原型:1) public IPEndPoint(IPAddress address,int port) 2)public IPEndPoint(long address,int port) 参数1整型int64如123456,参数2端口int32
主机解析:
利用DNS服务器解析主机,使用Dns.Resolve方法
原型:public static IPHostEntry Resolve(string hostname) 参数:待解析的主机名称,返回IPHostEntry类值,IPHostEntry为Inte.Net主机地址信息提供容器,该容器提供存有IP地址列表,主机名称等。
Dns.GetHostByName获取本地主机名称
原型:public static IPHostEntry GetHostByName(string hostname)
GetHostByAddress
原型:1)public static IPHostEntry GetHostByAddress(IPAddress address) 参数:IP地址 2)public static IPHostEntry GetHostByAddress(string address) IP地址格式化字符串
端口绑定和监听:
同步套接字服务器主机的绑定和端口监听
Socket类的Bind(绑定主机),Listen(监听端口),Accept(接收客户端的连接请求)
Bind:原型:public void Bind(EndPoint LocalEP)参数为主机对象 IPEndPoint
Listen:原型:public void Listen(int backlog) 参数整型数值,挂起队列最大值
accept:原型:public socket accept() 返回为套接字对象
演示程序:
IPAddress myip=IPAddress.Parse(“127.0.0.1”);
IPEndPoint myserver=new IPEndPoint(myip,2020);
Socket sock=new Socket(AddressFamily.Inte.Network,SocketType.Stream,ProtocolType.Tcp);
Sock.Bind(myserver);
Sock.Listen(50);
Socket bbb=sock.Accept();
发送数据:方法1:socket类的send方法二.NetworkStream类Write
send原型:public int Send(byte[] buffer) 字节数组
public int Send(byte[],SocketFlags)原型2说明,SocketFlags成员列表:DontRoute(不使用路由表发送),MaxIOVectorLength(为发送和接收数据的wsabuf结构数量提供标准值)None 不对次调用使用标志) OutOfBand(消息的部分发送或接收)Partial(消息的部分发送或接收) Peek(查看传入的消息)
原型三:public int Send(byte[],int,SocketFlags) 参数二要发送的字节数
原型四:public int Send(byte[],int,int,SocketFlags) 参数二为Byte[]中开始发送的位置
演示:
Socket bbb=sock.Accept();
Byte[] bytes=new Byte[64];
string send="aaaaaaaaaaaa";
bytes=System.Text.Encoding.BigEndianUnicode.GetBytes(send.ToCharArray());
bbb.Send(bytes,bytes.length,0);//将byte数组全部发送
.NetWordStream类的Write方法发送数据
原型:public override void write(byte[] buffer,int offset,int size) 字节数组,开始字节位置,总字节数
Socket bbb=sock.Accept();
.NetWorkStream stre=new NewWorkStream(bbb);
Byte[] ccc=new Byte[512];
string sendmessage="aaaaaaaaaaaaaa";
ccc=System.Text.Encoding.BigEndianUnicode.GetBytes(sendmessage);
stre.Write(ccc,0,ccc.length);
接收数据:Socket类Receive.NetworkStream类Read
Socket类Receive方法
原型:public int Receive(byte[] buffer)
2)public int Receive(byte[],SocketFlags)
3)public int Receive(byte[],int,SocketFlags)
4)public int Receive(byte[],int,int,SocketFlags)
.....
Socket bbb=sock.Accept();
........
Byte[] ccc=new Byte[512];
bbb.Receive(ccc,ccc.Length,0);
string rece=System.Text.Encoding.BigEndianUnicode.GetString(ccc);
richTextBox1.AppendText(rece+"\r\n");
.NetworkStream类的Read方法接收数据
public override int Read(int byte[] buffer,int offset,int size)
演示:bbb=sock.Accept();
.......
.NetworkStream stre=new.NetworkStream(bbb);
Byte[] ccc=new Byte[512];
stre.Read(ccc,0,ccc.Length);
string readMessage=System.Text.Encoding.BigEndianUnicode.GetString(ccc);
|
|