网络编程DAY2 作业

1. 脱离笔记完成TCP服务器客户端搭建

#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<unistd.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>

#define ERR_MSG(msg) do{\
	fprintf(stderr,"line: %d\n",__LINE__);\
	perror(msg);\
}while(0)

#define IP "192.168.31.159"      //ip
#define tons 12345               //端口

int main(int argc, const char *argv[])
{
	//创建流式套接字,( IPV4, 默认协议为TCP, 按默认协议 )
	int sfd = socket(AF_INET, SOCK_STREAM, 0);
	if(sfd < 0)
	{
		ERR_MSG("socket");
		return -1;
	}

	//让IP每次都可以快速被使用
	int reuse = 1;
	if(setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)) < 0)
	{
		ERR_MSG("setsockopt");
		return -1;
	}
	//绑定---,必须绑定         真实结构体根据地址族指定:AF_INET: man 7 IP
	struct sockaddr_in sin;
	sin.sin_family = AF_INET;
	sin.sin_port = htons(tons);
	sin.sin_addr.s_addr = inet_addr(IP);

	if (bind(sfd, (struct sockaddr*)&sin, sizeof(sin)) < 0)
	{
		ERR_MSG("bind");
		return -1;
	}
	printf("bind success __%d__\n",__LINE__);
	//将套接字设置为被动监听状态
	if( listen (sfd, 128) < 0)
	{
		ERR_MSG("listen");
		return -1;
	}
	printf("listen success __%d__\n",__LINE__);
	struct sockaddr_in cin;                 //存储链接成功的客户端地址
	socklen_t addrlen = sizeof(cin);
	printf("listen success __%d__\n",__LINE__);
	//从已完成连接的队列头中获取一个客户端信息,生成一个新的文件描述符
	int newfd = accept(sfd ,(struct sockaddr*)&cin ,&addrlen);
	if(newfd < 0)
	{
		ERR_MSG("accept");	
	}
	printf("[%s : %d] newfd =%d 连接成功 __%d__\n",\
			inet_ntoa(cin.sin_addr), ntohs(cin.sin_port), newfd,__LINE__);

	char buf[128] = "";
	ssize_t res = 0;
	while(1)
	{
		//清空,防止之前的数据干扰
		bzero(buf, sizeof(buf));
		//接收
		res = recv(newfd, buf, sizeof(buf), 0);
		if(res < 0)
		{
			ERR_MSG("recv");
			return -1;
		}else if(0 == res)
		{
			printf("[%s : %d] newfd =%d 客户端下线 __%d__\n",\
					inet_ntoa(cin.sin_addr), ntohs(cin.sin_port), newfd,__LINE__);	
			break;
		}
		printf("[%s : %d] newfd =%d : %s__%d__\n",\
				inet_ntoa(cin.sin_addr), ntohs(cin.sin_port), newfd,buf,__LINE__);
		//发送

		if( send(newfd, buf, sizeof(buf), 0) < 0)
		{
			ERR_MSG("send");
			return -1;	close(newfd);
		}
	}
	//关闭文件描述符	
	close(newfd);
	close(sfd);

	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
day03-手动组建fabric网络.pdf》是一份指导手册,用于教授如何手动组建Fabric网络。Fabric网络是一个分布式账本技术,可用于构建区块链解决方案。这个手册详细介绍了在组建Fabric网络时的步骤和注意事项。 首先,手动组建一个Fabric网络需要一些技术基础。手册在开始部分介绍了一些必备的知识,例如区块链和分布式账本的基本概念。学习者需要理解这些基础概念,以便更好地理解后续的内容。 手册还提供了一些实践操作的步骤。首先,需要准备网络中的各个组件,例如Peer节点、Orderer节点和Channel。手册详细介绍了如何配置这些组件,并给出了一些示例。 接下来,手册重点介绍了如何连接这些组件,以构建一个完整的Fabric网络。手册详细介绍了如何配置节点之间的通信,如何创建和加入Channel,以及如何运行智能合约。这些步骤是手动组建Fabric网络的核心内容,学习者需要仔细理解和熟悉。 除了步骤之外,手册还提供了一些注意事项和最佳实践。例如,手册强调了网络的安全性和可扩展性,提供了一些建议和建议,帮助学习者更好地设计和管理Fabric网络。 总之,《day03-手动组建fabric网络.pdf》是一份非常实用的手册,适合想要了解如何手动组建Fabric网络的人士。通过学习这个手册,学习者可以获得丰富的知识和实践经验,从而能够独立地组建和管理自己的Fabric网络

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值