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

📄 serv.c

📁 linux下SOCKET编写程序事例,已经验证过了的
💻 C
字号:
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdio.h>
#include <unistd.h>
//#include <sys/error.h>

int main(int argc, char *argv[]) 
{ 
	int sockfd,new_fd; 
	struct sockaddr_in server_addr; 
	struct sockaddr_in client_addr; 
	int sin_size,portnumber = 6677; 
	char buf[1024]; 
	int nSize, count=0;
	FILE* fp;
	
	/* 服务器端开始建立socket描述符 */ 
	if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1) 
	{ 
		//fprintf(stderr,"Socket error:%s\n\a",strerror(errno)); 
		exit(1); 
	} 

	/* 服务器端填充 sockaddr结构 */ 
	bzero(&server_addr,sizeof(struct sockaddr_in)); 
	server_addr.sin_family=AF_INET; 
	server_addr.sin_addr.s_addr=htonl(INADDR_ANY); 
	server_addr.sin_port=htons(portnumber); 

	/* 捆绑sockfd描述符 */ 
	if(bind(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr))==-1) 
	{ 
		fprintf(stderr,"Bind error\n\a"); 
		exit(1); 
	} 

	/* 监听sockfd描述符 */ 
	if(listen(sockfd,5)==-1) 
	{ 
		fprintf(stderr,"Listen error\n\a"); 
		exit(1); 
	} 

	while(1) 
	{ 
		/* 服务器阻塞,直到客户程序建立连接 */ 
		sin_size=sizeof(struct sockaddr_in); 
		if((new_fd=accept(sockfd,(struct sockaddr *)(&client_addr),&sin_size))==-1) 
		{ 
			fprintf(stderr,"Accept error\n\a"); 
			exit(1); 
		} 
		
		fprintf(stderr,"Server get connection from %s\n", 
		inet_ntoa(client_addr.sin_addr)); 
		/*if(write(new_fd,hello,strlen(hello))==-1) 
		{ 
			fprintf(stderr,"Write Error\n"); 
			exit(1); 
		} */
		if( (fp = fopen("./1.c", "wb+")) == NULL)
		{
			printf("open picture of mms fail!\n");
		}
		while(1)
		{			
			nSize = recv(new_fd, buf, 1024, 0);
			if(nSize == 0)
				break;
			if(fwrite(buf, 1, 1024, fp) != nSize)	
			{
				printf("write error!\n");
				fclose(fp);
				return -1;
			}	
			count += nSize;
			if(count == 1620)
				break;		 				    
		}
		/* 这个通讯已经结束 */ 
		close(new_fd); 
		/* 循环下一个 */ 
	} 
	fclose(fp);
	close(sockfd); 
	exit(0); 
} 

⌨️ 快捷键说明

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