윈도우(클라이언트) 와 유닉스(BSD, Linux)간의 TCP/IP를 이용한

luscent의 이미지

안녕하세요..

검색해보란 얘기를 많이 들어서 일단 검색은 해보았습니다.

유닉스와 윈도우간의 소켓을 이용한 통신..

그런데.. 제가 네트웍 플밍을 첨 해보는터라. 사실 많이 부족합니다.

다름이 아니라. 윈도우 클라이언트에서 만든 구조체 데이터를

유닉스 서버에서 받아 처리가 가능합니까? 다른 컴파일러이고..

다른 OS를 가진 체제에서 만들어진 프로그램상의 데이터는

상호 교환이 가능한지를 알고 싶습니다.

많은 고견 부탁드립니다.

bugiii의 이미지

결론부터 말씀드리자면,

No problem.

약간 주의해야 하는 것이 있지만 처음부터 통신에 사용할 구조체를 컴파일러의 옵션에 따라서 잘 설정하시면 대부분 문제 없습니다.

그리고, 서로간의 바이트 순서가 다른 CPU를 사용한다면 구조체를 직접 밀어넣는 그런 방식은 받는 쪽 (or/and) 보내는 쪽에서 순서 뒤집기 처리가 필요합니다.

jinyeong의 이미지

있을 _수_도 있겠지만, bugiii 님 말씀대로 compiler의 옵션으로 잘 처리하면 되겠지요.

정 불안하시면 serialize를 하시길..

I thought what I'd do was,
I'd pretend I was one of those deaf-mutes.. or should I?

valor의 이미지

제가 알기로는 MS의 C 컴파일러는 디폴트로 구조체를 packed로 만든다고 합니다. 즉 dword align이 안맞는 변수도 그냥 다 붙이는 방식이구요,

GNU C 컴파일러는 디폴트로 packed가 아닌, 즉 dword align이 안맞으면 이 사이에 공백을 넣어준다고 합니다. 따라서 둘다 packed가 되게 하던, 둘다 packed가 안되게 하던, 아니면 아예 mis-align이 안되게 구조체를 만들어야 하지요.

제가 해본 것은 packed로 만들어서 하는 경우를 보았는데 이렇게 해주는 컴파일러 옵션을 찾지를 못해서 소스에서 직접 packed 지정을 주었었습니다.
(구조체 선언할 때 지정하는데 기억이 잘 안나네요... :wink: )

하지만 endian이 달라버리면 구조체를 두벌로 만들어야 할지도 모르죠.

오장현의 이미지

valor wrote:
제가 알기로는 MS의 C 컴파일러는 디폴트로 구조체를 packed로 만든다고 합니다. 즉 dword align이 안맞는 변수도 그냥 다 붙이는 방식이구요,

디폴트가 아닙니다.
VC++에서는 아래와 같이 해줘야 pack됩니다.

#pragma pack(1)

charsyam의 이미지

오장현 wrote:
valor wrote:
제가 알기로는 MS의 C 컴파일러는 디폴트로 구조체를 packed로 만든다고 합니다. 즉 dword align이 안맞는 변수도 그냥 다 붙이는 방식이구요,

디폴트가 아닙니다.
VC++에서는 아래와 같이 해줘야 pack됩니다.

#pragma pack(1)

default 가 아마도 8인가 4로 되어있는걸로 압니다. 고운 하루되시길...
단지 Padding 하는 방법은 gcc와 vc가 조금 틀린걸로 들은것 같다는

=========================
CharSyam ^^ --- 고운 하루
=========================

sunyzero의 이미지

XDR (External Data Representation)표준 규약을 따르면 됩니다.
이기종간에 바이너리 데이터를 주고 받을때는 이것만 따라주면 됩니다. XDR에 따라서 기준이 되는 align이 결정되는 것이지, 꼭 8, 4 바이트로 결정되어있는것은 아닙니다.

RFC 1014, XDR: External Data Representation Standard : http://www.faqs.org/rfcs/rfc1014.html
This RFC defined the encoding of data which was XDR at the time this module was originally written. It has apparently been obsoleted by RFC 1832.

RFC 1832, XDR: External Data Representation Standard : http://www.faqs.org/rfcs/rfc1832.html
Newer RFC that provides a revised definition of XDR.

========================================
* The truth will set you free.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.