免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1167 | 回复: 0
打印 上一主题 下一主题

BSD socket通信求教 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-12-08 16:55 |只看该作者 |倒序浏览
第一次开发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;
}

谢谢,谢谢,再谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP