어떻게 해야하나요 ㅠ 도와주세요 ㅠ

wnldirqhrdyd의 이미지

안녕하세요
서버에서 클라이언트에게
브로드캐스팅 하는데요

sleep을 안주면 데이터가 비정상적으로 전송이되고
sleep을 주면 데이터가 정상적으로 전송이 됩니다.
브로드캐스팅 구조에서 이런식으로 슬립이 들어간다면
클라이언트의 수가 늘어날수록 느려질거라 생각이 들어서
좋은 방법 없나요? ㅠㅠ

아! 보내는 데이터는
예를 들어서 800 바이트라면 100바이트씩 끊어서 보냅니다
800바이트면 8번, 879바이트면 9번.. 이런식으루요..
끊어서 보내는 데이터가 슬립을 안주면 연결이 안되고
슬립을 주면 제대로 전송 되는 현상입니다 ㅠ

for(wi=0; wi < nBufCnt; wi++) 
{
	memset(writeBuf, 0x00,  WRITE_BUF_SIZE);
	memcpy(writeBuf, testBuf+(WRITE_BUF_SIZE*wi), WRITE_BUF_SIZE );
	RuntimeLog("  >%2d's [%s]", wi, writeBuf);
 
	// WRITE...
	write(sockfd, writeBuf, sizeof(writeBuf));		
	 usleep(100000);		
 
}

julggol의 이미지

write로 전송후 전송이 완료되었는지 select문으로 체크한후 하시면 되지 않을까요?
버퍼의 내용이 모두 전송이 되지 않은 상태에서 다시 버퍼를 덮어 씌울 수 있을것 같습니다.

wnldirqhrdyd의 이미지

제가 초보라서 잘 이해가 안가서요..

write 후에 다시 select 문을 호출해서 변경이 일어났을 경우만 write를 다시 하라는 말씀이신가요?

julggol의 이미지

select 함수의 3번째 인자에 write_fdset 을 지정할 수 있습니다.
여기에 해당 소켓을 FD_SET 하신후 select 함수를 수행하시면 해당 소켓이
데이터를 송신할 수 있는 상태인지 파악할 수 있습니다.
select 함수후 FD_ISSET 결과에 따라서 송신가능상태를 판단하시면 될것 같습니다.
저도 오래전에 한걸 기억해서 알려드리니 자세한건 select 함수의 write set 인자를
찾아보시면 해결하실 수 있을겁니다.

jick의 이미지

write 문의 결과값을 검사해서 다 못 보냈으면 덜 보낸 부분을 다시 write하는 부분이 있어야 하는데 빠졌네요.

소켓 통신에 관한 아무 책이나 찾아보시면 나올 듯.

* 그리고 첫 줄의 memset은 도대체 왜 하는 거죠?

댓글 달기

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