client.cpp

来自「这个工程实现Linux下编程实现服务器与客户端的连接」· C++ 代码 · 共 66 行

CPP
66
字号
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/wait.h>
main() {
	int sockfd,new_fd;
	struct sockaddr_in my_addr;
	struct sockaddr_in their_addr;
	int sin_size;
	//建立TCP套接口
	if((sockfd = socket(AF_INET,SOCK_STREAM,0))==-1) {
		perror("socket");
		exit(1);
	}
	//初始化结构体,并绑定2323端口
	my_addr.sin_family = AF_INET;
	my_addr.sin_port = htons(2323);
	my_addr.sin_addr.s_addr = INADDR_ANY;
	bzero(&(my_addr.sin_zero),8);
	//绑定套接口
	if(bind(sockfd,(struct sockaddr *)&my_addr,sizeof(struct 
		sockaddr))==-1)
	{
		perror("bind");
		exit(1);
	}
	//创建监听套接口
	if(listen(sockfd,10)==-1) {
		perror("listen");
		exit(1);
	}
	//等待连接
	while(1) {
		sin_size = sizeof(struct sockaddr_in);
		perror("server is run");
		//如果建立连接,将产生一个全新的套接字
		if((new_fd = accept(sockfd,(struct sockaddr *)
			&their_addr,&sin_size))==-1)
		{
			perror("accept");
			exit(1);
		}
		//生成一个子进程来完成和客户端的会话,父进程继续监听
		if(!fork()) {
			//读取客户端发来的信息
			if((numbytes = recv(new_fd,buff,strlen(buff),0))==-1)
			{
				perror("recv");
				exit(1);
			}
			printf("%s",buff);
			//将从客户端接收到的信息再发回客户端
			if(send(new_fd,buff,strlen(buff),0)==-1)
				perror("send");
			close(new_fd);
			exit(0);
		}
		close(new_fd);
	}
	close(sockfd);
}

⌨️ 快捷键说明

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