5 详细设计
1. 。
2. 关于 server 端的设计步骤如下:
(1)初始化本地(server)的套接字地址结构 localaddr
memset(&localaddr,0,sizeof(struct sockaddr_in));
localaddr.sin_family=AF_INET;
localaddr.sin_port=htons(atoi(argv[2]));
localaddr.sin_addr.s_addr = htonl(INADDR_ANY);
//设置端口重用作服务器要绑定【bind】本地 IP 地址上进行监听【listen】机器上能有多块网卡也有多
IP 地址时候要选择绑定哪 IP 上面指定 INADDR_ANY 系统绑定默认网卡【即 IP 地址】
作客户端要连接【connect】远端服务器也要指定远端服务器(ip, port)对
当种情况下能 IP 地址指定 INADDR_ANY 系统会疯掉
int opt = SO_REUSEADDR;
setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt));
(2)为套接字绑定本地地址协议
if(bind(sockfd,(struct sockaddr *)&localaddr,sizeof(localaddr))==-1)
{
perror("[Bind() error.]");
exit(1);
}
(3)初始化组播的套接字地址结构
memset(&peeraddr,0,sizeof(struct sockaddr_in));
peeraddr.sin_family=AF_INET;
if(inet_pton(AF_INET,argv[1],&peeraddr.sin_addr)<=0)
{
printf("[Wrong multicast IP address]\n");
exit(0);
}
peeraddr.sin_port=htons(atoi(argv[2]));
(4)sever 端处理接收数据
while(1)
{ memset(msg,0,255);
//printf("%s%d\t\t\t\t\t%d\n",msg,a++,(strlen(msg)-1));
if(read(sockfd,msg,255,0) <= 0)
{
perror("read:");
exit(1);
}
if((strlen(msg)-1)>0)