procedure TForm1.Button1Click(Sender: TObject);
var
szclienta: string[100];
szclientw: string[100];
serversock: tsocket;
destination_sin: tsockaddrin;
wsa: wsadata;
begin
{ HINSTANCE hInstance, // Handle to the current instance
HINSTANCE hPrevInstance,// Handle to the previous instance
LPTSTR lpCmdLine, // Pointer to the command line
int nCmdShow) // Show state of the window}
// Initialize Winsocket.
if (WSAStartup (MAKEWORD(1,1), wsa) <> 0) then
halt;
{
wsprintf (szError, TEXT("WSAStartup failed. Error: %d"),
WSAGetLastError ());
MessageBox (NULL, szError, TEXT("Error"), MB_OK);
return FALSE;
}
// Create a TCP/IP socket that is bound to the server.
ServerSock := socket (AF_INET, SOCK_STREAM, 0);
if (serversock = INVALID_SOCKET) then
halt;
{
wsprintf (szError, TEXT("Allocating socket failed. Error: %d"),
WSAGetLastError ());
MessageBox (NULL, szError, TEXT("Error"), MB_OK);
return FALSE;
}
// Fill out the server socket's address information.
fillchar(destination_sin, sizeof(destination_sin), 0);
destination_sin.sin_family := AF_INET;
// Retrieve the host information corresponding to the host name.
phe := gethostbyname ('GUEST'); ireturn := wsagetlasterror;
if (phe = NIL) then
halt;
{
wsprintf (szError, TEXT("Unable to get the host name. Error: %d"),
WSAGetLastError ());
MessageBox (NULL, szError, TEXT("Error"), MB_OK);
closesocket (ServerSock);
return FALSE;
}
// Assign the socket IP address
{ asm
mov cx, 0
@@l1: mov al, byte ptr [cl + phe + 16]
mov byte ptr [destination_sin + 4], al
inc cx
cmp cx, word ptr [phe + 10]
jle @@l1
end}
destination_sin.sin_addr := pinaddr(phe.h_addr^)^;
// Convert to network ordering
destination_sin.sin_port := htons (PORTNUM);
caption := '3';
// Establish a connection to the server socket
if (connect (ServerSock,
destination_sin,
sizeof (destination_sin)) = SOCKET_ERROR) then
// ireturn := wsagetlasterror
halt;
{
wsprintf (szError,
TEXT("Connecting to the server failed. Error: %d"),
WSAGetLastError ());
MessageBox (NULL, szError, TEXT("Error"), MB_OK);
closesocket (ServerSock);
return FALSE;
}
// Send a string to the server.
szclienta := 'to server';
caption := '4';
if (send (ServerSock, szclienta, length(szclienta), 0)
= SOCKET_ERROR) then
halt;
{
wsprintf (szError,
TEXT("Sending data to the server failed. Error: %d"),
WSAGetLastError ());
MessageBox (NULL, szError, TEXT("Error"), MB_OK);
}
// Disable sending on ServerSock.
shutdown (ServerSock, 1);
beep;
caption := 'sent';
exit;
while true do
begin
// Receive data from the server socket.
iReturn := recv (ServerSock, szClientA, sizeof (szClientA), 0);
// Check if there is any data received. If there is, display it
if (iReturn = SOCKET_ERROR) then
halt
{
wsprintf (szError, TEXT("No data is received, recv failed.")
TEXT(" Error: %d"), WSAGetLastError ());
MessageBox (NULL, szError, TEXT("Client"), MB_OK);
break;
}
else if (iReturn = 0) then
begin
caption := '6';
windows.beep(100, 100);
break
end
{
MessageBox (NULL, TEXT("Finished receiving data"), TEXT("Client"),
MB_OK);
break;
}
else
begin
// Convert the ASCII string to a Unicode string.
{ for (index = 0; index <= sizeof (szClientA); index++)
szClientW[index] = szClientA[index]}
// Display the string received from the server.
MessageBox (0, @szClientW, 'Received From Server', MB_OK)
end
end;
// Disable receiving on ServerSock
shutdown (ServerSock, 0);
// Close the socket
closesocket (ServerSock);
WSACleanup ()
end;
WinSock
На одном и том же компе она работает а как только по сети - ошибка Remote computer does not found
Если у кого нибудь есть идеи или примеры - киньте сюда pls
Цитата:
Originally posted by Proger_XP
Пытаюсь написать на Delphi простую прогу которая будет слать сообщения(типа net send)
На одном и том же компе она работает а как только по сети - ошибка Remote computer does not found
Если у кого нибудь есть идеи или примеры - киньте сюда pls
Пытаюсь написать на Delphi простую прогу которая будет слать сообщения(типа net send)
На одном и том же компе она работает а как только по сети - ошибка Remote computer does not found
Если у кого нибудь есть идеи или примеры - киньте сюда pls
Привет!!! :) Я Писал что-то похожее тока там не только сообщения слал, а еще и управлял компом... Ну там монитор потушить, вырубить комп... Тока я использовал делфийские КлиентСокет, СерверСокет... Все прикрасно работает... Тока если я найду... То могу кинуть исходник...
Цитата:
Originally posted by Stepler__
Привет!!! :) Я Писал что-то похожее тока там не только сообщения слал, а еще и управлял компом... Ну там монитор потушить, вырубить комп... Тока я использовал делфийские КлиентСокет, СерверСокет... Все прикрасно работает... Тока если я найду... То могу кинуть исходник...
Привет!!! :) Я Писал что-то похожее тока там не только сообщения слал, а еще и управлял компом... Ну там монитор потушить, вырубить комп... Тока я использовал делфийские КлиентСокет, СерверСокет... Все прикрасно работает... Тока если я найду... То могу кинуть исходник...
Не надо
На VCL я тоже могу это сделать а нужно API
Цитата:
Originally posted by Proger_XP
Пытаюсь написать на Delphi простую прогу которая будет слать сообщения(типа net send)
На одном и том же компе она работает а как только по сети - ошибка Remote computer does not found
Если у кого нибудь есть идеи или примеры - киньте сюда pls
Пытаюсь написать на Delphi простую прогу которая будет слать сообщения(типа net send)
На одном и том же компе она работает а как только по сети - ошибка Remote computer does not found
Если у кого нибудь есть идеи или примеры - киньте сюда pls
не работающий код приведи пожалуйста - клиента и сервера. только в тэги оформи. разберем пошагово. 99% - пытаешься использовать NetBIOS имя вместо FQDN/IP адреса
Цитата:
Originally posted by squirL
не работающий код приведи пожалуйста - клиента и сервера. только в тэги оформи. разберем пошагово. 99% - пытаешься использовать NetBIOS имя вместо FQDN/IP адреса
не работающий код приведи пожалуйста - клиента и сервера. только в тэги оформи. разберем пошагово. 99% - пытаешься использовать NetBIOS имя вместо FQDN/IP адреса
Пример гибрид MSDN и мой ))
Клиент:
Код:
Сервер:
Код:
procedure TForm1.Button3Click(Sender: TObject);
var
sock: tsocket;
wsa: twsadata;
sia: tsockaddrin;
he: phostent;
ca: tsockaddr;
cas: integer;
buf: string[100];
begin
wsastartup(makeword(1, 1), wsa);
sock := socket(af_inet, sock_stream, 0);
if sock = 0 then
halt;
fillchar(sia, sizeof(sia), 0);
he := gethostbyname ('GUEST');
sia.sin_family := af_inet;
if (he = NIL) then
halt;
sia.sin_addr := pinaddr(he.h_addr^)^;
sia.sin_port := htons (PORTNUM);
if bind(sock, sia, sizeof(sia)) <> 0 then
begin
caption := inttostr(wsagetlasterror);
sleep(1000);
halt
end;
caption := '1';
if listen(sock, 1) <> 0 then
halt;
caption := 'accepting';
cas := sizeof(ca);
ireturn := accept(sock, @ca, @cas);
if ireturn = -1 then
halt;
sock := ireturn;
if recv(sock, buf, sizeof(buf), 0) = -1 then
// ireturn := wsagetlasterror
halt;
showmessage(buf);
caption := '2'
end;
var
sock: tsocket;
wsa: twsadata;
sia: tsockaddrin;
he: phostent;
ca: tsockaddr;
cas: integer;
buf: string[100];
begin
wsastartup(makeword(1, 1), wsa);
sock := socket(af_inet, sock_stream, 0);
if sock = 0 then
halt;
fillchar(sia, sizeof(sia), 0);
he := gethostbyname ('GUEST');
sia.sin_family := af_inet;
if (he = NIL) then
halt;
sia.sin_addr := pinaddr(he.h_addr^)^;
sia.sin_port := htons (PORTNUM);
if bind(sock, sia, sizeof(sia)) <> 0 then
begin
caption := inttostr(wsagetlasterror);
sleep(1000);
halt
end;
caption := '1';
if listen(sock, 1) <> 0 then
halt;
caption := 'accepting';
cas := sizeof(ca);
ireturn := accept(sock, @ca, @cas);
if ireturn = -1 then
halt;
sock := ireturn;
if recv(sock, buf, sizeof(buf), 0) = -1 then
// ireturn := wsagetlasterror
halt;
showmessage(buf);
caption := '2'
end;
З.Ы: привожу со всем Сишным "мусором" поэтому проэкт должен быть читабельнее ))
phe := gethostbyname ('GUEST'); ireturn := wsagetlasterror;
if (phe = NIL) then
halt;
{
wsprintf (szError, TEXT("Unable to get the host name. Error: %d"),
WSAGetLastError ());
MessageBox (NULL, szError, TEXT("Error"), MB_OK);
closesocket (ServerSock);
return FALSE;
}
// Assign the socket IP address
{ asm
mov cx, 0
@@l1: mov al, byte ptr [cl + phe + 16]
mov byte ptr [destination_sin + 4], al
inc cx
cmp cx, word ptr [phe + 10]
jle @@l1
end}
destination_sin.sin_addr := pinaddr(phe.h_addr^)^;
// Convert to network ordering
destination_sin.sin_port := htons (PORTNUM);
caption := '3';
// Establish a connection to the server socket
if (connect (ServerSock,
destination_sin,
sizeof (destination_sin))
Что ты здесь пытаешся сделать?
Во первых ты пытаешся назначить адрес сервака полученного при помощи gethostbyname ('GUEST'),но удаленный хост не будет иметь это имя,и вообще лучше не gethostbyname ('GUEST') а gethostbyname ('localhost') для сервака. В клиенте же если удаленный сервак не имеет днс имени,то установить с ним соединение ты сможеш только если точно укажеш ip адрес сервака.
Поэтому у тебя это и работала на одном компе когда клиент и сервер получали однин и тот же локальный адресс твоего компа,а когда твои клиент и сервер нахродятся на разных компах и при этом клиент пытается присоединится к локальному адресу хотя сервер висит уже на другом компе у которого совершенно другой адресс,то сам понимае ничего не выйдет.
Если не трудно, приведи полный работающий код pls