linux C 基于TCP的网络编程基础,实现服务器与客户端的交互

///////////////////////utili.h
#include<stdio.h>
#include<sys/types.h>
#include<arpa/inet.h>
#include<sys/socket.h>
#include<string.h>
#define BUF_SIZE 128
#define backlogs 10
int Socket(int domain,int type,int protocol)
{
	int fd=socket(domain,type,protocol);
	if(fd==-1)
	{
		perror("socket error!\n");
		return -1;
	}
	return fd;
}
int Bind(int sockfd,const struct sockaddr *addr,socklen_t addrlen)
{
	int ret=bind(sockfd,addr,addrlen);
	if(ret==-1)
	{
		perror("bind error!\n");
		return -1;
	}
	return ret;
}
int Listen(int sockfd,int backlog)
{
	int ret=listen(sockfd,backlog);
	if(ret==-1)
	{
		perror("listen error!\n");
		return -1;
	}
	return ret;
}
int Start(const char *ip,int port)
{
	int fd=Socket(AF_INET,SOCK_STREAM,0);
	struct sockaddr_in seraddr;
	seraddr.sin_family=AF_INET;
	seraddr.sin_port=htons(port);
	seraddr.sin_addr.s_addr=inet_addr(ip);
	int on=1;
	setsockopt(fd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof(int));
	socklen_t addrlen=sizeof(struct sockaddr);
	Bind(fd,(struct sockaddr *)&seraddr,addrlen);
	Listen(fd,backlogs);
	return fd;
}
///////////////////////////////////////////////////////////
服务器(ser.c)
#include"utili.h"
int main(int argc,char *argv[])
{
	int ser_fd=Start(argv[1],atoi(argv[2]));
	char sendbuf[BUF_SIZE];
	char recvbuf[BUF_SIZE];
	struct sockaddr_in cliaddr;
	socklen_t addrlen=sizeof(struct sockaddr);
	int cliconn=accept(ser_fd,(struct sockaddr *)&cliaddr,&addrlen);
	if(cliconn==-1)
	{
		perror("Ser Accept Cli error!\n");
		close(cliconn);
		return -1;
	}
	else
	{
		printf("Ser Accept Cli successfully!\n");
	}
	while(1)
	{
		printf("Ser:> ");
		scanf("%s",sendbuf);
		send(cliconn,sendbuf,strlen(sendbuf)+1,0);
		recv(cliconn,recvbuf,BUF_SIZE,0);
		printf("Cli:> %s\n",recvbuf);
	}
	close(ser_fd);
	return 0;
}
/////////////////////////////////////////////////////////
客户端:(cli.c)
#include"utili.h"
int main(int argc,char *argv[])
{
	int cli_fd=socket(AF_INET,SOCK_STREAM,0);
	if(cli_fd==-1)
	{
		perror("socket error\n");
		return -1;
	}
	char recvbuf[BUF_SIZE];
	char sendbuf[BUF_SIZE];
	struct sockaddr_in seraddr;
	seraddr.sin_family=AF_INET;
	seraddr.sin_port=htons(atoi(argv[2]));
	seraddr.sin_addr.s_addr=inet_addr(argv[1]);
	socklen_t addrlen=sizeof(struct sockaddr);
	int ret=connect(cli_fd,(struct sockaddr*)&seraddr,addrlen);
	if(ret==-1)
	{
		perror("Cli connect Ser failed!\n");
		return -1;
	}
	else
	{
		printf("Cli connect Ser success!\n");
	}
	while(1)
	{
		recv(cli_fd,recvbuf,128,0);
		printf("Ser:> %s\n",recvbuf);	
		printf("Cli:>");
		scanf("%s",sendbuf);
		send(cli_fd,sendbuf,strlen(sendbuf)+1,0);
	}
	close(cli_fd);
	return 0;
}
////////////////////////////////////////////////////////////

猜你喜欢

转载自blog.csdn.net/Henry313/article/details/88926528