|
then please suggest me some solution
Trioum
|
|
|
|
|
Without seeing your code I may just suggest you to fix it...
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
I agree with CPallini, this is unlikely to be related to an internal buffer. We would need more detailed information to help you with your problem, here are some suggestions to look at:
1) Check in the server code that you are actually sending complete data package to every client, e.g. by comparing that the return value from send() is equal to the number of bytes and that there were no errors. A server should be able to handle a couple of thousand clients, make sure you are not running into a OS specific upper limit.
2) Check in the client code that you are actually connected to the server and debug received data, e.g. print out the number of received bytes from recv() . TCP is a stream oriented protocol, which means that when the server sends 100 bytes you might get 100 bytes or chunks of 2 times 50 bytes etc (this could confuse the receiving side).
3) If you are new to network programming it is always good to start with working examples. Have a look at Beej's guide to networking programming[^] and Winsock Programmer's FAQ[^], there are client/server examples in section 6.
Let me know if that helps
/M
|
|
|
|
|
I am using windows server 2003 and currently 200 clients connected to it regularly.
all clients are connected fine. I am sending the data to the clients frequently .
I am getting data from the data base .and using the timer of 100 miliseconds . as data change
I send the data to the client in loop one by one . every time it monitor on 100 ms for change in
database. some clients not getting data . and on next timer they get the data . problem is
occuring to any client randomly .
Trioum
|
|
|
|
|
What I find strange is that you send data to all clients and some miss one data set. With a TCP stream it is not possible that the socket forgets or jumps over one data set. I suspect that the problem is in your application code, please have a look at my previous posting and do some debugging on server and client side. If possible try to isolate the problem, provide more information or source code. In any case, a few hundred clients are no problem for your OS.
Happy bug hunting!
/M
|
|
|
|
|
Chances are there is a problem in your timer handling, such that you start sending a new message before completing the previous one.
MVP 2010 - are they mad?
|
|
|
|
|
while debugging on sevrer side while sending data . send() in returning -1 for few clients
and bytes send for some client . it is for about 20 - 30 clients randomly on every timer ticks
Trioum
|
|
|
|
|
trioum wrote: send() in returning -1
What does WSAGetLastError() return?
MVP 2010 - are they mad?
|
|
|
|
|
When you encounter and error while sending check what error code[^] you got. From MSDN:
If no error occurs, send returns the total number of bytes sent, which can be less than the number requested to be sent in the len parameter. Otherwise, a value of SOCKET_ERROR is returned, and a specific error code can be retrieved by calling WSAGetLastError.
/M
|
|
|
|
|
No buffer space is available
Trioum
|
|
|
|
|
You mean it returns WSAENOBUFS ... never had that. How big is the data you try to send when you get this error?
|
|
|
|
|
ya they are just 52 byte packet to every time to every client .
Trioum
|
|
|
|
|
Okay, I am not familiar with this and a bit of googeling gave me this information: Winsock Error[^] and WSAENOBUFFS errors in Tor[^]:
An operation on a socket or pipe was not performed because the system lacked sufficient buffer space or because a queue was full. WinSock was unable to allocate additional memory to accommodate the function request. This error indicates a shortage of resources on your computer.[...]
I am just guessing here. If this indeed a resource problem, can you try to close unneeded applications (also make sure you do not have a memory leak in your application) and alternatively run your software on a PC with more RAM? Another way to diagnose the problem, limit the server to 100 connections and then increase the value until you hit the problem (keep an eye on the overall system memory consumption e.g. with 'Windows Task Manager').
Hope this helps...
|
|
|
|
|
ya I have 2GB ram on the system and task manager shows PF usage = 1.35gb
Trioum
|
|
|
|
|
trioum wrote: ya I have 2GB ram on the system and task manager shows PF usage = 1.35gb
What does that mean, problem solved?
modified on Thursday, February 4, 2010 11:51 AM
|
|
|
|
|
Are all the clinets are on the same network/subnet?
Are you unicasting or braodcasting?
Can you ping each client machine from the server?
What is the ARP cache like on all the machines?
Are the network cards/drivers on the machines set up to accept braodcast packets if broadcasting?
Morality is indistinguishable from social proscription
|
|
|
|
|
Are all the clinets are on the same network/subnet?
no they are on internet on different ip address
Are you unicasting or braodcasting?
I do not understand simple TCP/IP and want server send data to all clients
Can you ping each client machine from the server?
no not at all server at public IP client IP I donot know how to get but can ping server from every client
What is the ARP cache like on all the machines?
can you help me in this scenerio
Are the network cards/drivers on the machines set up to accept braodcast packets if broadcasting?
Can you help me in this scenerio
Trioum
|
|
|
|
|
Are they all directly on the internet or are they hding behind NAT? If so you need to makwe sure you have NAT traversal enabled in the proxies.
A Broadcast address (255.255.255.255) is for all devices on the subnet. A Unicast address is for one machine.
If you cant ping I dont see how you can sockets to work.
ARP is hardware to IP address mapping. If you are on a LAN this is important, and thats the normal place to use sockets. On a pure IP backbone ARP isnt used of course.
Ditto the network cards.
And you say on some machines the sockets work. Hmmm.... client to server, or server to client (ie which is the watcher and which is opening the socket)?
Even on th eones that work, ie the watcher can accept an incoming socket open, can it respond sucessully with that response arriving at the initiator?
I think NAT is going to kill this dead. You need to have NAT traversal at least to have your clients IP addresses public enough to be visible to the server.
Morality is indistinguishable from social proscription
|
|
|
|
|
Are they all directly on the internet or are they hding behind NAT? If so you need to makwe sure you have NAT traversal enabled in the proxies.
answer : they all are directly on the internet
A Broadcast address (255.255.255.255) is for all devices on the subnet. A Unicast address is for one machine.
answer : This is not Broadcast sure . I donot know unicast
If you cant ping I dont see how you can sockets to work.
answer : server on public IP you can ping any where from world no proxy nat at all
ARP is hardware to IP address mapping. If you are on a LAN this is important, and thats the normal place to use sockets. On a pure IP backbone ARP isnt used of course.
answer : I think there is no need
Ditto the network cards.
And you say on some machines the sockets work. Hmmm.... client to server, or server to client (ie which is the watcher and which is opening the socket)?
answer : server on public IP is listener . and client on any where in the world open socket communication with the server with IP and port number
Even on th eones that work, ie the watcher can accept an incoming socket open, can it respond sucessully with that response arriving at the initiator?
answer : it respond succesfuully with the server
I think NAT is going to kill this dead. You need to have NAT traversal at least to have your clients IP addresses public enough to be visible to the server
answer : on one timer tick (usually 100ms) any client get the data and on next tick donot get and again get on next tick . this is happening randomly with all clients ,and I am sure all clients are connected sussefully to the server.
Trioum
|
|
|
|
|
So all are on the internet, in which case you CAN ping from server to client.
And ALL clients receive data, but only occasionally, depending on the tick? # (This is different to what you wrote initially)_
I cant really provide anymore help. If the basic IP route is up then you should be OK.
All I can suggest is sniffing the data at the hardware level, make sure it is there, ie conming and going. Etherreal type products are good for this sort of stuff.
Morality is indistinguishable from social proscription
|
|
|
|
|
Oh, and that 1 voter, whoever they are, can f*** off too.
Morality is indistinguishable from social proscription
|
|
|
|
|
Hi Friends
Is any class or solution in VC to read rss feeds from net
thanks in advance
-kk.tvm-
|
|
|
|
|
Let me Google that for you...
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
hi,
how do i use string compare to get this value
<span class="streaming-datum" id="yfs_l10_^ixic">2,190.06</span>
before that line of code,there are many other html codes before and after it.
my friend suggested to me using string compare this string "<span class="streaming-datum" id="yfs_l10_^ixic">" and if the compare value is true, do a loop and loop through the remaining text till i get a '<'
but how do i continue looking for the value after &lt;span class="streaming-datum" id="yfs_l10_^ixic"&gt;
|
|
|
|
|
You probably need to start by parsing the HTML and looking for entries with one of the keywords e.g. span to narrow the search. This article[^] may be able to help you.
MVP 2010 - are they mad?
|
|
|
|