大家帮我看看,还是关于检测MAC地址的问题,附带源码和编译时出现的错误。

Andrionda 2004-11-08 10:27:05
大家帮我看看,已经来这里问过好几次拉,给大家添麻烦啦!呵呵


#include <vcl.h>
#pragma hdrstop
#pragma hdrstop
#include <condefs.h>
#include <windows.h>
#include <stdio.h>

typedef struct_NCB{
UCHAR ncb_command; //命令码
UCHAR ncb_retcode; //返回码
UCHAR ncb_lsn; //本地会话编码
UCHAR ncb_num; //数据报
ADD NAME
PUCHAR ncb_buffer; //信息缓冲区
WORD ncb_length; //信息缓冲区长度
UCHAR ncb_callname[NCBNAMSZ]; //CALL 的远程系统名
UCHAR neb_name[NCBNAMSZ]; //本地适配器网络名
UCHAR ncb_rto; //以 1/2s 为单位的接收超时UCHAR ncb_sto; //以 1/2s 为单位的发送超时void(*ncb_post)(struct_NCB*); //POST 例程指针
UCHAR ncb_lana_num; //执行命令的网络适配器编号
UCHAR ncb_cmd_cplt; //0XFF 命令挂起,否则命令结束
UCHAR ncb_reserve[10]; //保留值
HANDLE ncb_event; //事件句柄
} NCB;


typedef struct ASTAT{
ADAPTER_STATUS adapt;
NAME_BUFFER NameBuffer[30];
}
ASTAT, *PASTAT;
ASTAT Adapter;//自定义复位适配器函数
bool ClearAdapter(NCB ncb);



//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{
NCB ncb;
UCHAR uRetCode;
ncb.ncb_command=NCBASTAT;
ncb.ncb_lana_num=0;
strcpy((char *)ncb.ncb_callname,"*");
ncb.ncb_buffer=(unsigned char *) &;Adapter;
ncb.ncb_length=sizeof(Adapter);
uRetCode=Netbios(&;ncb);
printf("The NCBASTAT returned code is OX%x\n",uRetCode);
if(uRetCode==0)
{
printf( "The Ethernet Number is: %02x_%02x_%02x_%02x_%02x_%02x\n",
Adapter.adapt.adapter_address[0],
Adapter.adapt.adapter_address[1],
Adapter.adapt.adapter_address[2],
Adapter.adapt.adapter_address[3],
Adapter.adapt.adapter_address[4],
Adapter.adapt.adapter_address[5] );
if(Adapter.adapt.adapter_type==0xFF)
printf("The adapter is Token Ring adapter.\n");
else
if(Adapter.adapt.adapter_type==0xFE)
printf("The adapter is Ethernet adapter.\n");
printf("The software-release level is %d.%d\n",Adapter.adapt.rev_major,Adapter.adapt.rev_minor);
printf("The number of names in the local names table is %d\n",Adapter.adapt.name_count);
for(int i=0;i<;Adapter.adapt.name_count;i++)
printf("%s\n",Adapter.NameBuffer[i].name);
}//注意下面程序代码故意出错误
char Remote[16]="202.112.87.221";//先复位网络适配器
ClearAdapter(ncb);
memset(&,ncb,0,sizeof(ncb));//命令码为发送数据
ncb.ncb_command=NCBSEND;
ncb.ncb_lana_num=0;
ncb.ncb_lsn=4;
ncb.ncb_sto=2;
strcpy(ncb.ncb_callname,Remote);
//strcpy((char *)ncb.ncb_callname,"* ");
ncb.ncb_buffer=(unsigned char *) &;Adapter;
ncb.ncb_length=sizeof(Adapter);
uRetCode=Netbios(&;ncb);
printf("The NCBASTAT returned code is OX%x\n",uRetCode);
printf("The number of FRMR frames received is %d\n",Adapter.adapt.frmr_recv);
printf("The number of FRMR frames transmitted is %d\n",Adapter.adapt.frmr_xmit);
getchar();
return 0;
}
//---------------------------------------------------------------------------
bool ClearAdapter(NCB ncb)
{
memset(&;ncb,0,sizeof(ncb));
ncb.ncb_command=NCBRESET;
ncb.ncb_lana_num=0;
Netbios(&;ncb);
return true;
}









