胡汉三66 的学生作业:
client.c
#include "tcpsocket.h"
#include "file_transfer.h"
#include
// TCP 客户端
// ./server ip port
int main(int argc, const char *argv[])
{
int cfd;
if(argc != 4){
fprintf(stderr,"Usage : %s < ip > < port > < pathname >.\n",argv[0]);
exit(EXIT_FAILURE);
}
cfd = create_tcp_client_socket(argv[1],atoi(argv[2]));
if(cfd == -1)
exit(EXIT_FAILURE);
upload_file(argv[3],cfd);
close(cfd);
return 0;
}
server.c
#include "tcpsocket.h"
#include "file_transfer.h"
#include "debug.h"
#include
#include
void *do_task(void *arg) // 线程执行函数
{
int cfd = *(int *)arg;
client_upload_file(cfd);
close(cfd);
pthread_exit(NULL);
}
// TCP 服务器
// ./server ip port
int main(int argc, const char *argv[])
{
int sfd,cfd;
struct sockaddr_in cli_addr;
int ret;
pthread_t tid;
if(argc != 3){
fprintf(stderr,"Usage : %s < ip > < port >.\n",argv[0]);
exit(EXIT_FAILURE);
}
sfd = create_tcp_server_socket(argv[1],atoi(argv[2]));
if(sfd == -1)
exit(EXIT_FAILURE);
for(;;){
bzero(&cli_addr,sizeof(struct sockaddr_in));
cfd = wait_for_connect(sfd,&cli_addr);
if(cfd == -1)
exit(EXIT_FAILURE);
show_tcp_network_address(&cli_addr);
ret = pthread_create(&tid,NULL,do_task,(void *)&cfd); // 创建子线程
if(ret != 0){
DEBUG_INFO("[ERROR] : %s\n",strerror(ret));
exit(EXIT_FAILURE);
}
pthread_detach(tid); // 线程分离
}
close(sfd);
return 0;
}
【图片】