웹서버는 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(""");
}
}
결과 파일은 첨부 하겠습니다.
왜 안되는지 이해를 못하겠습니다.