DOS DM&P库

DSock 首页: http://www.dmp.com.cn/tech/dsock 2002/07/24 Version 0.51

DSock是一个基于DOS系统实模式下的TCP/IP库,它提供简单的C语言函数,特别适用 于DOS系统下的DM&P产品用户。开发人员可以利用DSock库函数,快速开发基于DOS 系统的Internet程序。

DSOCK.LIB是一个基于DOS系统大型模式的函数库,它需要128KB RAM装载,开发前请 务必把DSOCK.LIB库和DSOCK.H头文件添加到工程中。DSock用Turbo C 2.0编译,DSock 的演示程序用Turbo C++1.01编译。

DSock用Turbo C 2.0编译,因此推荐程序员用Borland C++/Turbo C++编写开发程序;如有 必要,可以从网址http://community.borland.com/article/images/21751/tcpp101.zip (2.63 MB)下载 Turbo C++1.01。

如果您在使用DSock中出现任何问题,请联系我们,我们的邮件地址:dsock@dmp.com.cn please.


DSock函数列表

库函数 套接字函数 帮助函数


BOOL DSock_Open()

说明: 初始化DSock函数库
参数:
返回参数; TRUE:成功;FALSE:失败
举例:
/* Initialize DSock library */
if(DSock_Open()==FALSE)
{
  printf("Unable to initialize socket library\n");
  return 1;
} 

void DSock_Close()

说明: 关闭DSock函数库
参数: N/A
举例:
/* Uninitialize library */
DSock_Close(); 

char *DSock_Version()

