L
lmwen2000
Unregistered / Unconfirmed
GUEST, unregistred user!
1.DOS 部分:
开发工具:Borland C++ 3.1
编译模式:Tiny 或 Large
IPX.ASM Large编译模式代码:
;-------Start--------
.model large
.data
public _ipxentry
_ipxentry dd 0
.code
public _reverseword
_reverseword:
push bp
mov bp,sp
mov ax,[bp+6]
xchg ah,al
pop bp
retf
public _ipxinit
_ipxinit:
push di
push es
mov ax,7A00h
int 2Fh
cmp al,0FFh
jnz _ipxinit0
mov word ptr [_ipxentry+0],di
mov word ptr [_ipxentry+2],es
_ipxinit0:
mov dx,word ptr [_ipxentry+2]
mov ax,word ptr [_ipxentry+0]
pop es
pop di
retf
public _ipxgetaddress
_ipxgetaddress:
push bp
mov bp,sp
mov bx,0009h
mov si,[bp+6]
mov es,[bp+8]
call [_ipxentry]
pop bp
retf
public _ipxgetmaxpacketsize
_ipxgetmaxpacketsize:
mov bx,001Ah
call [_ipxentry]
retf
public _ipxopensocket
_ipxopensocket:
push bp
mov bp,sp
push ds
mov al,[bp+6]
mov bx,[bp+8]
mov ds,[bp+10]
mov dx,[bx]
pop ds
mov bx,0000h
call [_ipxentry]
push ds
mov bx,[bp+8]
mov ds,[bp+10]
mov [bx],dx
mov ah,00h
pop ds
pop bp
retf
public _ipxclosesocket
_ipxclosesocket:
push bp
mov bp,sp
mov bx,0001h
mov dx,[bp+6]
call [_ipxentry]
pop bp
retf
public _ipxlistenforpacket
_ipxlistenforpacket:
push bp
mov bp,sp
push si
push es
mov bx,0004h
mov si,[bp+6]
mov es,[bp+8]
call [_ipxentry]
mov ah,00h
pop es
pop si
pop bp
retf
public _ipxsendpacket
_ipxsendpacket:
push bp
mov bp,sp
push si
push es
mov bx,0003h
mov si,[bp+6]
mov es,[bp+8]
call [_ipxentry]
pop es
pop si
pop bp
retf
public _ipxrelenquishcontrol
_ipxrelenquishcontrol:
mov bx,000Ah
call [_ipxentry]
retf
end
;---End---
clinet.c
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include "ipx.h"
IPXADDRESS myaddress;
IPXECB recb;
IPXHEADER rheader;
unsigned char rbuffer[80];
int i;
//------------------------------------------------------------------------------
void main ( void )
{
if(!ipxinit())
{
printf("IPX not installed/n");
exit(1);
}
myaddress.socket=reverseword(0x2000);
switch(ipxopensocket(0x00,&myaddress.socket))
{
case 0x00: // Success
printf("Socket %04X/n",reverseword(myaddress.socket));
break;
case 0xFE:
printf("Socket Table Full/n");
exit(1);
case 0xFF:
printf("Socket Already Open/n");
exit(1);
}
recb.socket=myaddress.socket;
recb.esraddress=NULL;
recb.fragcount=2;
recb.fragaddr1=&rheader;
recb.fragsize1=sizeof(IPXHEADER);
recb.fragaddr2=rbuffer;
recb.fragsize2=sizeof(rbuffer);
ipxlistenforpacket(&recb);
printf("Waiting for packet/n");
while(!kbhit())
{
ipxrelenquishcontrol();
if(!recb.inuse)
{
printf("Packet Received/n");
printf(" from %02X:%02X:%02X:%02X %02X:%02X:%02X:%02X:%02X:%02X/n",rheader.source.netadd[0],rheader.source.netadd[1],rheader.source.netadd[2],rheader.source.netadd[3],rheader.source.nodeadd[0],rheader.source.nodeadd[1],rheader.source.nodeadd[2],rheader.source.nodeadd[3],rheader.source.nodeadd[4],rheader.source.nodeadd[5]);
printf(" from socket %04X/n",reverseword(rheader.source.socket));
break;
}
}
while(kbhit()) getch();
ipxclosesocket(myaddress.socket);
}
我想在DOS部分可以得到服务器端发过来的信息(username=user04 clear=0)应该如果改呢??
开发工具:Borland C++ 3.1
编译模式:Tiny 或 Large
IPX.ASM Large编译模式代码:
;-------Start--------
.model large
.data
public _ipxentry
_ipxentry dd 0
.code
public _reverseword
_reverseword:
push bp
mov bp,sp
mov ax,[bp+6]
xchg ah,al
pop bp
retf
public _ipxinit
_ipxinit:
push di
push es
mov ax,7A00h
int 2Fh
cmp al,0FFh
jnz _ipxinit0
mov word ptr [_ipxentry+0],di
mov word ptr [_ipxentry+2],es
_ipxinit0:
mov dx,word ptr [_ipxentry+2]
mov ax,word ptr [_ipxentry+0]
pop es
pop di
retf
public _ipxgetaddress
_ipxgetaddress:
push bp
mov bp,sp
mov bx,0009h
mov si,[bp+6]
mov es,[bp+8]
call [_ipxentry]
pop bp
retf
public _ipxgetmaxpacketsize
_ipxgetmaxpacketsize:
mov bx,001Ah
call [_ipxentry]
retf
public _ipxopensocket
_ipxopensocket:
push bp
mov bp,sp
push ds
mov al,[bp+6]
mov bx,[bp+8]
mov ds,[bp+10]
mov dx,[bx]
pop ds
mov bx,0000h
call [_ipxentry]
push ds
mov bx,[bp+8]
mov ds,[bp+10]
mov [bx],dx
mov ah,00h
pop ds
pop bp
retf
public _ipxclosesocket
_ipxclosesocket:
push bp
mov bp,sp
mov bx,0001h
mov dx,[bp+6]
call [_ipxentry]
pop bp
retf
public _ipxlistenforpacket
_ipxlistenforpacket:
push bp
mov bp,sp
push si
push es
mov bx,0004h
mov si,[bp+6]
mov es,[bp+8]
call [_ipxentry]
mov ah,00h
pop es
pop si
pop bp
retf
public _ipxsendpacket
_ipxsendpacket:
push bp
mov bp,sp
push si
push es
mov bx,0003h
mov si,[bp+6]
mov es,[bp+8]
call [_ipxentry]
pop es
pop si
pop bp
retf
public _ipxrelenquishcontrol
_ipxrelenquishcontrol:
mov bx,000Ah
call [_ipxentry]
retf
end
;---End---
clinet.c
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include "ipx.h"
IPXADDRESS myaddress;
IPXECB recb;
IPXHEADER rheader;
unsigned char rbuffer[80];
int i;
//------------------------------------------------------------------------------
void main ( void )
{
if(!ipxinit())
{
printf("IPX not installed/n");
exit(1);
}
myaddress.socket=reverseword(0x2000);
switch(ipxopensocket(0x00,&myaddress.socket))
{
case 0x00: // Success
printf("Socket %04X/n",reverseword(myaddress.socket));
break;
case 0xFE:
printf("Socket Table Full/n");
exit(1);
case 0xFF:
printf("Socket Already Open/n");
exit(1);
}
recb.socket=myaddress.socket;
recb.esraddress=NULL;
recb.fragcount=2;
recb.fragaddr1=&rheader;
recb.fragsize1=sizeof(IPXHEADER);
recb.fragaddr2=rbuffer;
recb.fragsize2=sizeof(rbuffer);
ipxlistenforpacket(&recb);
printf("Waiting for packet/n");
while(!kbhit())
{
ipxrelenquishcontrol();
if(!recb.inuse)
{
printf("Packet Received/n");
printf(" from %02X:%02X:%02X:%02X %02X:%02X:%02X:%02X:%02X:%02X/n",rheader.source.netadd[0],rheader.source.netadd[1],rheader.source.netadd[2],rheader.source.netadd[3],rheader.source.nodeadd[0],rheader.source.nodeadd[1],rheader.source.nodeadd[2],rheader.source.nodeadd[3],rheader.source.nodeadd[4],rheader.source.nodeadd[5]);
printf(" from socket %04X/n",reverseword(rheader.source.socket));
break;
}
}
while(kbhit()) getch();
ipxclosesocket(myaddress.socket);
}
我想在DOS部分可以得到服务器端发过来的信息(username=user04 clear=0)应该如果改呢??