|
You may lost some data packets in the server side.
Try to use this thinking:
while(TRUE)
{
select(); // to get socket status
if (SOCKET_ERROR)
{
//deal with the error
//WSAGetLastError() must be called
}
if (TOUT)
{
continue;
}
recv();// after that, you are ready to read some data, because select() was signaled to do something.
}
|
|
|
|
|
Ok, thats fine. I didnt know about select!
Now I get an error code 10022 which means:
"WSAEINVAL
(10022)
Invalid argument.
Some invalid argument was supplied (for example, specifying an invalid level to the setsockopt function). In some instances, it also refers to the current state of the socket—for instance, calling accept on a socket that is not listening."
Now my question. Where didnt I pass the right arguments? I dont use SetSockOpt. I called the select directly after accepting an incoming conncetion, so, before going into the thread! Accept doesnt give any errors. And I know it works, cause I can send msgs.
This is what my accept looks like, or better the whole code up to accept:
if(WSAStartup(MAKEWORD(1,1),&wsaData)!=0)
MessageBox(TEXT("Initialize"), TEXT("Error!"), MB_OK);
local.sin_addr.s_addr=INADDR_ANY;
local.sin_family=AF_INET;
local.sin_port=htons(20248);
if((server_s=socket(PF_INET, SOCK_STREAM, IPPROTO_TCP))==INVALID_SOCKET)
MessageBox(TEXT("SocketCreation"), TEXT("Error!"), MB_OK);
if(bind(server_s, (PSOCKADDR)&local, sizeof(local))==SOCKET_ERROR)
MessageBox(TEXT("Binding"), TEXT("Error!"), MB_OK);
if(listen(server_s, 10)!=0)
MessageBox(TEXT("Listening"), TEXT("Error!"), MB_OK);
else
{
m_con_s="- Connected -";
UpdateData(false);
connect_b=true;
}
while(true)
{
fromlen=sizeof(from);
if((client_s=accept(server_s, (struct sockaddr*)&from, &fromlen))==INVALID_SOCKET)
{
wsprintf (szError, TEXT("Accepting Connections. Error: %d"),
WSAGetLastError ());
MessageBox(szError, "Accepting Connections:", MB_OK);
break;
}
else
if(select(0,0,0,0,0)==SOCKET_ERROR)
{
wsprintf (szError, TEXT("Error: %d"),
WSAGetLastError ());
MessageBox(szError, "Status of Con.", MB_OK);
break;
}
}
Thanks so far!
DKT
|
|
|
|
|
Two more questions:
1. How to use Select? I just set all arguments to NULL, is that correct to get the state of the socket?
2. Can the problem be because I am using just one port for everything, although I am using threads? I mean, every client is connecting on the same port, and get its messages on this port.
DKT
|
|
|
|
|
Does anyone know how can I code a program that logs the mIRC chat window ? Is it possible to code such a program?
I saw that the mIRC chat window class name is "Static" and I tried to get tha handle to the window and I sent a WM_GETTEXT message but it didn't work.
Please help me!!!
Cristian
|
|
|
|
|
Hello everyone:
Are there any functions fast than sccanf, sprintf, strlen?
Thanks.
-Freehawk
|
|
|
|
|
Maybe.
Before you start though I have two questions:
Have you done a profile on your program and determined that you program is really spending a lot of time in those 3 functions. In most cases, despite those functions not being particularly good, they are good enough.
Why are you not using a C++ string class, and the functions they provide to do the same? There are a number of them out there.
Assuming you have good answers to those questions:
strlen is best made faster by making a string class (or structure if you must do pure C) that holds the length of the string. Keeping this up to date can greatly speed up your program if strlen is called often.
The other two are most easily taken care of by careful analysis of what you are doing with them. In most cases just knowing something about the data and how it is used can make solutions obvious. (for instance if you use sprintf to create a string, and sscanf to latter pull it apart, why create the string in the first place, just pass the data)
Not knowing your data I cannot say more. I still suspect that this question is not worth asking.
|
|
|
|
|
Hi,
I was just debugging this c file when i encountered this statement
#line 24 "Flex.lex"
the control is transfered to line 25 of the Flex file
Can someone explain it in details also other directive which are frequently used .
Thanx..
lokiz
|
|
|
|
|
Hi
I have an application that is to run as a service. That it should run as soon as it is installed without restarting. But the problem is I have created the application as mfc shared. But in some system it doesnt work due to
The version of msvcrt in the system is outdated.
How can I overcome this. I am not able to replace the msvcrt file as the it is used by the current system.
Is there any other option than a static build ? Will static build cause problems. Should I repeat the whole testing process for static build also ?
Regards
zainu
The Best Relligion is Science.
Once you understand it, you will know God.
|
|
|
|
|
You can try to place the version of the DLL you need in the same directory than your executable. When running it, it should load the one located in its directory before searching for one with the same name from the Path.
The other way is to replace msvcrt.dll by putting the version you want in some directory, setting then a copy command to System32 in the registry key "RunOnce" and reboot the system, but it may be potentially dangerous, it could break other applications who need the version you replace.
HTH,
K.
Fold With Us!
"Military intelligence is a contradiction in terms - Groucho Marx, 1890 - 1977"
|
|
|
|
|
Hi
Thank you very much for your time and answer.
I have tried both of them.
1. It has the problem that the old version is already in memory, so my application will refer to the one in memory instead of loading the new one from the folder.
2. I want to accomplish it without a restart.
Thanks again
regards
shiraz
The Best Relligion is Science.
Once you understand it, you will know God.
|
|
|
|
|
I think static linking with crt libary? But I dont know how to do it
|
|
|
|
|
Well I got it
Change you project setting , and make MFC statically linked.
|
|
|
|
|
Hi
Thanks vikram,
Yes I did that but the application crashes in NT 4.
Anyway I did a workaround and did some command line processing in the set up.
Regards
Shiraz
The Best Relligion is Science.
Once you understand it, you will know God.
|
|
|
|
|
Yes...It may happen.Coz your application might be having sub components and some of them are using statically linked CRT or otherwise...And dealing with multiple crts at a time going to a very rough task ...
|
|
|
|
|
I want to know how to change bkcolor in child window.
pls answer me.
|
|
|
|
|
|
Hi~
Window API has a lot of const or macro
e.g S_OK, WM_PAINT, SW_NORMAL, etc.
Where can I find the value?
I cannot find them in MSDN
THanks
|
|
|
|
|
ting668 wrote:
Where can I find the value?
Just hover your mouse above them and you will see the value.
OR right-click and select go to definition.
<marquee> STUCK STUCK STUCK STUCK
Stuck to Programming through an unbreakable bond
My Articles | My Blog
|
|
|
|
|
I am creating a COM component in VC++ using MFC and automation. The automation process is via the CCmdTarget class and IDispatch. The component is a wrapper for accessing a proprietary binary file which holds information pertaining to a scanning system we use. Specifically each binary file will hold information relating to a particular form setup, such as how many sheets the form has the fields which we are capturing off the form and so on (the package is called IST). A portion of the object model for the file structure is as follows:
Application (only one)
----Records (contains all the fields)
--------Fields
----Documents
--------Sheets
------------Grids (maybe OMR or OCR region on the form, and will link back to one a field)
etc..
The structure is stored on disk in the above manner, and read into structs. The way I have gone about exposing the structs is via nested objects and collections of objects (CTypedPtrArray). So as an example I have exposed the records as IRecord and IRecords, IRecords is a collection of IRecord objects. The annoying aspect of this is that each IRecord object must hold a pointer to the record structure that has been read off disk. This pointer is setup during construction of the collections after it has been read off disk, and will allow us to write back the information to disk if any changes are made.
This is all working fine (from what I can tell) however there appears to be a memory/access violation issue when the objects go into final release.
So I’m just wondering whether anyone has any advice with relation to automation, and how to appropriately dispose of objects.All the destructors are virtual in the component. Is that causing any problem? Could anyone please clarify that whether the destructors should be made virtual in COM? I am happy to send the project if required.
Thanks in advance.
|
|
|
|
|
you are missing some thing some where
-----------------------------
"I Think It Will Help"
-----------------------------
Alok Gupta
visit me at http://www.thisisalok.tk
|
|
|
|
|
You might be using smart pointers and somewhere calling release on some interface pointer. This might be the cause. Check that out
-------------------------
Have a great day ahead!
Regards,
Sohail Kadiwala
(My COM Blog - http://lovecom.blogspot.com)
modified 21-Apr-21 21:01pm.
|
|
|
|
|
Sohail Bhai,
Happy Ramadan.
any knowledge about how to create Evallution dll,Runtime Dll or Developer DLL.
just need a little pointer towards that
-----------------------------
"I Think It Will Help"
-----------------------------
Alok Gupta
visit me at http://www.thisisalok.tk
|
|
|
|
|
Is there any Windows Audio Api's which allows for specifying any varying sample rate, other than fixed defaults. (8000, 11025, 22050, 44100)?
Thanks
|
|
|
|
|
Should I do this:
#include <iostream>
using namespace std;
or should I do this:
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
.
.
.
I find that making the namespace std global in implementation
file easier to work with, but some people suggest avoid doing
that. Should I? Do you make namespace std global?
Thanks,
Alex
-----------------------------
C++ without virtual functions is not OO. Programming with classes but without dynamic binding is called "object based", but not "object oriented".
|
|
|
|
|
The second option is neater, and better style. In the real world, it's doubtful that you'll notice the difference. I always do the second, to be a nerd.
Christian
I have several lifelong friends that are New Yorkers but I have always gravitated toward the weirdo's. - Richard Stringer
|
|
|
|