⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 server.cpp

📁 tcp/ip应用实现 保护server/clinet,
💻 CPP
字号:
#include <sys/socket.h>
#include <stdio.h>

#define SERVPORT 3333		//服务器监听端口
#define BACKLOG  10			//最大同时连接的请求数

int main(int argc, char *argv[])
{
	int 	socketfd;		//监听fd
	int		clientfd;		//数据传送fd
	struct sockaddr_in 	my_addr;	//本机的地址信息
	struct sockaddr_in	remot_addr;	//客户端地址信息
	char 	*szMsg = "Hello, you are connected!\n";
	int		nLen,nBytes_send;
	//创建socket
	if((socketfd = socket(AF_INIT,SOCKET_STREAM,0)) == -1)
	{
		perror("SOCKET创建失败!");
		exit(-1);
	}
	
	//初始化本机的地址信息
	my_addr.sin_family = AF_INIT;
	my_addr.sin_port = htons(SERVPORT);
	my_addr.sin_addr.s_addr = INADDR_ANY;
	bzero(&(my_addr.sin_zero),8);
	
	//bind
	if (bind(socketfd,(struct sockaddr_in *)&my_addr,sizeof(struct sockaddr_in)) == -1)
	{
		perror("BIND ERROR!");
		exit(-1);
	}
	
	//listen	
	if (listen(socketfd, BACKLOG) == -1)
	{
		perror("listen error!");
		exit(-1);
	}
	
	while(1)
	{
		if ((client_fd = accept(socketfd,(struct sockaddr_in *)&remote_addr, \
			&sizeof(struct sockaddr_in))) == -1)
		{
			perror("accept error!");
			continue;
		}
		printf("Recive a connection from:%s\n ", inet_ntoa(remote_addr.sin_addr));
		
		if (!fork())
		{
			
			while(1)
			{
				nLen = srlen(szMsg);
				
				//send
				if ((nBytes_send = send(client_fd, szMsg, nLen, 0)) == -1)
				{
					perror("send error!");
					close(client_fd);
					exit(0);
				}
				//lenght do't equal
				if (nBytes_send != nLen)
				{
					perror("发送信息不完整");
					continue;
				}
				else
					break;
			}
		}
		close(client_fd);
	}
	
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -