소켓 질문드립니다.
늘다
#include netdb.h
#include netinet/in.h
#include sys/socket.h
int main(int argc, char *argv[])
{
int i,fd,port,rt;
struct hostent *pl;
struct sockaddr_in serveradd;
char data[50];
data[0]=0;
fd = socket(AF_INET, SOCK_STREAM,0);
if (fd0){
printf(socket error\n);
return -1;
}
if((pl=gethostbyname(문자열주소))==NULL) {
printf(hostname conversion error\n);
return -2;
}
port = atoi(argv[1]);
printf (sock data : %d \t port number:%d\n, fd, port);
bzero((char*)&serveradd, sizeof(serveradd));
serveradd.sin_family = AF_INET;
bcopy((char *)pl-h_addr, (char *)&serveradd.sin_addr.s_addr, pl-h_length serveradd.sin_port = htons(port);
rt = connect (fd, (struct sockaddr *)&serveradd, sizeof(serveradd));
if (rt 0) printf (connection error\n);
read (fd, &data, 49 );
// write (1, &data, sizeof(data));
printf (%s\n, data); return 1;
}
client 소스입니다. 그런데, 이걸 보는데 주소를 문자열로 해서 접속하는데요. 유닉스/리눅스에서 돌리는 건데. 이 소스를 봐도 이해가 되지 않습니다. 이 소스에 대해서 설명 좀 해주세요~~~;;
유닉스 소켓은 잘 모르겠어요..;
port 입력까지 받아서 port를 접속하는 것이라고 봤는데, 문자열 주소는 미리 지정되어 있고요..
그런데 bzero는 뭔가요~??
음 connection이 있으면, 서버에서 accept해야하는 거죠?
근데 만약 서버와 클라이언트가 데이터를 주고 받으면 client에도 accept 뭐 그런 거 있어야 하나요~???
-
하연
클라이언트에서는 Accept가 필요없답니다 (Accept 함수는 서버에서 클라이언트의
연결요청(Connect함수로 인한 연결요청) 을 받아들이는 역할을 합니다)
클라이언트에서는 윈도우즈기준으로 WSAStartup,socket,bind,connect,WSACleanup 이 보통
필요합니다. connect가 되면 이제 send, recv 함수를 통해 주고받는것이죠!