📄 serve.c
字号:
#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<arpa/inet.h>
#include<fcntl.h>
#include<unistd.h>
#define SERVPORT 2222
#define BACKLOG 8
int main()
{
//临时缓冲区
char buff[100];
int sin_size,numbytes;
//sock_fd:监听socket;client_fd:数据传输socket
int sockfd,client_fd;
//本地地址信息
struct sockaddr_in my_addr;
//客户端地址信息
struct sockaddr_in remote_addr;
int fd,size;
char buffer[80];
//fd=open("/tmp/temp.txt",O_WRONLY|O_CREAT|O_TRUNC);
/*write(fd,s,sizeof(s));
close(fd);
fd=open("/tmp/temp.txt",O_RDONLY);
size=read(fd,buffer,sizeof(buffer));
//close(fd);
printf("%s",buffer);
*/
//创建socket
if((sockfd=socket(AF_INET,SOCK_STREAM, 0))==-1)
{
perror("socket");
exit(1);
}
printf("socket Success!,sockfd= %d \n",sockfd);
//ipv4
my_addr.sin_family=AF_INET;
//服务器端口
my_addr.sin_port=htons(SERVPORT);
//内核指定服务器IP地址
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);
}
printf("bind sucess! \n");
//监听连接
if(listen(sockfd,BACKLOG)==-1)
{
perror("listen");
exit(1);
}
while(1)
{sin_size=sizeof(struct sockaddr_in);
if((client_fd=accept(sockfd,(struct sockaddr *)&remote_addr,
&sin_size))==-1)
{perror("accept");
exit(1);
}
//连接成功建立
printf("recieved a connection from %s\n",inet_ntoa(remote_addr.sin_addr));
/* if(!fork())
{
if((numbytes=recv(client_fd,buff,strlen(buff),0))== -1)
{
perror("recv");
exit(1);
}
printf("%s\n",buff);
if(send(client_fd,"Welcome,this is sever.",strlen(buff),0)== -1)
perror("send");
close(client_fd);
exit(0);
}*/
while(1)
{//接收数据
if(0==recv(client_fd,buffer,100,0))
{break;
buff[100]='\0';}
else
printf("%s \n",buffer);
fd=open("/tmp/temp.txt",O_WRONLY|O_CREAT|O_TRUNC);
write(fd,buffer,sizeof(buffer));
close(fd);
fd=open("/tmp/temp.txt",O_RDONLY);
size=read(fd,buffer,sizeof(buffer));
printf("%s",buffer);
//回收数据
if (0==send(client_fd,buffer,100,0))
break;
// printf("recieve data:%s \n",buff);
//清除缓冲区
memset(buffer,0,100);
}
//关闭套接字
close(client_fd);
break;
}
// close(sockfd);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -