Created
March 5, 2020 13:57
-
-
Save lau-jay/3b444ce31663de8d8c26416e0a343e51 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdlib.h> | |
#include <string.h> | |
#include <unistd.h> | |
#include <arpa/inet.h> | |
#include <sys/socket.h> | |
#define BUF_SIZE 1024 | |
void error_handling(char *message); | |
int main(int argc, char *argv[]) | |
{ | |
int serv_sock, clnt_sock; | |
char message[BUF_SIZE]; | |
int str_len, i; | |
struct sockaddr_in serv_adr, clnt_adr; | |
socklen_t clnt_adr_sz; | |
if(argc!=2){ | |
printf("Usage: %s <port>\n", argv[0]); | |
exit(1); | |
} | |
serv_sock = socket(PF_INET, SOCK_STREAM, 0); | |
if(serv_sock == -1) | |
error_handling("socket() error"); | |
memset(&serv_adr, 0, sizeof(serv_adr)); | |
serv_adr.sin_family=AF_INET; | |
serv_adr.sin_addr.s_addr=htonl(INADDR_ANY); | |
serv_adr.sin_port=htons(atoi(argv[1])); | |
if(bind(serv_sock, (struct sockaddr*)&serv_adr, sizeof(serv_adr))==-1) | |
error_handling("bind() error"); | |
if(listen(serv_sock, 5)==-1) | |
error_handling("listen() error"); | |
clnt_adr_sz = sizeof(clnt_adr); | |
for(i=0;i<5;i++) | |
{ | |
clnt_sock = accept(serv_sock, (struct sockaddr*)&clnt_adr, &clnt_adr_sz); | |
if(clnt_sock==-1) | |
error_handling("accept() error"); | |
else | |
printf("Connected client %d \n", i+1); | |
while((str_len=read(clnt_sock, message, BUF_SIZE)) !=0) | |
{ | |
printf("get require file %s", message); | |
// TODO获取本地文件,如果未获取到close,获取到了,读取内容返回 | |
write(clnt_sock, message, str_len); | |
} | |
close(clnt_sock); | |
} | |
close(serv_sock); | |
return 0; | |
} | |
void error_handling(char *message) | |
{ | |
fputs(message, stderr); | |
fputc('\n', stderr); | |
exit(1); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment