?? spxrec.c
字號:
#include <stdio.h>
#include <stdlib.h>
#include <mem.h>
#include <string.h>
#include <dos.h>
#include "ipx.h"
#include "spx.h"
#define our_socket 0x4343
#define your_socket 0x5353
#define ecb_num 5
#define max_message 100
struct SPXECB receive_ecb[ecb_num],call_ecb;
struct SPXHEADER receive_header[ecb_num],call_header;
struct STABUF reply_buffer;
volatile int event_completed_flag;
void far call_esr(void)
{
_AX=_ES;
_DS=_AX;
event_completed_flag=1;
}
void make_connection(char *packet_ptr,
int packet_len,unsigned int *connection_id)
{
int i,dest_connection_number;
unsigned int old_time;
open_socket(our_socket);
for(i=0;i<ecb_num;i++)
{
memset(&receive_ecb[i],0,sizeof(struct SPXECB));
memset(&receive_header[i],0,sizeof(struct SPXHEADER));
receive_ecb[i].socket_number=our_socket;
receive_ecb[i].packet_count=2;
receive_ecb[i].packet[0].address=&receive_header[i];
receive_ecb[i].packet[0].length=sizeof(struct SPXHEADER);
receive_ecb[i].packet[1].address=packet_ptr;
receive_ecb[i].packet[1].length=*packet_len;
spx_listen_for_sequenced_packet(&receive_ecb[i]);
}
dest_connection_number=get_1st_connection_num("ll");
if (dest_connection_num==0) return;
memset(&call_ecb,0,sizeof(struct SPXECB));
memset(&call_header,0,sizeof(struct SPXHEADER));
get_internet_address(dest_connection_number,
call_header.dest_network_number,
call_header.dest_network_node)
call_header.dest_network_socket=your_socket;
event_completed_flag=0;
call_ecb.event_service_routine=call_esr;
call_ecb.socket_number=our_socket;
call_ecb.packet_count=1;
call_ecb.packet[0].address=&call_header;
call_ecb.packet[0].length=sizeof(struct SPXHEADER);
spx_establish_connection(&call_ecb);
old_time=get_interval_marker();
while(call_ecb.in_use&&!kbhit())
{
printf("Waiting establishing connection...\n");
if (get_interval_marker()-old_time>18.2*60)
{
*connection_id=0;
return;
}
connection_id=call_ecb.source_connection_id;
}
}
int receive(void *packet_ptr,int packet_len)
{
int i;
for (i=0;i<ecb_num;i++)
{
if ((receive_ecb[i].in_use==0)&&(receive_ecb[i].completion_code==0))
break
}
if (i>=ecb_num)
return
else
{
memset(&receive_ecb[i],0,sizeof(struct SPXECB));
memset(&receive_header[i],0,sizeof(struct SPXHEADER));
receive_ecb[i].socket_number=our_socket;
receive_ecb[i].packet_count=2;
receive_ecb[i].packet[0].address=&receive_header[i];
receive_ecb[i].packet[0].length=sizeof(struct SPXHEADER);
receive_ecb[i].packet[1].address=packet_ptr;
receive_ecb[i].packet[1].length=packet_len;
connection_id=connect_id;
spx_listen_for_sequenced_packet(&receive_ecb[i]);
return (1);
}
}
main()
{
int i,message_len,message_num=0;
unsigned int *p;
unsigned int connect_id;
char receive_message[max_message];
unsigned int old_time1;
char send_message[100];
i=ipx_spx_installed();
if (i<1)
{
printf("!!SPX is not loaded, please load SPX first.\n")
return;
}
p=(unsigned int *)malloc(2);
memset(receive_message,0,max_message);
message_len=max_message;
make_connection(receive_message,message_len,p);
connect_id=*p;
free(p);
if (!connection_id)
{
close_socket(our_socket);
printf("\n!No other station answer me,
the connection can not be established!\n");
return;
}
memset(&reply_buffer,0,sizeof(struct STABUF));
spx_get_connection_status(&reply_buffer,connection_id);
while(1)
{
old_time1=get_interval_marker();
i=receive(receive_message,message_len);
if (i==1)
{
message_num=message_num+1;;
printf("Message %d received:%s\n\n".message_num,receive_message);
}
else
{
printf("Waiting for message...\n");
break;
}
while (get_interval_marker()-old_time1<19);
memset(&reply_buffer,0,sizeof(struct STABUF));
spx_get_connection_status(&reply_buffer,connection_id);
if (!reply_buffer.connect_status)
{
close_socket(our_socket);
return;
}
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -