procedure TChatForm.ListenItemClick(Sender: TObject);
begin
ListenItem.Checked:= not ListenItem.Checked;
if ListenItem.Checked then
begin
ClientSocket.Active:= False;
ServerSocket.Active:= True;
end
else
begin
if ServerSocket.Active then
ServerSocket.Active:= False;
end;
end;
procedure TChatForm.ConnectItem1Click(Sender: TObject);
var Server:string;
begin
if ClientSocket.Active then ClientSocket.Active:= False;
if InputQuery('Computer to connect to','Address Name',Server) then
if Length(Server)<>0 then
with ClientSocket do
begin
Host:= Server;
Active:= True;
ListenItem.Checked:= False;
end;
end;procedure TChatForm.Memo1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
 if Key = VK_Return then
if IsServer then
ServerSocket.Socket.Connections[0].SendText(Memo1.Lines[Memo1.Lines.Count - 1])
else
ClientSocket.Socket.SendText(Memo1.Lines[Memo1.Lines.Count - 1]);
end;procedure TChatForm.ServerSocketAccept(Sender: TObject;
  Socket: TCustomWinSocket);
begin
IsServer := True;
end;procedure TChatForm.ClientSocketRead(Sender: TObject; Socket: TCustomWinSocket);
begin
Memo2.Lines.Add(Socket.ReceiveText);
end;procedure TChatForm.ServerSocketClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
begin
Memo2.Lines.Add(Socket.ReceiveText);
end;procedure TChatForm.ServerSocketClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
Memo2.Lines.Clear;
end;procedure TChatForm.ClientSocketDisconnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
ListenItemClick(nil);
end;procedure TChatForm.Exit1Click(Sender: TObject);
begin
ServerSocket.Close;
ClientSocket.Close;
Close;
end;procedure TChatForm.Disconnect1Click(Sender: TObject);
begin
ClientSocket.Active := False;
ServerSocket.Active := True;
end;这是我网上下的一个socket通讯程序
我想问的就是最后这一句~
这句应该是断开连接,但它为什么还要把ServerSocket.Active设为True啊?还有这段代码有什么问题没有?
procedure TChatForm.Disconnect1Click(Sender: TObject);
begin
ClientSocket.Active := False;
ServerSocket.Active := True;
end;

解决方案 »

  1.   

    procedure TChatForm.Disconnect1Click(Sender: TObject);
    begin
    ClientSocket.Active := False;
    ServerSocket.Active := True;
    end;
    从代码上看,这是把客户端断开连接,服务端继续监听。 代码没问题,就不是知道逻辑是什么了。
      

  2.   

    楼上说的对.socket程序开发起来还是很锻炼人的...
      

  3.   

    那我这整段代码有什么问题没有?
    我是把客户端\服务器集成在同一个程序上,可以互相发消息。
    但是我在一台电脑上打开两个这种程序,一台做服务器,一台做客户端,客服端我连的本机ip,发现我不管怎么发信息,服务器都没有反应。这是怎么回事啊?
    还会经常弹出:“Windows socket error: 通常每个套接字地址(协议/网络地址/端口)只允许使用一次”这种错误~