📄 server.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 + -