SamstagBaron 的學(xué)生作業(yè):
tcp c file
#include
#include
#include
#include"tcptool.h"
const int BLOCKSOCK = 100;
int createTcpServer(const char* ip,short port){
int sockfd;
ssize_t rbytes = 0,sbytes = 0;
char buffer[1024] = {0};
sockfd = socket(AF_INET,SOCK_STREAM,0);
if(sockfd==-1){
perror("error for socket");
return -1;
}
struct sockaddr_in addr;
bzero(&addr,sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_port = htons(port);
addr.sin_addr.s_addr = inet_addr(ip);
int res = bind(sockfd,(const struct sockaddr*)&addr,sizeof(addr));
if(res==-1){
perror("error for bind");
return -1;
}
res = listen(sockfd,BLOCKSOCK);
if(res==-1){
perror("error for listen");
return -1;
}
return sockfd;
}
int connectToServer(const char* ip,short port){
int sockfd;
sockfd = socket(AF_INET,SOCK_STREAM,0);
if(sockfd==-1){
perror("error for socket");
return -1;
}
struct sockaddr_in addr;
bzero(&addr,sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_port = htons(port);
addr.sin_addr.s_addr = inet_addr(ip);
int res = connect(sockfd,(const struct sockaddr*)&addr,sizeof(addr));
if(res==-1){
perror("error for connet");
return -1;
}
return sockfd;
}
int listenToClient(int sockfd, struct sockaddr_in* addr){
int cfd;
socklen_t len = sizeof(struct sockaddr);
cfd = accept(sockfd,(struct sockaddr*) addr,&len);
if(cfd==-1){
perror("error for accept");
return -1;
}
return cfd;
}
void show_accepted_client(struct sockaddr_in* addr){
printf("Ip: %s \n",inet_ntoa(addr->sin_addr));
printf("Port: %d \n",ntohs(addr->sin_port));
}
ssize_t sendTcp(int sockfd,const void *buf,size_t len){
return send(sockfd,buf,len,0);
}
ssize_t recvTcp(int sockfd, void *buf,size_t len ){
return recv(sockfd,buf,len,0);
}
tcp makefile
.PHONY: all clean
SRC=$(wildcard *.c)
OBJ=$(patsubst %.c,%.o,$(SRC))
all:$(OBJ)
$(OBJ):%.o:%.c
@$(CC) $(C_FLAG) $(INCLUDE_DIR) -c $^ -o $(OBJ_DIR)/$@
server file
#include"tcptool.h"
#include"debug.h"
#include
#include"stdlib.h"
int main(int argc,char *argv[]){
if(argc!=3){
fprintf(stderr,"usage: \n",argv[0]);
}
int sockfd,sockcfd;
sockfd = createTcpServer(argv[1],atoi(argv[2]));
if(sockfd==-1){
DEBUF_INFO("create Tcp server Error");
}
struct sockaddr_in addr;
bzero(&addr,sizeof(addr));
sockcfd = listenToClient(sockfd,&addr);
if(sockcfd==-1){
exit(EXIT_FAILURE);
}
show_accepted_client(&addr);
close(sockcfd);
close(sockfd);
return 0;
}
server makefile
.PHONY: all clean
SRC=$(wildcard *.c)
OBJ=$(patsubst %.c,%.o,$(SRC))
all:$(OBJ) server
$(OBJ):%.o:%.c
@$(CC) $(C_FLAG) $(INCLUDE_DIR) -c $^ -o $@
server:$(wildcard $(OBJ_DIR)/*.o) $(OBJ)
@$(CC) $(C_FLAG) $(INCLUDE_DIR) $^ -o $(BIN_DIR)/$(SERVER)
clean:
@rm *.o
client file
#include"tcptool.h"
#include"debug.h"
#include
#include"stdlib.h"
int main(int argc,char *argv[]){
if(argc!=3){
fprintf(stderr,"usage: \n",argv[0]);
}
int sockfd;
sockfd = connectToServer(argv[1],atoi(argv[2]));
if(sockfd==-1){
DEBUF_INFO("create Tcp server Error");
}
struct sockaddr_in addr;
bzero(&addr,sizeof(addr));
close(sockfd);
return 0;
}
client makefile
.PHONY: all clean
SRC=$(wildcard *.c)
OBJ=$(patsubst %.c,%.o,$(SRC))
all:$(OBJ) server
$(OBJ):%.o:%.c
@$(CC) $(C_FLAG) $(INCLUDE_DIR) -c $^ -o $@
server:$(wildcard $(OBJ_DIR)/*.o) $(OBJ)
@$(CC) $(C_FLAG) $(INCLUDE_DIR) $^ -o $(BIN_DIR)/$(CLIENT)
clean:
rm *.o