出现的错误如下:

[C++ Error] Unit1.cpp(21): E2257 , expected
[C++ Error] Unit1.cpp(39): E2303 Type name expected
[C++ Error] Unit1.cpp(39): E2139 Declaration missing ;
[C++ Error] Unit1.cpp(40): E2303 Type name expected
[C++ Error] Unit1.cpp(40): E2139 Declaration missing ;
[C++ Error] Unit1.cpp(44): E2147 'NCB' cannot start a parameter declaration
[C++ Error] Unit1.cpp(47): E2451 Undefined symbol 'NCB'
[C++ Error] Unit1.cpp(47): E2379 Statement missing ;
[C++ Error] Unit1.cpp(49): E2451 Undefined symbol 'ncb'
[C++ Error] Unit1.cpp(49): E2451 Undefined symbol 'NCBASTAT'
[C++ Error] Unit1.cpp(52): E2188 Expression syntax
[C++ Error] Unit1.cpp(54): E2268 Call to undefined function 'Netbios'
[C++ Error] Unit1.cpp(54): E2188 Expression syntax
[C++ Error] Unit1.cpp(54): E2379 Statement missing ;
[C++ Error] Unit1.cpp(59): E2316 'adapt' is not a member of 'ASTAT'
[C++ Error] Unit1.cpp(60): E2316 'adapt' is not a member of 'ASTAT'
[C++ Error] Unit1.cpp(61): E2316 'adapt' is not a member of 'ASTAT'
[C++ Error] Unit1.cpp(62): E2316 'adapt' is not a member of 'ASTAT'
[C++ Error] Unit1.cpp(63): E2316 'adapt' is not a member of 'ASTAT'
[C++ Error] Unit1.cpp(64): E2316 'adapt' is not a member of 'ASTAT'
[C++ Error] Unit1.cpp(65): E2316 'adapt' is not a member of 'ASTAT'
[C++ Error] Unit1.cpp(67): E2316 'adapt' is not a member of 'ASTAT'
[C++ Error] Unit1.cpp(69): E2316 'adapt' is not a member of 'ASTAT'
[C++ Error] Unit1.cpp(69): E2316 'adapt' is not a member of 'ASTAT'
[C++ Error] Unit1.cpp(70): E2316 'adapt' is not a member of 'ASTAT'
[C++ Error] Unit1.cpp(70): E2228 Too many error or warning messages
...全文
148 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Andrionda 2004-11-08
  • 打赏
  • 举报
回复
还有一点就是我的网卡MAC地址是:00-E0-4C-C5-C8-2E而程序运行产生如下数据:
The NCBASTAT returned code is OX34
The NCBASTAT returned code is OX8
The number of FRMR frames received is 0
The number of FRMR frames transmitted is 0
不是网卡的MAC地址阿!!!
Andrionda 2004-11-08
  • 打赏
  • 举报
回复
哈哈 谢谢楼上的 竟然通过拉!!我把源代码贴出来 大家再看看;

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
#pragma hdrstop
#include <condefs.h>
#include <windows.h>
#include <stdio.h>
#include <nb30.h>

typedef struct ASTAT{
ADAPTER_STATUS adapt;
NAME_BUFFER NameBuffer[30];
}
ASTAT, *PASTAT;
ASTAT Adapter;//自定义复位适配器函数
bool ClearAdapter(NCB ncb);



//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{
NCB ncb;
UCHAR uRetCode;
ncb.ncb_command=NCBASTAT;
ncb.ncb_lana_num=0;
strcpy((char *)ncb.ncb_callname,"*");
ncb.ncb_buffer=(unsigned char *) &Adapter;
ncb.ncb_length=sizeof(Adapter);
uRetCode=Netbios(&ncb);
printf("The NCBASTAT returned code is OX%x\n",uRetCode);
if(uRetCode==0)
{
printf( "The Ethernet Number is: %02x_%02x_%02x_%02x_%02x_%02x\n",
Adapter.adapt.adapter_address[0],
Adapter.adapt.adapter_address[1],
Adapter.adapt.adapter_address[2],
Adapter.adapt.adapter_address[3],
Adapter.adapt.adapter_address[4],
Adapter.adapt.adapter_address[5] );
if(Adapter.adapt.adapter_type==0xFF)
printf("The adapter is Token Ring adapter.\n");
else
if(Adapter.adapt.adapter_type==0xFE)
printf("The adapter is Ethernet adapter.\n");
printf("The software-release level is %d.%d\n",Adapter.adapt.rev_major,Adapter.adapt.rev_minor);
printf("The number of names in the local names table is %d\n",Adapter.adapt.name_count);
for(int i=0;i<Adapter.adapt.name_count;i++)
printf("%s\n",Adapter.NameBuffer[i].name);
}//注意下面程序代码故意出错误
char Remote[16]="202.112.87.221";//先复位网络适配器
ClearAdapter(ncb);
memset(&ncb,0,sizeof(ncb));//命令码为发送数据
ncb.ncb_command=NCBSEND;
ncb.ncb_lana_num=0;
ncb.ncb_lsn=4;
ncb.ncb_sto=2;
strcpy(ncb.ncb_callname,Remote);
//strcpy((char *)ncb.ncb_callname,"* ");
ncb.ncb_buffer=(unsigned char *) &Adapter;
ncb.ncb_length=sizeof(Adapter);
uRetCode=Netbios(&ncb);
printf("The NCBASTAT returned code is OX%x\n",uRetCode);
printf("The number of FRMR frames received is %d\n",Adapter.adapt.frmr_recv);
printf("The number of FRMR frames transmitted is %d\n",Adapter.adapt.frmr_xmit);
getchar();
return 0;
}
//---------------------------------------------------------------------------
bool ClearAdapter(NCB ncb)
{
memset(&ncb,0,sizeof(ncb));
ncb.ncb_command=NCBRESET;
ncb.ncb_lana_num=0;
Netbios(&ncb);
return true;
}
constantine 2004-11-08
  • 打赏
  • 举报
回复
#include <nb30.h> 里面有定义NCB
很多地方(&;Adapter;)都多了点东西,改为(&Adapter;)
自己慢慢改就好了
Andrionda 2004-11-08
  • 打赏
  • 举报
回复
谢谢你 自在。一下子就检测到了我的网卡MAC地址!谢谢你们,楼上的各位朋友。
milkwayhong 2004-11-08
  • 打赏
  • 举报
回复
你比较一下:
这是在别人代码的基础上改的,编译后可单独执行
#include <windows.h>
#include <stdio.h>
#include <time.h>
#include <stdlib.h>

///////////////////////////////////////////////////////////////////////////////
// You can either link directly to Iphlpapi.lib:
//
// #include <Iphlpapi.h>
// #pragma comment(lib, "Iphlpapi.lib")
//
// but instead we will dynamically load GetAdaptersInfo so
// the code will at least compile and load on Windows 95...
// So we have to copy some stuff declared in iptypes.h:

#define MAX_ADAPTER_DESCRIPTION_LENGTH 128 // arb.
#define MAX_ADAPTER_NAME_LENGTH 256 // arb.
#define MAX_ADAPTER_ADDRESS_LENGTH 8 // arb.

//
// IP_ADDRESS_STRING - store an IP address as a dotted decimal string
//

typedef struct {
char String[4 * 4];
} IP_ADDRESS_STRING, *PIP_ADDRESS_STRING, IP_MASK_STRING, *PIP_MASK_STRING;

//
// IP_ADDR_STRING - store an IP address with its corresponding subnet mask,
// both as dotted decimal strings
//

typedef struct _IP_ADDR_STRING {
struct _IP_ADDR_STRING* Next;
IP_ADDRESS_STRING IpAddress;
IP_MASK_STRING IpMask;
DWORD Context;
} IP_ADDR_STRING, *PIP_ADDR_STRING;

