创建网络客户端和服务器
在现代应用程序中,网络是常见需求.d标准库提供一个为网络应用程序提供基础的模块,标.套接字.我们将写一个客户端和服务器对来描述如何用它.客户将从标准输入发送行到服务器.服务器将接受任意数量连接,对新客户说你好,然后返回它收到的.
如何做...
我们构建两个独立应用程序:客户端和服务器.
客户
我们执行如下步骤创建一个客户端:
创建一个套接字对象.
连接到服务器.
声明一个容纳收到数据缓冲.必须预分配缓冲到你想在单个接收数据的调用中处理的最大数量数据.这儿,我们将用一个1024字节长的静态数组;它将许多房间拥有我们消息.
在服务器接收我们发送的你好消息.
随后,发送消息的每个行到服务器,等待响应,并打印出来.
代码如下:
服务器
我们执行如下步骤创建一个服务器:
创建一个套接字对象.
把它绑定到监听地址.
调用听()方法开始监听.
创建一个已连接客户对象列表和一个多路复用套接字集对象.
进入主循环.
重置套接字集对象.
添加你的监听器及所有已连接客户到读集函数.
调用套接字.选择()并传递你的套接字集对象给它.
如任何客户准备好读,用套接字的接收方法接收其数据,并用套接字的发送方法回复客户.
如果你的监听器设置在读集函数,调用接受来接受一个新连接并发送我们的欢迎消息.
代码如下:
它如何工作...
d标准库的标.套接字模块是一个在所有主要操作系统可用的BSD套接字应用接口的包装器.标.套接字模块是一个浅层包装器.如果你在其他语言用过套接字,你用d标准库会觉得很轻松.
客户简单连接然后发送和接收数据.发送和接收函数都带一个缓冲作为他们的实参而不是返回一个新分配数组.这允许你重用内存来提供最大性能.注意他们可能不用整个缓冲.这些方法将等待直到他们能干活了(除非你设置阻塞属性为假),然后他们在返回前立刻尽量做.如果在网络连接只能用一个字节,接收将写那个字节到缓冲并返回值;它不会等待完全填充缓冲.本使你尽快处理部分和可变大小消息.同样,发送可能不会立刻发送你的整个消息.一个健壮的套接字代码应该检查返回值以确保所有数据都发出去了.
在服务器端,不是连接,你绑定套接字对象到一个地址然后监听连接.监听实参是到队列的最大客户数.这一般是一个相对小的数,例如,10.
有许多技术来处理多连接.你可用线程,进程,或大量基于事件的检查.每个技术在简单和速度上有优缺点.在此例,我们用标.套接字,一个在应用中易用和可移植函数来多路复用多个连接.选择函数不能扩展到大量连接,因为它必须遍历每个来检查是集,但对少量连接,它性能足够且很容易用.
在标.套接字中的套接字集类是用来传递待选择套接字集.你可创建在你循环外它然后添加你连接给它.当准备好读时,也不要忘了加监听套接字.即一个新客户在尝试连接.
当选择表明在套接字集对象中已设置了一个套接字,它准备好立刻使用了.你应该尽快处理数据以最小化其他客户等待时间.服务器在循环里简单继续这些相同步骤直到终止.
更多...
这儿,我们创建一个使用互联网协议的传控协议套接字,在其上生成有许多常见应用协议,包含网络的,超传电邮的简邮协议,等等.你也可以用标.套接字创建UDP和环境高级编程(操作系统)套接字.创建一个环境高级编程(操作系统)套接字(不可在窗口操作系统用),传递地址族.环境高级编程(操作系统)而不是地址族.I网到套接字构造器.随后,当连接或绑定时,用新的环境高级编程(操作系统)地址而不是互联网地址.此外,其接口与传控协议套接字一样.环境高级编程(操作系统)套接字仅用于同一计算机上的客户端,所以他们比传控协议套接字更加安全且速度更快.然而,他们只用于特定用途.为用UDP—一个比传控协议无连接协议更快但更不可靠的你能用套接字类型.D克创建套接字然后用发送到和收到从方法.而不是发送,接收,和连接.
另见
超传://vibed.组织/是一个由节点.js激励并用D写成的服务器框架
领取专属 10元无门槛券
私享最新 技术干货