///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;
}
linux C 基于TCP的网络编程基础,实现服务器与客户端的交互
最新推荐文章于 2024-01-26 10:21:57 发布