//
// ADAPTER_INFO - per-adapter information. All IP addresses are stored as
// strings
//

typedef struct _IP_ADAPTER_INFO {
struct _IP_ADAPTER_INFO* Next;
DWORD ComboIndex;
char AdapterName[MAX_ADAPTER_NAME_LENGTH + 4];
char Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4];
UINT AddressLength;
BYTE Address[MAX_ADAPTER_ADDRESS_LENGTH];
DWORD Index;
UINT Type;
UINT DhcpEnabled;
PIP_ADDR_STRING CurrentIpAddress;
IP_ADDR_STRING IpAddressList;
IP_ADDR_STRING GatewayList;
IP_ADDR_STRING DhcpServer;
BOOL HaveWins;
IP_ADDR_STRING PrimaryWinsServer;
IP_ADDR_STRING SecondaryWinsServer;
time_t LeaseObtained;
time_t LeaseExpires;
} IP_ADAPTER_INFO, *PIP_ADAPTER_INFO;

typedef DWORD (WINAPI* GetAdaptersInfoFunc)(
PIP_ADAPTER_INFO pAdapterInfo, // buffer to receive data
PULONG pOutBufLen // size of data returned
);
///////////////////////////////////////////////////////////////////////////////

void MacAddressToString(const LPBYTE Address, LPSTR lpsz, int nAddressLength = 6)
{
int n;
LPSTR p = lpsz;
for (n = 0; n < nAddressLength; n++)
{
p += sprintf(p, n ? "-%02x" : "%02x", Address[n]);
}
}

