우분투 소켓 프로그래밍 컴파일 관련 질문있습니다!
최근 컴퓨터 네트워크 공부 관련해서 여러 블로그를 통해 소켓 프로그래밍을 공부하고 있습니다.
다른 프로그래머님의 블로그에서 server에서 client로 파일을 전송하는 코드를 컴파일 하고 싶은데, 어떻게 해야 할지 잘 모르겠습니다.
혹시 우분투 환경에서 어떻게 컴파일 하는지 자세히 알려주시면 정말 감사하겠습니다.
IP는 127.0.0.1 Port는 4008로 하고 싶습니다
#include #include #include #include #include #include #include #include
#define BUFSIZE 30
void error_handling(char *message);
int main(int argc, char **argv)
{
int serv_sd;
int clnt_sd;
int fd;
char buf[BUFSIZE];
char cbuf[BUFSIZE];
struct sockaddr_in serv_addr;
struct sockaddr_in clnt_addr;
int clnt_addr_size;
int len;
if(argc!=2){
printf("Usage : %s \n", argv[0]);
exit(1);
}
serv_sd=socket(PF_INET, SOCK_STREAM, 0);
if(serv_sd == -1)
error_handling("socket() error");
memset(&serv_addr, 0, sizeof(serv_addr));
serv_addr.sin_family=AF_INET;
serv_addr.sin_addr.s_addr=htonl(INADDR_ANY);
serv_addr.sin_port=htons(atoi(argv[1]));
if( bind(serv_sd, (struct sockaddr*) &serv_addr, sizeof(serv_addr))==-1 )
error_handling("bind() error");
if( listen(serv_sd, 5)==-1 )
error_handling("listen() error");
clnt_addr_size=sizeof(clnt_addr);
clnt_sd=accept(serv_sd, (struct sockaddr*)&clnt_addr,&clnt_addr_size);
if(clnt_sd==-1)
error_handling("accept() error");
/* 문서의 이름 을 수신 합 */
len = read(clnt_sd, cbuf, BUFSIZE);
write(1, cbuf, len);
/* 접속해오는 클라이언트에게 전송해줄 파일 오픈 */
fd = open( cbuf, O_RDONLY );
if(fd == -1)
error_handling("File open error");
/* 클라이언트에 데이터 전송 */
while( (len=read(fd, buf, BUFSIZE)) != 0 )
{
write(clnt_sd, buf, len);
}
/* 데이터 전송후 소켓의 일부(전송영역)를 닫음 */
if( shutdown(clnt_sd, SHUT_WR) == -1 )
error_handling("shutdown error");
/* 인사의 메시지를 수신 함 */
len = read(clnt_sd, cbuf, BUFSIZE);
write(1, cbuf, len);
close(fd);
close(clnt_sd);
return 0;
}
void error_handling(char *message)
{
fputs(message, stderr);
fputc('\n', stderr);
exit(1);
#include #include #include #include #include #include #include #include
#define BUFSIZE 30
void error_handling(char *message);
int main(int argc, char **argv)
{
int fd;
int sd;
char buf[BUFSIZE];
char cbuf[BUFSIZE];
int len;
struct sockaddr_in serv_addr;
if(argc!=3){
printf("Usage : %s \n", argv[0]);
exit(1);
}
/* 수신 한 데이터를 저장 할 파일 오픈 */
fd = open("receive.dat", O_WRONLY|O_CREAT|O_TRUNC);
if(fd == -1)
error_handling("File open error");
/* 서버 접속을 위한 소켓 생성 */
sd=socket(PF_INET, SOCK_STREAM, 0);
if(sd == -1)
error_handling("socket() error");
memset(&serv_addr, 0, sizeof(serv_addr));
serv_addr.sin_family=AF_INET;
serv_addr.sin_addr.s_addr=inet_addr(argv[1]);
serv_addr.sin_port=htons(atoi(argv[2]));
if( connect(sd, (struct sockaddr*)&serv_addr, sizeof(serv_addr))==-1 )
error_handling("connect() error!");
/* 원하는 데이터를 입력 */
fgets(cbuf, 10, stdin);
write(sd, cbuf, 5);
/* 데이터를 전송 받아서 파일에 저장한다 */
while( (len=read(sd, buf, BUFSIZE )) != 0 )
{
write(fd, buf, len);
}
/* 전송해 준것에 대한 감사의 메시지 전달 */
write(sd, "Thank you\n", 10);
close(fd);
close(sd);
return 0;
}
void error_handling(char *message)
{
fputs(message, stderr);
fputc('\n', stderr);
exit(1);
}
진행 과정
현재 두개의 터미널을 켜서 gcc -o server server.c // gcc -o client client.c 까지 한 상태입니다.
제가 아직 많이 부족한 상태라 자세히 알려주시면 열심히 배우도록 하겠습니다.
똑똑한 프로그래머님들의 아낌없는 조언 부탁드립니다ㅠㅠ
일단 해보고 문제 생기면 그 때 질문하세요.
일단 해보고 문제 생기면 그 때 질문하세요.
답변으로 강좌를 해드릴 순 없습니다.
넵! 끝까지 해보겠습니다!
넵! 끝까지 해보겠습니다!
댓글 달기