这些资料是我学习的时候在网络上寻找到的,发布出来希望对大家有帮助,一起努力前进,嘿嘿......Microsoft C#规范 2.0 版 GFC用户提交

feedsky 抓虾 pageflakes google reader my yahoo bloglines 鲜果 有道 http://wap.feedsky.com/bliplink

网络编程学习笔记

1.网上监视IP通信量的方法,帮助用户调试网络程序

2UNIX 网络文件描述浮叫套接字(socket,unix windows)网络编程都是使用所有的socket

套接字(socket)

在基于套接宇的网络编程技术中,用户不直接访问发送和接收包的网络接口设备,而

是建众 个叫中间文件描还符来处理编程接口到网络的操作。UNIX操作系统处理操作的细节,

决定用哪一个个网络设备发送数据利怎样发送。

用来引用网络连接的、特殊的文件描述符就叫做套接字,一个特殊的通信域(一个网络连接或者一个UNIX进程间通信管道

一个特殊的通信类型,流或数据包,一个特殊的协议TcpUDP在建立了套接字之后,必须把它绑定到系统中一个指定的网络地址和端口,或绑定到一个远程网络地址和端口,一旦套接字被绑定,就可以用它在网络上发送和接受数据

无阻塞I/O方法

标注的Unix网络编程模式有一个确定,就是如果I/0函数不能立即处理,I/o函数就会阻塞(Block),阻塞指的是程序停止执行,等待着某个特殊语句的完成,例如,当一个程序执行到RECV()函数的时候程序会停止执行,一直等到在套接字上读到数据为止,实际上在套接字上出现数据之前,Recv()函数阻止了程序的进一步执行,如果远程设备不发送任何数据,程序就不能继续下去,对于一个C/S可以很好工作,但是对于其他类型的不管发送或接受数据中的错误,必须处理其他事件的程序就会引起问题,有两种技术可以解决这个问题:

1使用无阻塞套接字2,使用多路套接字技术

防止不希望的阻塞调用I/O函数的时候把套接字设置成不阻塞的,可以用Fcntl()函数

2.多路套接字select()函数多路传输所有有效的套接字,可以看到多个事件的套接字,只处理需要处理的套接字,不需要的被跳过

C#socket.blocking置为false可以使用无阻塞套接字类似Fcntl()函数





C#套接字助手类

DNS采用分层数据库,建立多个信息层

DNS注册表位置


异步方法:

正规的DNS方法可能会给用户的C#程序带来麻烦,因为它们用阻塞方式与远程DNS服务器通信,程序经常需要几秒时间爱你等待从远程DNS服务器返回的DNS信息,可是在允许用户同时做其他事情的WINDows程序就有问题了,因为在程序等待DNS服务器响应的时候,用户不能够单击任何按钮也不用往文本段输入任何信息,这是无法接受的性能

TCP

明白:网络传输数据时候,都是先把数据存储TCP子系统缓冲区中,然后有子系统来发送数据,因此如果连续发送两个单独的消息时候,数据可以先后存储到TCP子系统缓冲区中,在有缓冲区发送到指定的主机上,指定主机可以把这一块数据作为一个整体存放在自己的TCP子系统缓冲中,这样存在一个问题:消息无边界问题,主机无法确认这个消息块是有几份单独的消息组成的,因此当主机读取数据的时候,会读出错误的消息。解决办法:统一设定消息大小尺寸,或消息做标记。主机中所有的数据都是从主机TCP子系统中读取的,任何数据都有网卡来接受,并把这些数据存入自己的缓冲区中,


变长消息:先发一个整型数表示该消息的大小尺寸,随后发送消息,接受:先收消息的大小,在收消息。Send()返回实际发送的字节数.所以有时候要多次才可以把一个大消息发送完毕。Receive()返回实际接受的自己数



UDP

  1. UDP有消息边界,但是UDP不能保证数据是否丢失,因此数据是一次发送的,如果没有接到,协议是不回重发的。接受数据要设置缓冲区,缓冲区小receicreform()发生异常,办法:动态增加缓冲区大小

  2. Networktohostorder()可以实现不同cpu平台的二进制问题,可以将本地的二进制转化为网络字节顺序,也可以将网络字节顺序解释为本地的二进制。



友情链接

郑州大学软件学院 SpringWidgets-Blogger 徵信社 翻译公司 链接帮手网 行驶证字体 酷站目录 Friend Connectified