- 论坛徽章:
- 0
|
第一次开发OSI接口通信程序。我的地址部分好像一直就设的不正确,请用过的给予指教。附程序
SERVER:
/**************************************************************
program name : mktpserver.c
Describtion : Design a program to use tp interface
Author : limh
*************************************************************** */
/* TP in NetBSD include files */
#include <sys/types.h>;
#include <sys/socket.h>;
#include <netiso/tp_param.h>;
#include <netiso/iso_errno.h>;
#include <netiso/tp_user.h>;
#include <netiso/iso.h>;
/* common include file */
#include <stdio.h>;
#include <string.h>;
#include <errno.h>;
/* define */
#define PORT 6000
/* gloab var define */
extern int errno;
/* main routine */
int main(int argc,char **argv)
{
int tp4fd,tp4msgfd;
int len,on = 1;
struct sockaddr_iso isoaddr,isopeer;
char buf[256];
char *cp;
tp4fd = socket(AF_ISO,SOCK_SEQPACKET, 0);
if(tp4fd == -1)
{
perror("socket faild :" ;
exit(0);
}
if(setsockopt(tp4fd,SOL_SOCKET,SO_REUSEADDR,(char*)&on,sizeof(on))<0)
{
perror("setsockopt : " ;
exit(0);
}
/* init struct sockaddr_iso */
memset(&isoaddr,0,sizeof(struct sockaddr_iso));
isoaddr.siso_family = AF_ISO;
isoaddr.siso_tlen = 2;
/*
isoaddr.siso_addr = *(iso_addr("lmh_nb" );
*/
cp = TSEL(&isoaddr);
*cp += (PORT >;>; ;
*cp = (PORT & 0xff);
isoaddr.siso_len = sizeof(isoaddr);
if(bind(tp4fd,(struct sockaddr*)&isoaddr,sizeof(isoaddr))<0)
{
perror("bind : " ;
close(tp4fd);
exit(0);
}
if(listen(tp4fd,5)<0)
{
perror(" listen : " ;
exit(0);
}
tp4msgfd = accept(tp4fd,(struct sockaddr*)&isopeer,&len);
if(tp4msgfd < 0)
{
perror("accept :" ;
close(tp4fd);
exit(0);
}
if(recv(tp4msgfd,buf,256,0)<=0)
{
perror("rcv : " ;
close(tp4msgfd);
close(tp4fd);
exit(0);
}
close(tp4msgfd);
close(tp4fd);
return 1;
}
CLIENT:
/**************************************************************
program name : tpclient.c
Describtion : Design a client program to connect to local server
Author : limh
*************************************************************** */
/* TP in NetBSD include file */
#include <sys/types.h>;
#include <sys/socket.h>;
#include <netiso/tp_param.h>;
#include <netiso/iso_errno.h>;
#include <netiso/tp_user.h>;
#include <netiso/iso.h>;
#include <netdb.h>;
/* common include file */
#include <errno.h>;
#include <string.h>;
/* define */
#define SER_PORT 6000
/* gloab var define */
extern int errno;
/* main routine */
int main(int argc,char **argv)
{
int tp4fd,len;
struct sockaddr_iso isoaddr;
char buf[256] = "this is a test through ISO";
char *cp;
tp4fd = socket(AF_ISO,SOCK_SEQPACKET,0);
if(tp4fd == -1)
{
perror("socket : " ;
exit(0);
}
/* 如何组织该结构使其能够与本地或远程的SERVER通信?????*/
memset(&isoaddr,0,sizeof(isoaddr));
isoaddr.siso_family = AF_ISO;
isoaddr.siso_tlen = 2;
/*
isoaddr.siso_addr = *(iso_addr("localhost" );
*/
cp = TSEL(&isoaddr);
*cp += (SER_PORT >;>; ;
*cp = (SER_PORT & 0xff);
isoaddr.siso_len = sizeof(isoaddr);
if(connect(tp4fd,(struct sockaddr*)&isoaddr,sizeof(isoaddr)) < 0)
{
perror("connect : " ;
close(tp4fd);
exit(0);
}
if(send(tp4fd,buf,sizeof(buf),0)<=0)
{
perror("send : ");
close(tp4fd);
exit(0);
}
return 1;
}
谢谢,谢谢,再谢谢 |
|