![]() |
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函数库 | ||||
| 参数: |
举例: |
|
/* Initialize DSock library */
if(DSock_Open()==FALSE)
{
printf("Unable to initialize socket library\n");
return 1;
} |
| 说明: | 关闭DSock函数库 |
| 参数: | N/A |
| 举例: |
/* Uninitialize library */ DSock_Close(); |
| 说明: | 获得DSock版本信息 | ||
| 参数: |
|
||
| 举例: |
/* Show DSock version */
printf("DSock Version %s\n",DSock_Version(); |
| 说明: | 从BOOTP/DHCP服务器获取网络配置 | ||||
| 参数: |
举例: |
|
/* 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");
} |
| 说明: | 通过网络配置文件获取网络配置 | ||||||
| 参数: |
举例: |
|
/* 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");
} |
| 说明: | 设置网关IP地址 | ||||
| 参数: |
举例: |
|
/* Set gateway to 192.168.0.1 */
DSock_AddGateway(inet_addr("192.168.0.1")); |
| 说明: | 获取网关IP地址 | ||||
| 参数: |
举例: |
|
char szBuf[32];
DWORD dwGateway = DSock_GetGateway();
inet_ntoa(szBuf,dwGateway);
printf("Gateway = %s\n",szBuf); |
| 说明: | 设置域名服务器(DNS)的IP地址 | ||||
| 参数: |
举例: |
|
/* Set DNS to 192.168.0.1 */
DSock_AddDomainNameServer(inet_addr("192.168.0.1")); |
| 说明: | 设置域名服务器(DNS)的IP地址 | ||||
| 参数: |
举例: |
|
char szBuf[32];
DWORD dwDNS = DSock_GetDomainNameServer();
inet_ntoa(szBuf,dwDNS);printf("DNS = %s\n",szBuf); |
| 说明: | 网络域名解析为对应的IP地址 | ||||||
| 参数: |
举例: |
|
char szBuf[32];
DWORD dwIp = DSock_Resolve("www.dmp.com.cn");
printf("IP of www.dmp.com.cn is %s\n",inet_ntoa(dwIp)); |
| 说明: | 从网卡中获取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]); |
| 说明: | 获取主机IP地址 | ||||
| 参数: |
举例: |
|
char szBuf[32];
DWORD dwIp = DSock_GetHostIp();
inet_ntoa(szBuf,dwIp);
printf("My IP is %s\n",szBuf); |
| 说明: | 设置主机IP地址 | ||||
| 参数: |
举例: |
|
/* Set local IP to 192.168.0.50 */
DSock_SetHostIp(inet_addr("192.168.0.50")); |
| 说明: | 获取本机TCP/IP的网络掩码 | ||||
| 参数: |
举例: |
|
char szBuf[32];
DWORD dwNetmask = DSock_GetNetmask();
inet_ntoa(szBuf,dwNetmask);
printf("Netmask : %s\n",szBuf); |
| 说明: | 设置本机TCP/IP的网络掩码 | ||||
| 参数: |
举例: |
|
/* Set netmask to 255.255.255.0 */
DSock_SetNetmask(inet_addr("255.255.255.0")); |
| 说明: | DWORD类型IP地址转换为包含点分式IP地址的字符串 | ||||||||
| 参数: |
举例: |
|
char szBuf[32];
DWORD dwIp = DSock_GetHostIp();
inet_ntoa(szBuf,dwIp);
printf("My IP is %s\n",szBuf); |
| 说明: | 包含点分式IP地址的字符串转为DWORD类型IP地址 | ||||||
| 参数: |
举例: |
|
/* Set local IP to 192.168.0.50 */
DSock_SetHostIp(inet_addr("192.168.0.50")); |
| 说明: | 将一个WORD类型数据转为主机Byte类型数据排列 | ||||||
| 参数: |
举例: |
|
WORD w = 0x1234;
printf("w=%04x, ntohs(w)=%04x\n",w,ntohs(w)); |
| 说明: | 将一个DWORD类型数据转为主机Byte类型数据排列 | ||||||
| 参数: |
举例: |
|
DWORD dw = 0x12345678L;
printf("dw=%08lx, ntohl(dw)=%08lx\n",dw,ntohl(dw)); |
| 说明: | 将一个WORD类型数据转为网络Byte类型数据排列 | ||||||
| 参数: |
举例: |
|
WORD w = 0x1234;
printf("w=%04x, htons(w)=%04x\n",w,htons(w)); |
| 说明: | 将一个DWORD类型数据转为网络Byte类型数据排列 | ||||||
| 参数: |
举例: |
|
DWORD dw = 0x12345678L;
printf("dw=%08lx, htonl(dw)=%08lx\n",dw,ntonl(dw)); |
| 说明: | 创建一个套接字 | ||||||
| 参数: |
举例: |
|
SOCKET s = SocketCreate(TCP_SOCKET);
if(s==INVALID_SOCKET)
{
printf("SocketCreate() error\n");
return;
} |
| 说明: | 释放一个套接字 | ||||||
| 参数: |
举例: |
|
/* Release socket */ SocketDestory(s); |
| 说明: | 关闭一个套接字 | ||||||
| 参数: |
举例: |
|
/* Close a socket */ SocketClose(s); |
| 说明: | 中止一个套接字 | ||||||
| 参数: |
举例: |
|
/* Abort a socket, like a fast close function */ SocketAbort(s); |
| 说明: | 套接字IP地址和端口绑定 | ||||||||||
| 参数: |
举例: |
|
/* Assign local port to 80 */
if(SocketBind(s,DWORD(0),80)==FALSE)
printf("SocketBind() error\n"); |
| 说明: | 套接字监听 | ||||||
| 参数: |
举例: |
|
/* Let socket start to listen */
if(SocketListen(s)==FALSE)
printf("SocketListen() error\n); |
| 说明: | 套接字接受连接请求(非阻塞模式) | ||||||||
| 参数: |
举例: |
|
char szBuf[32];
DWORD dwRemoteIp;
while(SocketAccept(s,&dwRemoteIp)==FALSE);
printf("Connected with %s\n",inet_ntoa(szBuf,dwRemoteIp)); |
| 说明: | 与远端建立一个连接 | ||||||||||
| 参数: |
举例: |
|
/* Connect to www.dmp.com.cn:80 */
SocketConnect(s,DSock_Resolve("www.dmp.com.cn"),80); |
| 说明: | 从一个套接字接收数据 | ||||||||||
| 参数: |
举例: |
|
BYTE aby[64];
if(SocketRecv(s,aby,64)<0)
printf("SocketRecv() error\n"); |
| 说明: | 从一个套接字接收数据,只能接收缓冲区数据 | ||||||||||
| 参数: |
举例: |
|
BYTE aby[64];
int nSize;
nSize = SocketRecv2(s,aby,64);
if(nSize<0)
printf("SocketRecv2() error\n");
else
printf("%d bytes received\n",nSize); |
| 说明: | 从UDP套接字接收数据 | ||||||||||||||
| 参数: |
举例: |
|
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); |
| 说明: | 发送数据给套接字 | ||||||||||
| 参数: |
举例: |
|
if(SocketSend(s,aby,64)!=64)
printf("SocketSend() does not send all data out\n"); |
| 说明: | 发送数据给套接字(非阻塞模式) | ||||||||||
| 参数: |
举例: |
|
if(SocketSend(s,aby,64)!=64)
printf("SocketSend() does not send all data out\n"); |
| 说明: | 用UDP套接字发送数据 | ||||||||||||||
| 参数: |
举例: |
|
SocketSendTo(inet_addr("192.168.0.19"),1234,&c,1); |
| 说明: | 查询套接字已经接收数据的大小 | ||||||
| 参数: |
举例: |
|
printf("There are %d byte(s) of socket internal buffer\n",SocketDataReady(s)); |
| 说明: | 写一个字符 | ||||||
| 参数: |
举例: |
|
SocketPutChar(s,'x'); |
| 说明: | 读取一个字符 | ||||||
| 参数: |
举例: |
|
char c; SocketGetChar(s,&c); |
| 说明: | 写一个字符串 | ||||||
| 参数: |
举例: |
|
char szBuf[32]; SocketPutString(s,"My IP is %s\r\n",inet_ntoa(szBuf,DSock_GetHostIp())); |
| 说明: | 读取一个字符串 | ||||||||||
| 参数: |
举例: |
|
char szBuf[80];
if(SocketGetString(s,szBuf,80)>0)
printf("The string read is '%s'\n",szBuf);
else
printf(SocketGetString() error\n"); |
| 说明: | 检测套接字连接状态 | ||||||
| 参数: |
举例: |
|
while(SocketIsConnected(s)==TRUE)
{
/* Do socket read/write ...*/
} |
| 说明: | 检测TCP端口状态 | ||||||
| 参数: |
举例: |
|
for(i=1;i<65535;i++)
if(SocketIsTcpPortUsed(i))
printf("port %u is used.\n"); |
| 说明: | 检测UDP端口状态 | ||||||
| 参数: |
举例: |
|
for(i=1;i<65535;i++)
if(SocketIsUdpPortUsed(i))
printf("port %u is used.\n"); |
| 说明: | 搜寻空闲的TCP端口 | ||||
| 参数: |
举例: |
|
printf("Find a free TCP port: %u\n",SocketFindFreeTcpPort()); |
| 说明: | 搜寻空闲的UDP端口 | ||||
| 参数: |
举例: |
|
printf("Find a free UDP port: %u\n",SocketFindFreeUdpPort()); |
| 说明: | 将套接字缓冲区数据强行发送,清空套接字缓冲区 | ||||
| 参数: |
举例: |
|
SocketFlash(s); |
| 说明: | 套接字下一次读写操作到来时,将套接字缓冲区数据强行发送,清空套接字缓冲区 | ||||
| 参数: |
举例: |
|
SocketFlashNext(s); |
| Jan Yin Chan Electronics Co., LTD. 保留所有权利. | 邮件地址:tech@dmp.com.cn |