간단 한 TCP 프로 토 콜 socket 프로 그래 밍 (C 언어 판 서버 와 클 라 이언 트)
아래 그림 은 일반 socket 프로 그래 밍 그림 입 니 다.
서버 생 성:
가 져 온 이 컴퓨터 이름 은 이 컴퓨터 의 IP 주 소 를 분석 하 는 데 사 용 됩 니 다.이 어 IP 주 소 를 연결 하 는 데 성공 한 후에 서버 는 감청 상태 에 있 고 클 라 이언 트 의 연결 을 기다 리 고 있 습 니 다.즉, 다음은 TCP / IP 의 세 번 의 악수 조작 으로 서버 와 클 라 이언 트 가 통신 할 수 있 습 니 다.다음은 주석 코드 입 니 다.
void socketConnect()
{
char Server_name[128];
WSADATA wsaData;
struct hostent *hp;
struct sockaddr_in addrServer;
WSAStartup(0x202, &wsaData);
sockfd = socket(AF_INET, SOCK_STREAM, 0); //socket
gethostname(Server_name, 128);
hp = gethostbyname(Server_name); //
printf(" : %s
", Server_name);
memset(&addrServer, 0, sizeof(addrServer)); //
memcpy(&(addrServer.sin_addr), hp->h_addr, hp->h_length); // IP
addrServer.sin_family = AF_INET; //
addrServer.sin_port = htons((unsigned short)SERVER_PORT); //
//bind.... ip
if(SOCKET_ERROR == bind(sockfd, (LPSOCKADDR)&addrServer, sizeof(addrServer)))
{
printf("Bind socket error!
");
//exit(1);
}
else
{
printf(" socket success...
");
}
listen(sockfd, 5); //listening...
printf(" ...
");
ZeroMemory((void *)&addrtemp, sizeof(addrtemp));
nlen = sizeof(addrtemp);
connfd = accept(sockfd, &addrtemp, &nlen); //accept...
printf("accept client success...
");
}
클 라 이언 트 의 생 성:
사실 클 라 이언 트 와 서버 코드 는 차이 가 많 지 않 습 니 다. 맨 뒤의 connect () 함수 일 뿐 입 니 다. 서버 가 accept () 함수 에서 클 라 이언 트 를 기다 리 는 링크 를 막 은 다음 에 세 번 의 악 수 를 통 해 성공 하면 서버 와 클 라 이언 트 가 통신 할 수 있 습 니 다.
WSAStartup(0x202, &wsaData);
if( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0 ) //socket...
{
printf("socket error!
");
exit(1);
}
gethostname(Server_name, 128);
host = gethostbyname(Server_name); //
printf(" : %s
", Server_name);
memset(&addrServer, 0, sizeof(addrServer)); //
memcpy(&(addrServer.sin_addr), host->h_addr, host->h_length); // ip
addrServer.sin_family = AF_INET; //
addrServer.sin_port = htons((unsigned short)SERVER_PORT); //
//connect....
if(connect(sockfd, (struct sockaddr *)&addrServer, sizeof(struct sockaddr)))
{
printf("connect error!
");
exit(1);
}
printf(" connec success...
");
다음은 send () 와 recv () 함수 입 니 다.
//send...
scanf("%s", sendBuf);
getchar();
if( (sendbytes = send(connfd, sendBuf, strlen(sendBuf), 0)) <= 0)
{
printf("send error !
");
continue;
}
memset(sendBuf, 0, sizeof(sendBuf));
//recv...
memset(recvBuf, 0, sizeof(recvBuf));
if( (recvbytes = recv(connfd, recvBuf, sizeof(recvBuf), 0)) <= 0)
{
printf("recv error!
");
exit(1);
}
printf("recvbytes = %d
", recvbytes);
printf("recv from client : %s
", recvBuf);
부족 한 점 지적 환영, 공동 학습!!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Linux Shell 프로 그래 밍 - 텍스트 처리 grep, sed사용자 가 지정 한 '모드' 에 따라 대상 텍스트 를 일치 하 게 검사 하고 일치 하 는 줄 을 인쇄 합 니 다. ##포함 되 지 않 음, 역방향 일치 \ ##키워드 앞 뒤 가 맞지 않 고 키워드 만 일치 합 니 다...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.