简易TCP服务器搭建

12 篇文章 0 订阅
5 篇文章 0 订阅

目录

一、套接字及其分类

二、相关接口函数

三、TCP服务器搭建流程

1、创建套接字socket()

2、保存服务器信息

3、套接字绑定

4、监听客户端连接请求

5、接收客户端连接请求

6、数据收发

7、关闭套接字

四、运行结果


一、套接字及其分类

        所谓套接字(Socket),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。从所处的地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通信的接口,是应用程序与网络协议栈进行交互的接口

流式套接字 (SOCK_STREAM)
        数据以字节流的方式进行传递,无大小限制. 保证数据可靠 , 无丢失 , 顺序发送. 主要用于 TCP 协议 . 一般情况下只要选择流式方式,那内核就会默认选择 TCP 传输层协议
数据报套接字 (SOCK_DGRAM )
        主要通过数据报的方式发送,固定大小。不能保证数据可靠, 可能
丢失 , 乱序发送 . 主要用于 UDP 协议 . 一般情况下只要选择数据报方式,那内核就会默认选择 UDP 传 输层协议
原始套接字 (SOCK_RAW)
         可以对较低层次协议如 IP ICMP 直接访问

二、相关接口函数

socket(); 创建套接字 .
bind(); 绑定套接字
listen(); 监听
accept(); 接收客户端连接请求
connect(); 主动发送连接请求
close() 关闭套接字
read()/write(); 数据收发

三、TCP服务器搭建流程

1、创建套接字socket()

	//创建套接字
	int sockfd = socket(AF_INET, SOCK_STREAM, 0);
	if(sockfd == -1){
		perror("socket");
		exit(-1);
	}

2、保存服务器信息

//保存地址信息
	struct sockaddr_in addr;//该结构体用于保存某个网络地址
	
	addr.sin_family = AF_INET;//设置地址族为IPV4
	addr.sin_port = htons(9090);//设置端口号
	addr.sin_addr.s_addr = inet_addr("192.168.22.84");//分配IP地址,此处涉及两层结构体

3、套接字绑定

//套接字绑定
	if( bind(sockfd, (struct sockaddr *)&addr, sizeof(addr) ) == -1){
		perror("bind");
		exit(-1);
	}
	printf("绑定成功\n");

4、监听客户端连接请求

	if( listen(sockfd, 5) == -1 ){
		perror("监听:");
		exit(-1);
	}
	printf("监听成功\n");

5、接收客户端连接请求

//接收客户端请求
	//获取通信(连接)套接字,后续通信使用通信套接字,不使用监听套接字
	int comfd = accept(sockfd, NULL, NULL);
	if(comfd == -1){
		perror("获取通信套接字");
		exit(-1);
	}
	printf("通信套接字获取成功(接收成功)\n");

6、数据收发

//数据收发开始
	while(1){
		//memset(buf, 0, N);
		read(comfd, buf, N);
		puts(buf);
	
		//sleep(1);
	}
	
	//数据收发结束

7、关闭套接字

	//关闭套接字
	close(comfd);
	close(sockfd);

四、运行结果

服务器显示运行结果:

 1、单独运行服务器,客户端未连接

2、客户端连接服务器,但未发送数据

(1)、客户端

(2)、服务器

3、客户端发送数据

(1)客户端

 (2)服务器

4、多次测试结果

好的,以上就是本期内容了!!!

欢迎大家参考,指正!!!

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玖尾猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值