Socket 的创建。
// 创建负责监听的Socket
// 第一个参数AddressFamily设置网络寻址协议,InterNetwork表示IPV4
// 第二个参数SocketType设置数据传输方式(Socket类型),这个要根据第三个参数来设置,Stream此类型的 Socket 与单个对方主机进行通信,并且在通信开始之前需要远程主机连接
// 第三个参数为UDP协议时,第二个参数就要为Dgram(报文)
Socket socketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
一。网络流
网络流(NetworkStream)用于传输数据,NetworkStream类用于网络访问的基础流,需要引用System.Net.Sockets 类 而 NetworkStream实现了通过网络套接字发送和接收数据的标准,并且NetworkStream支持网络流的的同步和异步访问。
NetworkStream构造方法有如下几种 如图:
常用属性如下:
NetworkStream常用方法如下:
二。文本流
文本流用于读写文本
文本流用于文本的读写。要谈文本,首先要了解的是文本编码。在网络编程中,常用的是ASCII、UTF8和 BigEndianUnicode码其中ASCII码最为常用,几乎所有协议都支持ASCII码,SMTP和POP3协议使用UTF8编码,但也支持ASCII码, BigEndianUnicod码是双字节码,一般协议不用该种编码作为命令码,因为双字节码在解码时较为繁琐,容易出 错。UTF8和 BigEndianUnicod编码支持汉字传输,其中UF8码使用起来较为方便,可以像使用ASCI码一样使用UTF8码。下面演示向文件中和向网络中写文本流:
●向文件写文本流
下列代码演示新建或打开(如果不存在,就新建一个文件;如果已经存在,则打开)
一个文件,然后向文件写文本数据,并且新数据代替旧数据。
StreamWriter sw=null;
sw=new StreamWriter( "e: \ltemp\. txt", false, System. Text. Encoding. UTF8);
sw. Write("aaaaaaaaaaaaaaaaaaa");
sw.close();
●向网络写入文本
string str="aaaaaaaaaaaaaaaaaaaaaaaaaaa";
byte [] myByte=System.Text.Encoding.UTF8.GetBytes(str);
NetworkStream netStream=new NetworkStream (mysock):
netStream. Write(myByte, 0, myByte.Length);
●从文件读取文本
StreamReader sr =null;
sr=new streamReader("e: \\temp laa. txt", System. Text. Encoding. UTF8);
string mystr=sr. ReadToEnd();
sr. close();
●从网络读取文本
string str="aaaaaaaaaaaaa";
byte [] myByte=System.Text.Encoding.UTF8.GetBytes(str);
Networkstream netStream=new NetworkStream(mysock);
netStream.Read(myByte,myByte.Length);
三。文件流
文件流用于读写文件
文件流主要用于读写非文本的文件。文件类型可以是各种各样的,无论是文本文件, 还是图片文件、压缩文件、可执行文件等等都可以用文件流实现读写功能。下例演示如何用文件流读写数据。
●将网络流数据写入文件
下列代码演示如何从网络流中读取数据并将内容写入文件,其中path代表文件路径, stream代表已经连接并且存在数据传输的网络流。
Filestream filestream=new FileStream(path,FileMode.OpenorCreate, FileAccess.Write);
int readNumber=0;
byte[] bye=new byte[8];
while( (readNumber=stream.Read(bye, 0, 8))>0)
{
filestream. Write(bye,o, readNumber);
//刷新缓存
filestream. Flush();
}
fileStream.Close();
●读文件并写入网络流
下列代码演示如何用文件流从文件读取数据,并将数据发送到网络流,其中path代表文件路径, stream代表已经连接并且存在数据传输的网络流,
filestream=new FileStream(path, FileMode,Open, FileAccess. Read);
int number;
//定义缓冲区
byte[] bb=new byte[8];
//循环读文件
NetworkStream stream=new NetworkStream(newclient);
while( (number=filestream. Read(bb,0,8))!=0)
{
// 向客户端发送流
stream. Write(bb,0,8);
//刷新流
stream.Flush();
bb=new byte [8];
}
filestream. Close();