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

📄 server.c

📁 在Linux环境下采用socket机构实现通信。 用户可以自己建立文档来测试。内附说明。
💻 C
字号:
/* * SocketServer.c * */#include "sockcom.h"int initSocket() {	int sockfd, length;	struct sockaddr_in server;	char buf[BUFSIZE];	sockfd=socket(AF_INET, SOCK_STREAM,0);	if (sockfd<0) error("Error open socket.");	server.sin_family=AF_INET;	server.sin_addr.s_addr=INADDR_ANY;	server.sin_port=htons(PORT);	if (bind(sockfd,(struct sockaddr *)&server, sizeof(server))<0) error("Error bind addr and port.");	length=sizeof(server);	if (getsockname(sockfd, (struct sockaddr *)&server, &length)<0) printf("getting socket name\n");	printf("socket port #%d\n", ntohs(server.sin_port));	listen(sockfd, 5);	return sockfd;}int main(int argc, char *argv[]){	int sockfd, newsockfd, length, n;	char buf[BUFSIZE];	sockfd = initSocket();	while(1) {		newsockfd = accept(sockfd, (struct sockaddr *)0, (int *)0);		int pid;		if ((pid=fork())>0) {			close(sockfd);			bzero(buf, sizeof(buf));			FILEINFO fileinfo;			bzero(fileinfo.fname, sizeof(fileinfo.fname));			if ((n = read(newsockfd, &fileinfo, sizeof(fileinfo)))<0) error("Protocal error.");			printf("Received meta fileinfo, name: %s, length: %d\n", fileinfo.fname, fileinfo.length);			int fd=creat(fileinfo.fname, 0644);			long received=0;			while((n=read(newsockfd, buf, BUFSIZE))>0) {				write(fd, buf, n);				received+=n;				if (received==fileinfo.length) {					break;				}			}			close(fd);			printf("Receive file completed, saved to %s.\n", fileinfo.fname);			exit(0);		}		close(newsockfd);	}	return 0;}

⌨️ 快捷键说明

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