[완료] 네트워크 프로그래밍 시에, 속도를 제어하는 방법은 어떤 것이 있을까요?

diki의 이미지

cpu와 네트워크 사용량과의 상관 관계를 파악하기 위한 소켓 프로그램을 작성중입니다.

제가 작성하려는 프로그램은 서버와 클라이언트 사이에서
사용자가 지정한 양의 트래픽을 반복적으로 전송하는 것입니다.

가령 100KB/s를 지정하면 100KB/s만큼의 속도로 데이터를 무한 전송하는 것이지요.
(고립된 환경에서 실험할 것이므로, 외부의 트래픽은 생각하고 있지 않습니다.)

그런데, 간단한 소켓 프로그래밍은 수차례 작성해본 경험이 있지만,
이렇게 속도를 제어하거나 하는 정도의 코드는 작성해본 경험이 없어서 상당히 막막하네요.

해결 방법이나, 참조할 만한 라이브러리, 혹은 참조할만한 사이트를 알려주시면 정말로 감사하겠습니다.

[+] 넷 리미터 류의 프로그램을 사용하는 것을 고려해보았는데,
가급적이면 필수적인 프로세스 이외의 것은 띄우고 싶지 않습니다.

shint의 이미지

http://blog.naver.com/elastica/50078198979 이런 글이 있었습니다.

내용을보면. 일정시간동안 전송양을 정해서 보내거나 보내지 않는것입니다.

다른 방법이 있다면.
다운받을 데이터를 분산해서 받게된다면 분산된만큼 속도도 더 늘어나지 않을까 생각됩니다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

chadr의 이미지

클라이언트당 스레드로 구현한다면 sleep기능이 가장 좋긴 합니다만 현실은 1클라이언트:1스레드가 힘듭니다.

따라서 데이터 전송을 담당하는 스레드에서 각 클라이언트 컨텍스트마다 속도 조절을 하기 위한 최대 시간값과 현재 흐른 시간값,
그리고 지금까지 전송한데이터량을 기록하시면서 매 루프마다 정해진 시간을 초과하지 않았으면 데이터를 전송하고 정해진 시간을
초과했으면 나머지 시간은 쉰다음에 전송을 재개하는 식으로 하시면 됩니다.

첨부된 파일을 확인해보세요.

ps. 확장자가 cpp인경우 첨부가 안되네요. zip으로 압축해서 올립니다.
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.

댓글 첨부 파일: 
첨부파일 크기
Package icon MovieTransmiter.zip8.81 KB
Package icon MovieTransmiter.zip8.81 KB

-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.

diki의 이미지

전송되는 양을 측정해서 조절하는 방법밖에 없나 보군요.

속도 제어가 되는 프로그램의 전송량을 살펴보면,
항상 균등하게 보내지는 듯 해서 방법이 있을 것으로 생각했었는데 말이죠.

서둘러 코딩 들어가야 겠네요. ㅠ

^^

모지리의 이미지

iperf를 분석해보셔도 도움이 될거 같습니다.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.