为编程爱好者分享易语言教程源码的资源网
好用的代理IP,游戏必备 ____广告位招租____ 服务器99/年 ____广告位招租____ ____广告位招租____ 挂机,建站服务器
好用的代理IP,游戏必备 ____广告位招租____ 服务器低至38/年 ____广告位招租____ ____广告位招租____ 挂机,建站服务器

网站首页 > 网络编程 正文

DELPHI学习之「网络编程-服务器端与客户端」

三叶资源网 2022-10-14 19:18:50 网络编程 206 ℃ 0 评论

一、关于PF_INET和AF_INET的说明

AF 表示ADDRESS FAMILY 地址族

PF 表示PROTOCL FAMILY 协议族

windows中AF_INET与PF_INET完全一样

而在Unix/Linux系统中,在不同的版本中这两者有微小差别,对于BSD,是AF,对于POSIX是PF。

也就是说,我们创建TCP套接字,或者是UDP套接字,都可以使用PF_INET或者AF_INET,用哪一个都可以。

二、网络连接与通信的流程

使用WinSock API之前,必须加载一个版本的WinSock库,我们使用WSAStartup来进行WIndows Socket动态连接库的初始化,在整个程序结束时,要调用WSAClearup完成库的清理工作。这两个函数必须配套使用,在个在程序的开始,一个在程序的末尾。

SOCKADDR_IN结构。这个结构中,包括几个域,

1、协议族,当我们要使用面向连接的TCP协议族或者无连接的UDP协议族时,都应当选择互联网协议族,PF_INET或者AF_INET。

2、端口:关于端口,需要注意以下方面的内容。

我们在开发中,要遵循IANA网络编号分配认证:

0-1023端口 是IANA为固定服务保留的。21是FTP服务,80是HTTP服务等等。

1024-49151 是IANA列出的,已注册端口,供普通用户的普通用户进程和程序使用。

49152-65535 是动态的或者私用的端口。

对于我们填写的端口,比如5402端口,我们必须使用htons函数,把这个端口由主机字节顺序,转换成网络字节顺序。同样的,ntohs则是把网络字节顺序转换成主机字节顺序。类似的还有htonl和ntohl,这里面的s和l,分别是指短整数和长整数。

3、ip地址:我们通常用inet_addr函数把一个点式IP地址(例如:133.44.233.18)转换成为一个无符号的32位整数

inet_ntoa这个函数则把一个无符号32位整数的IP地址转换成标准的点式IP地址。

服务器端:

1、创建套接字,使用Socket()函数创建套接字,SOCK_STREAM是TCP套接字,SOCK_DRGAM是UDP套接字,根据实际的需要,来创建适合的套接字。

2、服务器端,要用Bind()函数,把第一步创建的套按字和相关的ip地址,端口绑定在一起。然后,调用Listen()建立起监听,准备接受连接。

3、调用Accept接受客户端的连接,每接受一个连接后,就会创建相对于这个连接的新的套接字,代表这个连接,这个套接字,将可以用于这个连接的通信。

4、调用Recv()和Send()在套接字上读取和写入数据,并循环,直到数据交换完成。

5、调用CloseSocket关闭当前用于读写数据的套接字。

6、调用CloseSocket关闭用于监听的套接字。

用于监听的套接字,只有一个,而用于连接的套接字,可能会有很多。

客户端:

1、和服务器端相同,使用Socket()函数创建套接字。

2、使用Connect()函数,用1中所创建的套接字连接远程主机。

3、使用Send/Recv函数在套接字上读写数据,直到数据交换完成。

4、使用CloseSocket()函数关闭套接字,结束连接。

需要说明的一点,客户端在整个连接过程中,一直使用的都是过程 1 中所创建的那个套接字。

三、异步选择模块和WSAAsyncSelect函数

WSAAsyncSelect模型允许应用程序以Windows消息的形式接收网络事件通知。

WSAAsyncSelect函数自动将套接字设置为非阻塞形式,并且为套接字绑定一个窗口句柄,当有网络事件发生时,便向这个窗口发送消息,函数定义如下:

int WSAAsyncSelect(

SOCKET s, //需要设置的套接字句柄

HWND hWnd, //指定的一个窗口句柄,套接字的通知消息将被发送到与其对应的窗口过程中

unsigned int wMsg, //网络事件到来接收到的消息ID,可以在WM_USER以上的数值中任意选择一个

long lEvent //指定哪些通知码需要发送,程序想要接收的网络消息的组合。

);

成功调用WSAAsyncSelect后,程序就会在发生网络事件时,给窗口发送相关的网络消息。消息中,对应的wParam参数指定发生网络事件的套接字句柄,lParam参数的低字位指定了发生的网络事件,高字位包含了任何可能出现的错误代码,可以使用WSAGetSelectError和WSAGetSelectEvent将这些信息取出,如果没有错误发生,出错代码为0,程序可以继续检查通知码,以确定发生的网络事件。

来源:三叶资源网,欢迎分享,公众号:iisanye,(三叶资源网⑤群:21414575

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

百度站内搜索
关注微信公众号
三叶资源网⑤群:三叶资源网⑤群

网站分类
随机tag
屏幕保护撞球微信发卡机器人Vstart动态加密算法鼠标指针特性QQ空间硬笔精灵脚本短信轰炸机API例程界面控件配置保存大文件加密API实现菜单类趣头条动态加解密伪原创apk查壳工具云的多文档窗口界面支持库中间件淘宝宝贝列表分页源码
最新评论