// Цикл обработки соединений:
while (stop = false) do
begin
clsock:= accept(sock, nil, nil);
if (clsock <> 0) then
CreateThread(nil, 0, @OnAccept, nil, 0, tID);
end;
Работа с winsock
клиент.........
//---------------------------------------------------------------------------
#include <vcl.h>
#include <winsock2.h>
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
int main(int argc, char* argv[])
{
WSADATA lpWSAData;
int s, rc, s1;
char buf[1];
if(WSAStartup(MAKEWORD(1,1), &lpWSAData)!=0) perror("Error: init of Ws2_32.dll");
sockaddr_in peer;
peer.sin_family=AF_INET;
peer.sin_port=htons(7500);
peer.sin_addr.s_addr=inet_addr("127.0.0.1");
s=socket(AF_INET, SOCK_STREAM, 0);
if(s<0) {
perror("Socket");
getch();
exit(1);
}
rc=connect(s, (sockaddr*)&peer, sizeof(peer));
if(rc) {
perror("Connect");
getch();
exit(1);
}
rc=send(s, "1", 1, 0);
if(rc<=0) {
perror("Send");
getch();
exit(1);
}
rc=recv(s, buf, sizeof(buf), 0);
if(rc<=0) perror("Recv"); else cout<<buf[0];
closesocket(s);
WSACleanup();
getch();
return 0;
}
//---------------------------------------------------------------------------
сервер........
//---------------------------------------------------------------------------
#include <vcl.h>
#include <winsock2.h>
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
int main(int argc, char* argv[])
{
WSADATA lpWSAData;
int s, rc, s1;
char buf[1];
if(WSAStartup(MAKEWORD(1,1), &lpWSAData)!=0) perror("Error: init of Ws2_32.dll");
sockaddr_in local;
local.sin_family=AF_INET;
local.sin_port=htons(7500);
local.sin_addr.s_addr=htonl(INADDR_ANY);
s=socket(AF_INET, SOCK_STREAM, 0);
if(s<0) {
perror("Socket");
getch();
exit(1);
}
rc=bind(s, (sockaddr*)&local, sizeof(local));
if(rc<0) {
perror("Bind");
getch();
exit(1);
}
rc=listen(s, 5);
if(rc) {
perror("Listen");
getch();
exit(1);
}
s1=accept(s, NULL, NULL);
if(s1<0) {
perror("Accept");
getch();
exit(1);
}
rc=recv(s1, buf, 1, 0);
if(rc<=0) {
perror("Recv");
getch();
exit(1);
}
cout<<buf[0];
rc=send(s1, "2", sizeof(buf), 0);
if(rc<=0) perror("Send");
closesocket(s);
WSACleanup();
getch();
return 0;
}
//---------------------------------------------------------------------------
в результате, при первом запуске работает все нормально, но когда потом запускаеш сервер работает нормально, появляеться ашипка на клиенте
Recv: Error 0 тоесть в ф-и Recv...Пример частично из книги Снейдера TCP/IP прогр.
Код:
В функции OnAccept просто обрабатываешь соединение (прием, отправка данных) и закрываешь коннект (и сам поток). Переменная clsock должна быть глобальной. Попробуй так, но я гарантий не даю, что заработает на 100% )))