tcp服务器的搭建

一.步骤
TCP服务器
1.建立sock套接字
2.绑定IP和端口号
3.监听
4.等待客户端连接
5接收/发送
二.
第一步:建立sock套接字
使用函数
int socket(int domain, int type, int protocol);
参数:
1.domain:地址族
可选
AF_UNIX, AF_LOCAL
unix(7)本地连接协议
AF_INET
ip(7)IPv4协议
AF_INET6
ipv6(7) IPv6协议
2.type:协议
SOCK_STREAM:流式套接字(TCP)
SOCK_DGRAM: 数据报文套接字(UDP)
SOCK_RAW: 原始套接字 不选用任何协议
3.protocol:参数生效值
默认为:0
指前两个参数生效

	int sockfd=socket(AF_INET,SOCK_STREAM,0);
	if(sockfd<0){
		perror("socket");
		return -1;
	}
	成功返回 套接字文件描述符

第二步:绑定IP和端口号
在绑定之前先声明声明结构体,并即将给里面成员赋值
//2>绑定IP和端口号*************!

	struct sockaddr_in server;//声明结构体,并即将给里面成员赋值
	server.sin_family=AF_INET;//表示使用IPv4地址协议
	server.sin_port=htons(54321);//端口号   将12345转化为大端序
	server.sin_addr.s_addr=inet_addr("192.168.60.5");//IP赋值

使用函数
int bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen);
参数:
sockfd:套接字文件描述符
addr:struct sockaddr * 赋值的结构体指针
addrlen:addr的长度

	if(bind(sockfd,(struct sockaddr *)&server,sizeof(server))){
		perror("bind");
		return -1;
	}
	成功返回0 

第三步:监听
使用函数
int listen(int sockfd, int backlog);
sockfd: 文件描述符
backlog:同一时刻被连接的最大值

listen(sockfd,8);//当前这个服务器,同一时刻连接客户端的最大值为8;

第四步:等待客户端连接
使用函数
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
参数:
sockfd:
addr:客户端的IP
addrlen:addr的长度:

	struct sockaddr_in client;//用来保存客户端的IP和端口号
	int len=sizeof(client);
	int fd;
	fd=accept(sockfd,(struct sockaddr *)&client,&len);
	if(fd<0){
		perror("accept");
		return -1;
	}
		成功返回客户端的fd 

第五步:接受客户端消息
使用函数
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
参数:
sockfd:
addr:客户端的IP
addrlen:addr的长度:

	char buf[50];
	while(1){
		bzero(buf,sizeof(buf));
		recv(fd,buf,sizeof(buf),0);
		printf("%s\n",buf);
	}

此时服务器搭建完成
还需搭建客服端即可联动使用
搭建该服务器所需的头文件

#include <stdio.h>
#include <sys/types.h>          
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <string.h>
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在C++中搭建TCP服务器可以通过使用网络编程库来实现。以下是一个简单的TCP服务器搭建的步骤: 1. 包含必要的头文件: ```cpp #include <iostream> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> ``` 2. 创建套接字: ```cpp int serverSocket = socket(AF_INET, SOCK_STREAM, 0); if (serverSocket == -1) { std::cout << "Failed to create socket." << std::endl; return -1; } ``` 3. 绑定IP地址和端口: ```cpp struct sockaddr_in serverAddress; serverAddress.sin_family = AF_INET; serverAddress.sin_port = htons(port); // 设置端口号 serverAddress.sin_addr.s_addr = INADDR_ANY; // 监听所有网络接口 if (bind(serverSocket, (struct sockaddr*)&serverAddress, sizeof(serverAddress)) == -1) { std::cout << "Failed to bind." << std::endl; close(serverSocket); return -1; } ``` 4. 监听连接请求: ```cpp if (listen(serverSocket, backlog) == -1) { std::cout << "Failed to listen." << std::endl; close(serverSocket); return -1; } ``` 5. 接受客户端连接: ```cpp struct sockaddr_in clientAddress; socklen_t clientAddressLength = sizeof(clientAddress); int clientSocket = accept(serverSocket, (struct sockaddr*)&clientAddress, &clientAddressLength); if (clientSocket == -1) { std::cout << "Failed to accept client connection." << std::endl; close(serverSocket); return -1; } ``` 6. 与客户端进行通信: ```cpp char buffer[1024]; int bytesRead = recv(clientSocket, buffer, sizeof(buffer), 0); if (bytesRead == -1) { std::cout << "Failed to receive data from client." << std::endl; close(clientSocket); close(serverSocket); return -1; } // 处理接收到的数据 const char* response = "Hello from server!"; int bytesSent = send(clientSocket, response, strlen(response), 0); if (bytesSent == -1) { std::cout << "Failed to send response to client." << std::endl; } ``` 7. 关闭套接字: ```cpp close(clientSocket); close(serverSocket); ``` 这是一个简单的TCP服务器搭建的示例,你可以根据自己的需求进行扩展和优化。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值