| |
2010-03-17 16:34:49 2284
|
| xml 전송용 c 소스 |
 |
호석
|
|
|
첨부파일 참조 -----------------
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/stat.h>
#include <arpa/inet.h>
#define MAXBUF 10000
int main()
{
int ssock ;
int clen,szXml ;
struct sockaddr_in server_addr;
char buf[MAXBUF];
char xmlStart[] ="<?xml version=\"1.0\" encoding=\"euc-kr\"?><DOCUMENT><TELEX-HD TelexId=\"A30S\" MsgCd=\"0000\"/><DETAIL>";
char xmlData[] ="<DATA SaleDate=\"20060801\" IndexNo=\"A00013\" SaleAmt=\"2500\"/>";
char xmlEnd[] ="</DETAIL></DOCUMENT>";
//---------------------------------------------------------------
// 전송할 size 계산 szXml = sizeof(xmlHead) + sizeof(xmlData)
// -3 은 \n 문자제외
//---------------------------------------------------------------
szXml = sizeof(xmlStart) + sizeof(xmlData) + sizeof(xmlEnd) - 3 ;
printf("\n Send xml size = %d %d %d , tot = %d \n",sizeof(xmlStart) , sizeof(xmlData) , sizeof(xmlEnd),szXml);
// 소켓을 생성
if ((ssock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) {
perror("socket error : ");
exit(1);
}
clen = sizeof(server_addr);
// 소켓이 접속할 주소 지정
memset(&server_addr,0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = inet_addr("211.000.000.000");
server_addr.sin_port = htons(80);
// 지정한 주소로 접속
if (connect(ssock, (struct sockaddr *)&server_addr, clen) < 0) {
perror("connect error :");
exit(1);
}
printf("\n Socket 접속 ok \n");
memset(buf, 0x00, MAXBUF);
// 전송할 문자열 구성
printf("\n 전송할 데이터 = \n %s%s%s \n\n size = %d\n",xmlStart,xmlData,xmlEnd, szXml);
//---------------------------------------------------
// sprintf(buf, "GET /manage/poscall?interface.php?url_path=http://61.78.39.132/SAM/A20/&data_file=%s&index_file=%s&proc_date=%s&cnt=%d \r\n\r\n",
// A20_Data_File, A20_Index_File, Proc_Date, Total_Cnt);
//---------------------------------------------------
// data 생성
//
// POST /test/xml_recv.php HTTP/1.1
// Accept: */*..
// Content-Type: text/xml
// Accept-Language: ko..
// Host: 211.000.000.000
// Content-Length: 99
// Connection: Keep-Alive
// Cache-Control: no-cache
// 중요 send 함수에서 strlen 을 사용해서 구성된 정확한 문자열 길이만큼만 전송해야 한다.
//---------------------------------------------------
sprintf(buf, "POST /test/xml_recv.php HTTP/1.1\r\nAccept: */*\r\nContent-Type: text/xml\r\nAccept-Language: ko\r\nHost: 211.000.000.000\r\nContent-Length: %d\r\nConnection: Keep-Alive\r\nCache-Control: no-cache\r\n\r\n%s%s%s\r\n",szXml,xmlStart,xmlData,xmlEnd);
printf("전송되는 내용 = \n%s \n",buf);
sleep(1); // 1초대기
if( send(ssock, buf, strlen(buf), 0 ) <= 0 )
{
perror("send error :");
exit(1);
}
printf("\n 전송됨 ok \n");
memset(buf, 0x00, MAXBUF);
printf("\n 수신시작 \n");
// 수신서버에서 전송하는 문자열을 받음
if (recv(ssock, buf, MAXBUF ,0) <= 0) {
perror("read error : ");
exit(1);
}
printf("\n 수신종료 \n");
// 소켓을 닫음
close(ssock);
// 받아온 문자열을 화면에 출력
printf("\ %s\r\n", buf);
return 0;
}
|
|
|
|
|