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

📄 serve.c

📁 linux下用C编写的TCP/IP 数据传送程序
💻 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 + -