说明: 获得DSock版本信息
参数:
返回参数; 指向DSock版本信息的指针
举例:
/* Show DSock version */
printf("DSock Version %s\n",DSock_Version(); 

BOOL DSock_DoBootp()

说明: 从BOOTP/DHCP服务器获取网络配置
参数:
返回参数; TRUE:成功;FALSE:失败
举例:
/* Use BOOTP/DHCP to get setup */
if(DSock_DoBootp()==TRUE)
{
  printf("Load network setup from BOOTP/DHCP\n");
}
else /* Load setup from config file */
{
  printf("Unable to load setup from BOOTP/DHCP server\n");
  DSock_LoadConfigFile("dsock.cfg");
  printf("Load network setup from DSOCK.CFG\n");
} 

BOOL DSock_LoadConfigFile(char *szFile)

说明: 通过网络配置文件获取网络配置
参数:
返回参数; TRUE:成功;FALSE:失败
szFile 网络配置文件名
举例:
/* Use BOOTP/DHCP to get setup */
if(DSock_DoBootp()==TRUE)
{
  printf("Load network setup from BOOTP/DHCP\n");
}
else /* Load setup from config file */
{
  printf("Unable to load setup from BOOTP/DHCP server\n");
  DSock_LoadConfigFile("dsock.cfg");
  printf("Load network setup from DSOCK.CFG\n");
} 

void DSock_AddGateway(DWORD dwIp)

说明: 设置网关IP地址
参数:
dwIp 网关IP地址
举例:
/* Set gateway to 192.168.0.1 */
DSock_AddGateway(inet_addr("192.168.0.1")); 

DWORD DSock_GetGateway()

说明: 获取网关IP地址
参数:
返回参数; 网关IP地址
举例:
char szBuf[32];
DWORD dwGateway = DSock_GetGateway();
inet_ntoa(szBuf,dwGateway);
printf("Gateway = %s\n",szBuf); 

void DSock_AddDomainNameServer(DWORD dwIp)

说明: 设置域名服务器(DNS)的IP地址
参数:
dwIp DNS IP地址
举例:
/* Set DNS to 192.168.0.1 */
DSock_AddDomainNameServer(inet_addr("192.168.0.1")); 

DWORD DSock_GetDomainNameServer()

说明: 设置域名服务器(DNS)的IP地址
参数:
返回参数; DNS IP地址
举例:
char szBuf[32];
DWORD dwDNS = DSock_GetDomainNameServer();
inet_ntoa(szBuf,dwDNS);printf("DNS = %s\n",szBuf); 

DWORD DSock_Resolve(char *szName)

说明: 网络域名解析为对应的IP地址
参数:
返回参数; 网络域名解析的IP地址
szName 希望解析的域名
举例:
char szBuf[32];
DWORD dwIp = DSock_Resolve("www.dmp.com.cn");
printf("IP of www.dmp.com.cn is %s\n",inet_ntoa(dwIp)); 

BYTE *DSock_GetMacAddr()

说明: 从网卡中获取MAC地址
参数:
返回参数; 指向网卡中MAC地址的指针
举例:
BYTE *pbyMac = DSock_GetMacAddr();
printf("MAC Address is %02X-%02X-%02X-%02X-%02X-%02X\n",
       pbyMac[0],pbyMac[1],pbyMac[2], pbyMac[3],pbyMac[4],pbyMac[5]); 

DWORD DSock_GetHostIp()

说明: 获取主机IP地址
参数:
返回参数; 主机IP地址
举例:
char szBuf[32];
DWORD dwIp = DSock_GetHostIp();
inet_ntoa(szBuf,dwIp);
printf("My IP is %s\n",szBuf); 

void DSock_SetHostIp(DWORD dwIp)

说明: 设置主机IP地址
参数:
dwIp 指定的本地IP地址
举例:
/* Set local IP to 192.168.0.50 */
DSock_SetHostIp(inet_addr("192.168.0.50")); 

DWORD DSock_GetNetmask()

说明: 获取本机TCP/IP的网络掩码
参数:
返回参数; 本机TCP/IP的网络掩码
举例:
char szBuf[32];
DWORD dwNetmask = DSock_GetNetmask();
inet_ntoa(szBuf,dwNetmask);
printf("Netmask : %s\n",szBuf); 

void DSock_SetNetmask(DWORD dwNetmask)

说明: 设置本机TCP/IP的网络掩码
参数:
dwNetmask 本机TCP/IP的网络掩码
举例:
/* Set netmask to 255.255.255.0 */
DSock_SetNetmask(inet_addr("255.255.255.0")); 

char *inet_ntoa(char *sz,DWORD dw)

说明: DWORD类型IP地址转换为包含点分式IP地址的字符串
参数:
返回参数; 指向参数sz的指针
sz 点分式IP地址的字符串
dw DWORD类型IP地址
举例:
char szBuf[32];
DWORD dwIp = DSock_GetHostIp();
inet_ntoa(szBuf,dwIp);
printf("My IP is %s\n",szBuf); 

DWORD inet_addr(char *sz)

说明: 包含点分式IP地址的字符串转为DWORD类型IP地址
参数:
返回参数; DWORD类型IP地址
sz 包含点分式IP地址的字符串
举例:
/* Set local IP to 192.168.0.50 */
DSock_SetHostIp(inet_addr("192.168.0.50")); 

WORD ntohs(WORD w)

说明: 将一个WORD类型数据转为主机Byte类型数据排列
参数:
返回参数; 主机byte顺序数据
w 网络byte顺序数据
举例:
WORD w = 0x1234;
printf("w=%04x, ntohs(w)=%04x\n",w,ntohs(w)); 

DWORD ntohl(DWORD dw)

说明: 将一个DWORD类型数据转为主机Byte类型数据排列
参数:
返回参数; 主机byte顺序数据
w 网络byte顺序数据
举例:
DWORD dw = 0x12345678L;
printf("dw=%08lx, ntohl(dw)=%08lx\n",dw,ntohl(dw)); 

WORD htons(WORD w)

说明: 将一个WORD类型数据转为网络Byte类型数据排列
参数:
返回参数; 网络byte顺序数据
w 主机byte顺序数据
举例:
WORD w = 0x1234;
printf("w=%04x, htons(w)=%04x\n",w,htons(w)); 

DWORD htonl(DWORD dw)

说明: 将一个DWORD类型数据转为网络Byte类型数据排列
参数:
返回参数; 网络byte顺序数据
dw 主机byte顺序数据
举例:
DWORD dw = 0x12345678L;
printf("dw=%08lx, htonl(dw)=%08lx\n",dw,ntonl(dw)); 

SOCKET SocketCreate(int nType)

说明: 创建一个套接字
参数:
返回参数; TRUE:成功;FALSE:失败
nType TCP_SOCKET or UDP_SOCKET(defined on DSOCK.H).
举例:
SOCKET s = SocketCreate(TCP_SOCKET);
if(s==INVALID_SOCKET)
{
  printf("SocketCreate() error\n");
  return;
} 

BOOL SocketDestory(SOCKET s)

说明: 释放一个套接字
参数:
返回参数; TRUE:成功;FALSE:失败
s 希望释放的套接字
举例:
/* Release socket */
SocketDestory(s); 

BOOL SocketClose(SOCKET s)

说明: 关闭一个套接字
参数:
返回参数; TRUE:成功;FALSE:失败
s 希望关闭的套接字
举例:
/* Close a socket */
SocketClose(s); 

void SocketAbort(SOCKET s)

说明: 中止一个套接字
参数:
返回参数; N/A
s 希望中止的套接字
举例:
/* Abort a socket, like a fast close function */
SocketAbort(s); 

BOOL SocketBind(SOCKET s,DWORD dwAddr,WORD wPort)

说明: 套接字IP地址和端口绑定
参数:
返回参数; TRUE:成功;FALSE:失败
s 希望绑定的套接字
dwAddr Local IP address.
wPort Local port, DSock will find a free port when wPort=0.
举例:
/* Assign local port to 80 */
if(SocketBind(s,DWORD(0),80)==FALSE)
  printf("SocketBind() error\n"); 

BOOL SocketListen(SOCKET s)

说明: 套接字监听
参数:
返回参数; TRUE:成功;FALSE:失败
s 希望绑定的套接字
举例:
/* Let socket start to listen */
if(SocketListen(s)==FALSE)
  printf("SocketListen() error\n); 

BOOL SocketAccept(SOCKET s,DWORD *pdwAddr)

说明: 套接字接受连接请求(非阻塞模式)
参数:
返回参数; TRUE:成功;FALSE:失败
s 希望绑定的套接字
pdwAddr 指向希望连接的远端IP地址的指针
举例:
char szBuf[32];
DWORD dwRemoteIp;
while(SocketAccept(s,&dwRemoteIp)==FALSE);
  printf("Connected with %s\n",inet_ntoa(szBuf,dwRemoteIp)); 

BOOL SocketConnect(SOCKET s,DWORD dwAddr,WORD wPort)

说明: 与远端建立一个连接
参数: Remote port
返回参数; TRUE:成功;FALSE:失败
s 希望连接的套接字
dwAddr 远程IP地址
wPort远程端口号
举例:
/* Connect to www.dmp.com.cn:80 */
SocketConnect(s,DSock_Resolve("www.dmp.com.cn"),80); 

int SocketRecv(SOCKET s,BYTE *pby,int nLen)

说明: 从一个套接字接收数据
参数:
返回参数; 接收字节数,-1表示失败
s 接收数据的套接字
pby 接收数据缓冲区
nLen 接收数据大小
举例:
BYTE aby[64];
if(SocketRecv(s,aby,64)<0)
  printf("SocketRecv() error\n"); 

int SocketRecv2(SOCKET s,BYTE *pby,int nLen)

说明: 从一个套接字接收数据,只能接收缓冲区数据
参数:
返回参数; 接收字节数,-1表示失败
s 接收数据的套接字
pby 收数据缓冲区
nLen 接收数据大小
举例:
BYTE aby[64];
int nSize;
nSize = SocketRecv2(s,aby,64);
if(nSize<0)
  printf("SocketRecv2() error\n");
else
  printf("%d bytes received\n",nSize); 

int SocketRecvFrom(SOCKET s,DWORD *pdwAddr,WORD *pwPort,BYTE *pby,int nLen)

说明: 从UDP套接字接收数据
参数:
返回参数; 接收字节数,-1表示失败
s 接收数据的套接字描述符
pdwAddre 保存远程IP地址的DWORD类型缓冲区指针
pwPort 保存远程端口的DWORD类型缓冲区指针
pby 接收缓冲区
nLen 接收缓冲区大小
举例:
DWORD dwAddr;
WORD  wPort;
char  c;
SocketRecvFrom(s, &dwAddr, &wPort,&c,1);
printf("From %s:%d, send '%c' back.\n", inet_ntoa(szBuf, dwAddr), wPort, c); 

int SocketSend(SOCKET s,BYTE *pby,int nLen)

说明: 发送数据给套接字
参数:
返回参数; 发送字节数
s 希望发送数据的套接字
pby 发送缓冲区
nLen 发送缓冲区的大小
举例:
if(SocketSend(s,aby,64)!=64)
  printf("SocketSend() does not send all data out\n"); 

int SocketSend2(SOCKET s,BYTE *pby,int nLen)

说明: 发送数据给套接字(非阻塞模式)
参数:
返回参数; 发送字节数
s 希望发送数据的套接字
pby 发送缓冲区
nLen 发送缓冲区的大小
举例:
if(SocketSend(s,aby,64)!=64)
  printf("SocketSend() does not send all data out\n"); 


int SocketSendTo(SOCKET s,DWORD dwAddr,WORD wPort,BYTE *pby,int nLen)

说明: 用UDP套接字发送数据
参数:
返回参数; TRUE:成功;FALSE:失败
s 希望发送的套接字
dwAddr 远程IP地址
wPort 远程端口号
pby 发送缓冲区
nLen 发送缓冲区的大小
举例:
SocketSendTo(inet_addr("192.168.0.19"),1234,&c,1); 

int SocketDataReady(SOCKET s)

说明: 查询套接字已经接收数据的大小
参数:
返回参数; 返回参数;套接字接收到的数据大小
s 希望查询的套接字
举例:
printf("There are %d byte(s) of socket internal buffer\n",SocketDataReady(s)); 

void SocketPutChar(SOCKET s,char c)

说明: 写一个字符
参数:
s 套接字描述符
c 希望传送的字符
举例:
SocketPutChar(s,'x'); 

void SocketGetChar(SOCKET s,char *pc)

说明: 读取一个字符
参数:
s 套接字描述符
pc 读取字符的字符指针
举例:
char c;
SocketGetChar(s,&c); 

void SocketPutString(SOCKET s,char *szFmt,...)

说明: 写一个字符串
参数:
s 套接字描述符
szBuf 被格式化的字符串
举例:
char szBuf[32];
SocketPutString(s,"My IP is %s\r\n",inet_ntoa(szBuf,DSock_GetHostIp())); 

int SocketGetString(SOCKET s,char *szBuf,int nBufSize)

说明: 读取一个字符串
参数:
返回参数; 读取数据的大小,-1表示读取失败
s 希望绑定的套接字
szBuf 读取数据缓冲区
nBufSize 输入缓冲区的大小
举例:
char szBuf[80];
if(SocketGetString(s,szBuf,80)>0)
  printf("The string read is '%s'\n",szBuf);
else
  printf(SocketGetString() error\n"); 

BOOL SocketIsConnected(SOCKET s)

说明: 检测套接字连接状态
参数:
返回参数; TRUE:连接;FALSE:断开
s Socket descriptor you want to bind.
举例:
while(SocketIsConnected(s)==TRUE)
{
  /* Do socket read/write ...*/
} 

BOOL SocketIsTcpPortUsed(WORD wPort)

说明: 检测TCP端口状态
参数:
返回参数; TRUE: 是DSock TCP端口正在使用;FALSE:没有使用
wPort 被检测的端口
举例:
for(i=1;i<65535;i++)
  if(SocketIsTcpPortUsed(i))
    printf("port %u is used.\n"); 

BOOL SocketIsUdpPortUsed(WORD wPort)

说明: 检测UDP端口状态
参数:
返回参数; TRUE: DSock UDP端口正在使用;FALSE:没有使用
wPort 被检测的端口
举例:
for(i=1;i<65535;i++)
  if(SocketIsUdpPortUsed(i))
    printf("port %u is used.\n"); 

BOOL SocketFindFreeTcpPort()

说明: 搜寻空闲的TCP端口
参数:
返回参数; 空闲TCP端口号
举例:
printf("Find a free TCP port: %u\n",SocketFindFreeTcpPort()); 

BOOL SocketFindFreeUdpPort()

说明: 搜寻空闲的UDP端口
参数:
返回参数; 空闲的UDP端口号
举例:
printf("Find a free UDP port: %u\n",SocketFindFreeUdpPort()); 

void SocketFlush(SOCKET s)

说明: 将套接字缓冲区数据强行发送,清空套接字缓冲区
参数:
s 希望清空的套接字
举例:
SocketFlash(s); 

void SocketFlushNext(SOCKET s)

说明: 套接字下一次读写操作到来时,将套接字缓冲区数据强行发送,清空套接字缓冲区
参数:
s 希望下次清空的套接字
举例:
SocketFlashNext(s); 

Jan Yin Chan Electronics Co., LTD. 保留所有权利. 邮件地址:tech@dmp.com.cn