void main()
{
HMODULE hLib;
GetAdaptersInfoFunc GetAdaptersInfo = NULL;

PIP_ADAPTER_INFO pai = NULL;
DWORD dwSize = 0;
CHAR szMac[64];

hLib = LoadLibrary("Iphlpapi.dll");
if (!hLib)
{
puts("Failed to load Iphlpapi.dll");
exit(1);
}

GetAdaptersInfo = (GetAdaptersInfoFunc)GetProcAddress(hLib, "GetAdaptersInfo");
if (GetAdaptersInfo == NULL)
{
puts("Failed to load GetAdaptersInfo in Iphlpapi.dll");
}

// Get size of buffer needed:
GetAdaptersInfo(NULL, &dwSize);

pai = (PIP_ADAPTER_INFO)GlobalAlloc(GPTR, dwSize);
GetAdaptersInfo(pai, &dwSize);

PIP_ADAPTER_INFO p = pai;
/*
while (p)
{
MacAddressToString(p->Address, szMac, p->AddressLength);
printf("%s: %s\n", p->Description, szMac);
p = p->Next;
}
*/
MacAddressToString(p->Address, szMac, p->AddressLength);
printf("%s\n", szMac);

GlobalFree(pai);
FreeLibrary(hLib);
}
软件简介   飞鸽传书(IP Messenger),是由日本人Shirouzu Hiroaki (白水 启章)所发明的免费软件, 是一款局域网内即通信软件,基于 TCP/IP(UDP)。可运行于多种操作平台(Win/Mac/UNIX/Java),并实现跨平台信息交流。不需要服务器支持, 支持文件/文件夹的传送 (2.00版以上),通讯数据采用 RSA/Blofish 加密 (2.00版以上),十分小巧,简单易用,而且你可以完全免费使用它。目前已有的版本包括: Win32, Win16, MacOS, MacOSX, X11, GTK, GNOME,Java 等, 并且公开源代码. 系统要求   Microsoft Windows 95/98/Me/NT4.0/2000/XP/2003   95/98/NT4.0 ... 要求 comctl32.dll(公共控件) 的版本为 5.x 或更高.   (如果你安装的 IE 是 5.x 或更高版本, 那么就不必担心这个问题了)   注意: Windows 3.1(和 NT3.5x), 请使用 IP Messenger for Win16. 使用说明   < 安装/卸载 >   执行 setup.exe 你可以将 IPMsg 安装到指定目录, 或者重新注册到启动组.   如果需要删除 IPMsg, 请先从控制面板中卸载, 再手动删除 IPMsg 目录.   < 系统托盘区图标 >   左键双击图标, 即可打开发送消息窗口.   右键点击图标, 可进入 [服务设置], [离开] 等.   < 发送消息窗口 >   - 发送消息, 若勾选了 [封装], 则接收者要先打开信封才能看到消息,   如果你还勾选了 [上锁], 则接收者在打开信封还需要输入密码.   (密码是由接收者自己在 [服务设置] 中设置的)   - 若要发送文件/文件夹, 可直接将文件/文件夹拖入发送消息窗口   或在发送消息窗口上点击右键, 再选择发送文件或发送文件夹   - 传送文件/文件夹, 当接收者还没有保存(下载)文件/文件夹,   若发送者关闭或重启了 IPMsg, 则附带的文件信息将被清除,   接收者将不能继续接收(下载)到此文件.   - 用户列表前缀符号说明   ":" 表示用户处于离开模式.   "|" 表示用户使用的不是 2.0 以上版本的 IPMsg,   将不支持文件/文件夹的传送, 并且不支持通信数据加密.   "|"(短线) 表示只支持文件/文件夹的传送.   - 拖动列表表头标题项可改变其顺序, 并可点击右键选择"保存列表顺序"   - 在消息输入窗口中, 可使用 Ctrl+Tab 输入制表符 Tab.   - 在发送消息窗口上点击右键, 可以进入设置显示优先级, 选择工作组,   搜索用户(Ctrl+F), 传送文件, 传送文件夹, 保存列表顺序, 字体设置,   窗口大小设置, 固定窗口位置, 列表显示设置.   - 在用户名上点击右键, 可设置其显示优先级   优先级按由小到大的顺序排序   - 通过设置显示优先级, 可将经常联系的用户至于列表顶端,   或者隐藏不需要联系的用户   < 接收消息窗口 >   - 在接收消息窗口上点击右键, 可以进入字体设置,   窗口大小设置, 固定窗口位置.   - 接收消息窗口标题栏中的 "+" 或 "-" 表示通信数据使用了加密算法   "+" 表示 RSA/1024 位, blowfish/128 位加密   "-" 表示 RSA/512 位, RC2/40 位加密   - 如果你收到的消息附带了文件, 将会显示出附件按钮.   点击按钮即可保存文件.   < 其他 >   - 如果需要(通过路由器)连接到广域网, 则需要设置广播地址.   详见广域网设置(广播设置)   - 其它功能都很容易理解, 你试一试就明白了 操作技巧   1、隐藏/显示窗口Ctrl+D   2、按住Ctrl键再点[刷新]可保持现有用户,搜索新上线的用户   3、打开发送/接收消息窗口Ctrl+Alt+S/R(需要进行详细设置)   4、打开搜索窗口Ctrl+F   5、接收到多个文件,保存可勾选[全部] 软件原理   局域网聊天软件飞鸽传书是目前比较流行的局域网即通讯软件,由于历史悠久,它具有比较多的用户。 因为 FreeEIM 的实现原理和飞鸽传书差不多,希望广大用户了解其原理后,在使用更加得心应手。   开发多年的飞鸽,在他的基础上增加了些许功能,例如语音对话,这里继续讨论FreeEIM(飞鸽传书),前几天,详细的了解了FreeEIM(飞鸽传书)的网络协议,详细分析并且实现了FreeEIM(飞鸽传书)的消息传递过程,这里就FreeEIM(飞鸽传书)中的文件和文件夹的传输做详细的说明。   在FreeEIM(飞鸽传书)中,如果要进行文件或者文件夹的传输,首先需要做的就是消息的应答,通过UDP发送文件传输报文,另外的FreeEIM(飞鸽传书)客户端收到报文后,使用TCP协议发送应答报文,这样就开始进行文件的传输了。   这里开启两个线程,线程1负责文件的传送,线程2负责文件的接受,下边做一一说明。   首先,我们知道,可以发送多个文件,这些文件需要建立链表保存信息。   typedef struct file_info   {   struct file_info *next; //双向链表   struct file_info *forward;   char *file; //文件名   int type; //文件类型:文件或者文件夹   int size; //文件大小   struct sockaddr_in addr; //目标网络信息   } FILE_INFO;   [1]文件传送链表由专门的线程维护,这样,线程1就可以专心进行处理文件传输队列就可以了,线程1始终查询这个链表,如果表头为NULL,就说明没有要传输的文件,表头非空,就开始发送报文,获得正确的应答后,就可以开始文件的传输了,文件传输结束,将相应的链表节点删除。这里借鉴了很多程序中使用非常广泛的“命名池”相关的概念,只不过这里我们使用的是“文件池”,可以这么认为,如果有文件要传输,可以不用考虑是否有文件正在传输,只要把要传输的文件放入 “文件池”就可以了 , 同,不用考虑“文件池”的大小,线程1是文件池的服务线程,它检测文件池的大小,如果非空,就会逐次传输文件。   这里需要特别注意的就是关于文件夹的传输,这个FreeEIM(飞鸽传书)一个难点,应为对与文件夹的内容是没有显示的,需要我们逐次的判断,在飞鸽传书中是这么处理的,如果是一个文件夹,就发送文件属性为IPMSG_FILE_DIR的信息包,FreeEIM(飞鸽传书)客户端收到这个信息包后,就创建这个文件夹,然后发起发送的FreeEIM(飞鸽传书)客户端,进入文件夹,传送文件夹内的文件,如果该文件夹下,还有文件夹,使用相同的方法,在文件夹内的文件传送结束后,就发送FREEEIM_FILE_RETPARENT信息包,接受的FREEEI_FILE_RETP报文的FreeEIM(飞鸽传书)客户端,执行返回上一级目录,FreeEIM(飞鸽传书)发送端,就需发送目录下的文件。这样循环操作,最终完成文件的传输,这个过程比较难以理解。   有了上边的知识,开发文件传输功能就变得简单多了,文件的接受也可以类推了,同样开启一个线程维护接受文件链表,逐次接受身下的文件,链表为空。文件传输会遇到文件读写问题,有的文件发送是被打开了,这样会造成访问违规,所以要有相应的处理,才能让程序更加稳健。   程序启动先读取用户配置文件,一般是"*.ini"格式,然后,使用Winsock的广播消息给整个局域网发送一个数据包,这候,如果其他电脑已经运行了飞鸽传书,那么他收到这个包后,会将包的信息读取出来,当然,这个包里有用户的IP,用户名,性别等等。这样,在用户列表里就多了一个用户了。他的用户检查方式就如此简单而已。至于跨网段的实现,只需简单地修改一下广播地址就行了,如果不考虑速度,你可以给整个internet发广播消息。 消息发送,文件传输这些功能,都比较简单,如果你会网络编程,给你对方IP地址,这些功能实现起来再简单不过了。语音、视屏等,只需编写一些语音视频采集代码,传书的话,就像传文件一样。这里给段广播消息的实现代码吧:   // 发送广播登陆消息   void EM_UserLogin::SendLogin_BC(LPEM_DATA msg)   {   SOCKET m_socket;   m_socket = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP);   if (INVALID_SOCKET == m_socket)   {   MessageBox(0, "socket failed.", NULL, MB_OK);   }   SOCKADDR_IN sin;sin.sin_addr.s_addr = htonl(INADDR_BROADCAST);   sin.sin_family = AF_INET;   sin.sin_port = htons(BROADCAST_SEND_PORT);BOOL bOpt = TRUE;   if (SOCKET_ERROR == setsockopt(m_socket, SOL_SOCKET, SO_BROADCAST, (char*)&bOpt, sizeof(bOpt)))   {   // Error occurred   ::MessageBox(0,"BC setsockopt error.",0,0);   return;   }   char *tmpBuf = msg->GetBuffer();   if (SOCKET_ERROR == sendto(m_socket, tmpBuf, msg->GetLength(), 0, (PSOCKADDR)&sin, sizeof(sin)))   {   // Error occurred   ::MessageBox(0,"BC sendto error.",0,0);   return;   }closesocket(m_socket);    相关信息   - 所有的设置信息都保存在注册表的以下位置:   \\HKEY_CURRENT_USER\Software\HSTools\   用户密码以不可逆加密方式存储.   *******************************************************************   * 如果你忘记了密码, 可以在注册表中将此键值删除 *   * \\HKEY_CURRENT_USER\Software\HSTools\IPMsgEng\PasswordStr *   *******************************************************************   - 本软件使用的默认端口为 2425   若仅使用 UDP 协议的端口, 将不能传送文件/文件夹   (如果安装了防火墙, 则必须打开相应的 TCP 和 UDP 端口)   - 本软件为自由软件, 你可以随意传播, 但源码使用请参见许可协议.   - 只有在启动或退出程序, 使用离开模式, 刷新在线用户 IPMsg 才会进行消息广播.   - 本软件由 Microsoft Visual C++ 6.0 编译 广域网设置(广播设置)   - 主机号全部为 1 的 IP 地址, 即广播地址   例如, 连接到一个 C 类子网(即 24 位网络号, 8 位主机号), IP 地址为   aaa.bbb.ccc.ddd, 其广播地址即为: aaa.bbb.ccc.255   若对方处于另一个私有子网中, 广播可能无效.   - 更多问题, 请参阅相关资料或咨询你的网络管理员.   - 若两台主机的连接经过了多个路由器, 请直接指定对方IP地址   - 拨号上网用户请勾选 [拨号连接]   当刷新在线用户列表, 列表不会被清空 补充   - 启动飞鸽传书前, 你可以指定其运行使用的端口,   且可以使用不同的端口打开多个窗口. 用法如下:   ipmsg.exe 2426 (你可在快捷方式上设置)   但是你只能与同也使用该端口的用户通信.   - 所以你尽可选用你喜欢的端口运行本软件.   介于 10000 至 60000 可能更安全些.   你也可以咨询你的网络管理员.   - 如果有多个网卡(IP), 你可以将飞鸽传书与指定的网卡(IP)进行绑定.   命令格式如下(你可以在快捷方式上设置):   ipmsg.exe [端口] /NIC IP地址   例如:   C:\>ipmsg.exe /NIC 192.168.10.100   - 支持命令方式发送消息   命令格式如下:   ipmsg.exe [端口] /MSG [/LOG][/SEAL] <主机名或IP地址> <消息>   例如:   C:\>ipmsg.exe /MSG /SEAL localhost Hello.    支持   - IPMsg 的技术讨论区是开放的.   如果你想订阅相关邮件, 请联系 ipmsg-subscribe@ring.gr.jp   - 欢迎报告 bug, 以及提出建议   - 如果你有任何疑问, 请 E-mail 联系.   shirouzu@h.email.ne.jp   中文版可联系阿志: hiwyz@163.net   - 发送错误报告, 请勿必记录以下信息:   软件版本, 操作系统, 故障描述, 以及故障重现方法等. 更新历史   ver 1.00 ... 日文版 (1996/08/19)   ver 1.31 ... 英文版/日文版 (1997/09/01)   ver 2.00 ... 英文版/日文版 (2002/11/19)   支持文件/文件夹传送   支持通信数据加密   ver 2.03 ... Bug 修正 (文件传送引起缓冲溢出)   广播设置支持主机地址(FQDN)解析   ver 2.04 ... 增加绑定网卡(IP)功能   ver 2.05 ... Bug 修正 (2.04版当激活发送/接收消息窗口,无法注销/关闭系统)   ver 2.06 ... 很小的调整   ver 2007 ... 全面调整软件的界面可用性、性能稳定性 注意:本版本为 IPMSG 2.06版 编译环境: WINXP & VS2005, 可正确编译

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