我用的是delphi6.0。为了测试socket的使用我分别建了两个project,分别为cli_prj
(client) & ser_prj(server).
client中有控件edit1,clientSocket1,button1
server中有控件edit1,ServerSocket1,
以上socket的端口为4000,clientSocket1.address=(本地机的IP)
打算设计的处理过程如下:
点击botton1---->(调用)clientSocket1.socket.sendtext('string');
serverSocket收包后,返回一个string.
when ServerSocket.Onread---->ServerSocket.socket.sendtext('ok");
然后由clientSocket收回应答串。回显在edit1上。
问题:
运行,且点击botton时client方出现错误信息:Asynchronous socket error 10053.
server方出现错误信息:“由于套接字没有连接,并且(当使用一个sendto调用数据报套接字时)没有提供地址,发送或接收数据的请求没有被接受。(10057) On Api 'recv'"
如何解决啊,请指教!!!!
(client) & ser_prj(server).
client中有控件edit1,clientSocket1,button1
server中有控件edit1,ServerSocket1,
以上socket的端口为4000,clientSocket1.address=(本地机的IP)
打算设计的处理过程如下:
点击botton1---->(调用)clientSocket1.socket.sendtext('string');
serverSocket收包后,返回一个string.
when ServerSocket.Onread---->ServerSocket.socket.sendtext('ok");
然后由clientSocket收回应答串。回显在edit1上。
问题:
运行,且点击botton时client方出现错误信息:Asynchronous socket error 10053.
server方出现错误信息:“由于套接字没有连接,并且(当使用一个sendto调用数据报套接字时)没有提供地址,发送或接收数据的请求没有被接受。(10057) On Api 'recv'"
如何解决啊,请指教!!!!
不过没看到连接啊。
TCP服务器应该监听端口,客户机先建立连接,然后再发送消息。除非是UDP
"Asynchronous socket error 10053"
10053错误就是典型的没有连接上而发送消息的错误
I 服了 YOU!
client.address ='127.0.0.1';
client.port =1234
client.active;
client.sendtext('faint');^O^
问题如何在server端打开listen啊!
client.address ='10.10.2.25';
client.port =4000
client.active;server.address ='10.10.2.25';
server.port =4000
server.active;
并且是先打开了server的,但就是连不上啊,什么原因啊???分不够可以再加!!!!!
说是什么"目标机器积极地拒绝连接.....",我用的是windows advance server
怎么两个地址是一样的?
如果只是打开,server.active,server.open,就可以了
procedure TForm1.ssClientRead(Sender: TObject; Socket: TCustomWinSocket);
var
str:string;
begin
str:=Socket.ReceiveText;//若这句为str:=ss.Socket.ReceiveText;就出错,why????????是delphi中的一个bug吗?
edit1.Text:=str;
end;
procedure TForm1.listen1Click(Sender: TObject);
begin
Listen1.Checked:=not Listen1.Checked;
if Listen1.Checked then
begin
ClientSocket1.Active:=False;
ServerSocket1.Active:=True;
StatusBar1.Panels[0].Text:='Listening...';
end
else
begin
if ServerSocket1.Active then
ServerSocket1.Active:=False;
StatusBar1.Panels[0].Text:='';
end;
连接程序如下:
procedure TForm1.Connect1Click(Sender: TObject);
begin
if ClientSocket1.Active then ClientSocket1.Active:=False;
if InputQuery('Computer to connect to','Address Name:',Servername) then
//弹出对话框以便让用户输入服务器地址,可以是ip地址也可以是主机名
if Length(Servername)>0 then
with ClientSocket1 do
begin
Host:=Servername;
Active:=True;
Listen1.Checked:=False;//此时本机作为客户机,没有监听功能
end
else
begin
showmessage('请输入连接的主机地址!');
end;
end;
连接结果显示:
procedure TForm1.ClientSocket1Disconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Listen1Click(nil);
end;procedure TForm1.FormCreate(Sender: TObject);
begin
Listen1Click(nil);
end;procedure TForm1.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
StatusBar1.Panels[0].Text:='Connected to:'+Socket.RemoteHost;
//连接成功
end;
什么阻塞方式和非阻塞方式啊,问题不在这要不你自已试试!
:(
可以用你两端的设置,做一个最简单的SHOWMESSAGE试试,如果还有问题,应该就是楼上说的那样吧
呵呵,我的服务器上只有一个serverSocket,"Socket.ReceiveText 和你的 SS.Socket.ReceiveText根本就不是一个SOCKET"????----那是哪个socket啊??