5-4
Section
Sending Commands From a Host Computer
82
16
*/
17
main(argc,argv)
18
int argc;
19
char *argv[];
20
{
21
int sockfd;
22
struct sockaddr_in , ws_addr,cv_addr;
23
char fins_cmnd[MAX_MSG],fins_resp[MAX_MSG];
24
int sendlen,recvlen,addrlen;
25
char sid=0;
26
extern recv_fail();
27
28
/
*
GENERATE UDP SOCKET
*
/
29
if((sockfd=socket(AF_INET,SOCK_DGRAM,0))<0)
30
err_exit(”can’t open datagram socket”);
31
32
/
*
ALLOCATE IP ADDRESS AND PORT # TO SOCKET
*
/
33
bzero((char*)&ws_addr,sizeof(ws_addr));
34
ws_addr.sin_family=AF_INET;
35
ws_addr.sin_addr.s_addr=htonl(INADDR_ANY);
36
ws_addr.sin_port=htons(FINS_UDP_PORT);
37
if(bind(sockfd,(struct sockaddr*)&ws_addr,sizeof(ws_addr))<0)
38
err_exit(”can’t bind local address”);
39
40
/*
41
*
GENERATE MEMORY AREA READ COMMAND
42
*
(
READ 150 WORDS FROM D00100.)
43
/*
44
fins_cmnd[0]=0x80; /*ICF*/
45
fins_cmnd[1]=0x00; /*RSV*/
46
fins_cmnd[2]=0x02; /*GCT*/
47
fins_cmnd[3]=0x01; /*DNA*/
48
fins_cmnd[4]=0x64; /*DA1*/ /
*
Ethernet Unit FINS NODE NUMBER
*
/
49
fins_cmnd[5]=0x00; /*DA2*/
50
fins_cmnd[6]=0x01; /*SNA*/
51
fins_cmnd[7]=0x32; /*SA1*/ /
*
WS FINS NODE NUMBER
*
/
52
fins_cmnd[8]=0x00; /*SA2*/
53
fins_cmnd[9]=++sid; /*SID*/
54
fins_cmnd[10]=0x01; /*MRC*/
55
fins_cmnd[11]=0x01; /*SRC*/
56
fins_cmnd[12]=0x82; /
*
VARIABLE TYPE: DM
*
/
57
fins_cmnd[13]=0x00; /
*
READ START ADDRESS: 100
*
/
58
fins_cmnd[14]=0x64;
59
fins_cmnd[15]=0x00;
60
fins_cmnd[16]=0x00; /
*
WORDS READ: 150
*
/
61
fins_cmnd[17]=0x96;
62
63
64
/*
SEND FINS COMMAND
*/
65
bzero((char*)&cv_addr,sizeof(cv_addr));
66
cv_addr.sin_family=AF_INET;
67
cv_addr.sin_addr.s_addr=inet_addr(SERV_IP_ADDR);
68
cv_addr.sin_port=htons(FINS_UDP_PORT);
69
70
singnal((SIGALRM,recv_fail);
71
72
CMND_SEND:
73
sendlen = 18;
74
if(sendto(sockfd,fins_cmnd,sendlen,0,&cv_addr,sizeof(cv_addr))
==sendlen){
75
alarm(RESP_TIMEOUT); /
*
START RESPONSE MONITOR TIMER
*
/
76
printf(”send length %d¥n”,sendlen);
77
{
78
else{
79
err_exit(”send error”);
80
}
81
82
/
*
RECEIVE FINS RESPONSE
*
/