-
Client - Server
Hello!
I use Windows 98, VC++ 6.0.
I make client - server Winsock 2 application.
Client is MFC Application. Server is Win32 Application.
I test my both programs in one computer. Same IP, different ports. I send "Hello!" from client to server. But when I display the received message on server I see some strange text. Why?
What should I do?
Thank you.
-
One possible problem is that you are not null terminating the string. Without seeing any code, that is the best I can do.
-
Server's code:
Code:
WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
while (1)
{
//TODO
WSADATA w;
int error=WSAStartup(0x0202,&w);
if(error) return 0;
if(w.wVersion!=0x0202)
{
WSACleanup();
return 0;
}
SOCKET s=socket(AF_INET,SOCK_STREAM,0);
sockaddr_in a2;
a2.sin_family=AF_INET;
a2.sin_port=htons(55155);
a2.sin_addr.s_addr=htonl(INADDR_ANY);
if(bind(s,(LPSOCKADDR)&a2,sizeof(a2))==SOCKET_ERROR)
{
WSACleanup();
return 0;
}
if(listen(s,5)==SOCKET_ERROR)
{
WSACleanup();
return 0;
}
SOCKET c;
sockaddr_in ca;
int k=sizeof(struct sockaddr);
for(;;)
{
c=accept(s,(struct sockaddr*) &ca,&k);
if(c==INVALID_SOCKET)
{
WSACleanup();
return 0;
}
char buf[9];
int ret = recv(s,buf,sizeof(buf) - 1,0);
if (ret != SOCKET_ERROR)
{
WSACleanup();
return 0;
}
closesocket(s);
MessageBox(NULL,buf,buf,MB_OK);
if(!strcmp(buf,"prxyen"))
{
CRegKey k2;
long err;
DWORD n=1;
err=k2.Open(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings");
err=k2.SetValue(n,"ProxyEnable");
if(err!=ERROR_SUCCESS) return 0;
k2.Close();
}
else if(!strcmp(buf,"prxydis"))
{
CRegKey k2;
long err;
DWORD n=0;
err=k2.Open(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings");
err=k2.SetValue(n,"ProxyEnable");
if(err!=ERROR_SUCCESS) return 0;
k2.Close();
}
}
}
return 0;
}
-
Client's code:
Code:
void CClient1Dlg::OnButton1()
{
// TODO: Add your control notification handler code here
SOCKET s=socket(AF_INET,SOCK_STREAM,0);
sockaddr_in a1;
a1.sin_family=AF_INET;
a1.sin_port=htons(55155);
a1.sin_addr.s_addr=inet_addr("192.168.120.201");
if(connect(s,(LPSOCKADDR) &a1,sizeof(a1))==SOCKET_ERROR)
{
closesocket(s);
return;
}
char *cmd1="prxyen";
int ret = send(s,cmd1,sizeof(cmd1),0);
closesocket(s);
}
What is here wrong?
-
You need to nul terminate the string you receive over the network.
Code:
int ret = recv(s,buf,sizeof(buf) - 1,0);
if (ret != SOCKET_ERROR)
{
WSACleanup();
return 0;
}
buf[ret] = '\0';
closesocket(s);
Also
Code:
char *cmd1="prxyen";
int ret = send(s,cmd1,sizeof(cmd1),0);
sizeof, when used on a pointer will return 4. You want to use strlen:
Code:
char *cmd1="prxyen";
int ret = send(s,cmd1,strlen(cmd1),0);
-
I made corrections. I run client and server in different computers. Server receives messages but some hieroglyphs insteed of my text.
Help me, please!