Turbo-C
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
터보-C 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
Lua 게시판
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C/C++ Q/A
[6243] 웹서버와 http통신을 하고 싶습니다.
전산알바100만년 [jjang2bba2] 7318 읽음    2008-10-01 16:27
웹서버는 Webtob를 쓰고 있습니다.

클라이언트에서 HTTP해더를 웹서버로 send 하는 내용입니다.


//---------------------------------------------------------------------------

#include <vcl.h>
#include <winsock2.h>
#include <stdlib.h>
#include <stdio.h>
#pragma hdrstop

//---------------------------------------------------------------------------

#pragma argsused

#define BUFSIZE 102400


void err_quit(char *msg)
{
    LPVOID lpMsgBuf;
    FormatMessage(
        FORMAT_MESSAGE_ALLOCATE_BUFFER|
        FORMAT_MESSAGE_FROM_SYSTEM,
        NULL,WSAGetLastError(),
        MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),
        (LPTSTR)&lpMsgBuf,0,NULL);

    MessageBox(NULL, (LPCTSTR)lpMsgBuf, msg, MB_ICONERROR);
    LocalFree(lpMsgBuf);
    exit(-1);
}

void err_display(char *msg)
{
    LPVOID lpMsgBuf;
    FormatMessage(
        FORMAT_MESSAGE_ALLOCATE_BUFFER|
        FORMAT_MESSAGE_FROM_SYSTEM,
        NULL,WSAGetLastError(),
        MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),
        (LPTSTR)&lpMsgBuf,0,NULL);

    printf("[%s] %s",msg,(LPCTSTR)lpMsgBuf);
    LocalFree(lpMsgBuf);
}

int recvn(SOCKET s, char *buf, int len, int flags)
{
    int received;
    char *ptr = buf;
    int left = len;

    while(left>0)
    {
        received = recv(s, ptr, left, flags);
        if(received == SOCKET_ERROR)
            return SOCKET_ERROR;
        else if(received==0)
            break;
        left -= received;
        ptr += received;
    }

    return (len - left);
}


int main(int argc, char* argv[])
{
    int retval;

    WSADATA wsa;
    if(WSAStartup(MAKEWORD(2,2),&wsa)!=0)
        return -1;


   

    SOCKET sock = socket(AF_INET, SOCK_STREAM,IPPROTO_TCP);
    if(sock == INVALID_SOCKET) err_quit("socket()");



   

    SOCKADDR_IN serveraddr;
    serveraddr.sin_family = AF_INET;
    serveraddr.sin_port = htons(80);
    serveraddr.sin_addr.s_addr = inet_addr("192.168.0.5");
    retval = connect(sock, (SOCKADDR *)&serveraddr,
                    sizeof(serveraddr));
    if(retval == SOCKET_ERROR) err_quit("connect()");

   
    //데이터 통신에 사용할 변수
   
    char buf[BUFSIZE+1];
    int len;

    //서버와 데이터 통신
    while(1)
    {
        //데이터 입력
        memset(buf, 0x00, sizeof(buf));

          sprintf(buf,
          "GET http://mdms.go.kr:8088/TestServlet HTTP/1.1\r\n"
          "Connection: Keep-Alive\r\n"
          "Host: localhost\r\n"
          "Accept: text/html\r\n"
          "\r\n");


        len = strlen(buf);   
        //데이터 보내기
        retval = send(sock, buf, len, 0);
        if(retval == SOCKET_ERROR)
        {
            err_display("send()");
            break;
        }
       
        printf("[TCP 클라이언트] %d 바이트를 보냈습니다.\n",retval);
        printf("[보낸 데이터] \n%s \n",buf);

        //데이터 받기

       
        retval = recv(sock,buf,BUFSIZE,0);
        if(retval == SOCKET_ERROR)
        {
            err_display("recv()");
            break;
        }
        else if(retval == 0)
        {
            break;
        }

        //받은 데이터 출력

        buf[retval] = '\0';
        printf("[TCP 클라이언트] %d 바이트를 받았습니다. \n",retval);
        printf("[받은 데이터] %s \n",buf);

    }

    //closesocket()

    closesocket(sock);

   
    WSACleanup();

    return 0;
}

//---------------------------------------------------------------------------
웹서버의 테스트 서블릿입니다



import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;

public class TestServlet extends HttpServlet {

    /**
    * The doPost method of the servlet.

    *
    * This method is called when a form has its tag value method equals to post.
    *
    * @param request the request send by the client to the server
    * @param response the response send by the server to the client
    * @throws ServletException if an error occurred
    * @throws IOException if an error occurred
    */
   
   
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        PrintWriter out = response.getWriter();
        out.println(""); out.println("Form"); out.println(""); out.println("KLM"); out.println(""");
    }

   
    public void doGet(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
        // TODO Auto-generated method stub
               
        arg1.setContentType("text/html");
        PrintWriter out = arg1.getWriter();
       
        out.println(""); out.println("FormServlet"); out.println("Using protocol: " + arg0.getProtocol() + "
"); out.println("The URL you requested is"); String my_url = arg0.getScheme() + "://" + arg0.getServerName() + ":" + arg0.getServerPort() + arg0.getServletPath(); out.println(my_url + "
"); out.println("Your com is " + arg0.getRemoteHost() + "
"); out.println("
"); Enumeration headerNames = arg0.getHeaderNames(); while (headerNames.hasMoreElements()) { String headerName = (String)headerNames.nextElement(); String headerValue = arg0.getHeader(headerName); out.println("Header:" + headerName + " = " + headerValue + "
"); } out.println("
"); out.println("
"); out.println("
"); out.println("
"); out.println(""");
    }


}

결과 파일은 첨부 하겠습니다.

왜 안되는지 이해를 못하겠습니다.

+ -

관련 글 리스트
6243 웹서버와 http통신을 하고 싶습니다. 전산알바100만년 7318 2008/10/01
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.