간단 한 TCP 프로 토 콜 socket 프로 그래 밍 (C 언어 판 서버 와 클 라 이언 트)

최근 에 저 는 네트워크 프로 그래 밍 에 대한 사랑 으로 TCP 프로 토 콜 socket 프로 그래 밍 에 대한 정 리 를 했 습 니 다.본인 의 능력 이 한계 가 있 기 때문에 너무 간단하게 쓸 수 있 고 초보 자 에 게 만 적합 합 니 다. 큰 소 가 귀중 한 의견 을 제시 하 는 것 을 환영 합 니 다. 저 는 감격 해 마지 않 을 것 입 니 다.잔말 말고 본론 으로 들 어가 라.(아래 코드 는 VC 6.0 기반)
         아래 그림 은 일반 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);

    부족 한 점 지적 환영, 공동 학습!!

좋은 웹페이지 즐겨찾기