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

📄 client-server.c

📁 C-S通信的server端程序
💻 C
字号:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <errno.h>
#define MAXBUFF 100000
#define MY_PORT 8888
/*int my_write(int fd,void *buffer,int length)
{
   int bytes_left;
   int written_bytes;
   char *ptr;
   ptr=buffer;
   bytes_left=length;
   while(bytes_left>0)
   {
      written_bytes=write(fd,ptr,bytes_left);
      if(written_bytes<=0)
      {
         if(errno==EINTR)
            written_bytes=0;
         else
            return(-1);
      }
      bytes_left-=written_bytes;
      ptr+=written_bytes;
   }
   return(0);
}

int my_read(int fd,void *buffer,int length)
{
   int bytes_left;
   int bytes_read;
   char *ptr;
   bytes_left=length;
   while(bytes_left>0)
   {
      bytes_read=read(fd,ptr,bytes_read);
      if(bytes_read<0)
      {
         if(errno==EINTR)
            bytes_read=0;
         else
            return(-1);
      }
      else if(bytes_read==0)
         break;
      bytes_left-=bytes_read;
      ptr+=bytes_read;
   }
   return(length-bytes_left);
}*/

int main(int argc ,char **argv)
{
	int listen_fd,accept_fd;
	struct sockaddr_in client_addr;
	int n;
	if((listen_fd=socket(AF_INET,SOCK_STREAM,0))<0)
	{
		printf("Socket Error:%s\n\a",strerror(errno));
		exit(1);
	}
	bzero(&client_addr,sizeof(struct sockaddr_in));
	client_addr.sin_family=AF_INET;
	client_addr.sin_port=htons(MY_PORT);
	client_addr.sin_addr.s_addr=htonl(INADDR_ANY);
	n=1;
	setsockopt(listen_fd,SOL_SOCKET,SO_REUSEADDR,&n,sizeof(int));
	if(bind(listen_fd,(struct sockaddr *)&client_addr,sizeof(client_addr))<0)
	{
		printf("Bind Error:%s\n\a",strerror(errno));
		exit(1);
	}
	listen(listen_fd,5);
	while(1)
	{
		accept_fd=accept(listen_fd,NULL,NULL);
		if((accept_fd<0)&&(errno==EINTR))
		continue;
		else if(accept_fd<0)
		{
			printf("Accept Error:%s\n\a",strerror(errno));
			continue;
		}
		if((n=fork())==0)
		{
			char buffer[MAXBUFF];
         int i,length;
			close(listen_fd);
			if ((i = recv(accept_fd, &length, sizeof (length), 0))<0){
            printf("recv error:%s\n\a", strerror(errno));
            break;
         }  
         printf("client send %d bytes!\n",length);
         int index;
         index=recv(accept_fd,buffer,length,MSG_WAITALL);
         buffer[index] = '\0' ;
         printf("read OK,I have read %d bytes!\n",index);
         FILE* fp = fopen("ouput.txt", "wb");
         if (fp == NULL){
              perror("fopen");
              exit(1);
         }
         printf("file open OK!\n");         
         fputs(buffer,fp);
         fclose(fp);
         printf("fputs OK!\n");
        close(accept_fd);
         exit(0);
		}
		else if(n<0)
		  printf("Fork Error:%s\n\a",strerror(errno));
		close(accept_fd);
	}
}

⌨️ 快捷键说明

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