首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

请问:服务器端的 ClientSocket1 的向 客户端 ServerSocket1 发送可以,反过来不行

2012-02-24 
请教:服务器端的 ClientSocket1 的向 客户端 ServerSocket1 发送可以,反过来不行?请教:服务器端:unitUnit1

请教:服务器端的 ClientSocket1 的向 客户端 ServerSocket1 发送可以,反过来不行?
请教:
服务器端:
unit   Unit1;

interface

uses
    Windows,   Messages,   SysUtils,   Variants,   Classes,   Graphics,   Controls,   Forms,
    Dialogs,   ScktComp,   StdCtrls;

type
    TForm1   =   class(TForm)
        Button1:   TButton;
        ClientSocket1:   TClientSocket;
        ServerSocket1:   TServerSocket;
        procedure   Button1Click(Sender:   TObject);
        procedure   ClientSocket1Connect(Sender:   TObject;
            Socket:   TCustomWinSocket);
        procedure   ClientSocket1Error(Sender:   TObject;   Socket:   TCustomWinSocket;
            ErrorEvent:   TErrorEvent;   var   ErrorCode:   Integer);
        procedure   ServerSocket1ClientRead(Sender:   TObject;
            Socket:   TCustomWinSocket);
        procedure   FormCreate(Sender:   TObject);
    private
        iStatus   :   Integer;
        {   Private   declarations   }
    public
        {   Public   declarations   }
    end;

var
    Form1:   TForm1;

implementation
                                                                                           
{$R   *.dfm}

procedure   TForm1.Button1Click(Sender:   TObject);
begin
            ClientSocket1.Close;         //首先关闭断开原先的连接
            ClientSocket1.Address:= '192.168.0.118 ';       //赋远程机的   IP   地址
            ClientSocket1.Open;                                               //建立   socket   连接
            while   iStatus   =   0   do   Application.ProcessMessages;
            if   iStatus   =   1   then   ClientSocket1.Socket.SendText( 'hghghj ');
end;

procedure   TForm1.ClientSocket1Connect(Sender:   TObject;
    Socket:   TCustomWinSocket);
begin
            iStatus   :=   1;
end;

procedure   TForm1.ClientSocket1Error(Sender:   TObject;
    Socket:   TCustomWinSocket;   ErrorEvent:   TErrorEvent;
    var   ErrorCode:   Integer);
begin
        iStatus   :=   -1;
        ErrorCode   :=   0;
end;

procedure   TForm1.ServerSocket1ClientRead(Sender:   TObject;
    Socket:   TCustomWinSocket);
var
          ss:string;


begin
          ss:=Socket.ReceiveText;
          showmessage(ss);
end;

procedure   TForm1.FormCreate(Sender:   TObject);
begin
          if       ServerSocket1.Active   =   false     then     //打开     ServerSocket1
                        begin
                                    ServerSocket1.Active:=true;
                        end;
end;

end.


客户端:
unit   Unit1;

interface

uses
    Windows,   Messages,   SysUtils,   Variants,   Classes,   Graphics,   Controls,   Forms,
    Dialogs,   ScktComp,   StdCtrls;

type
    TForm1   =   class(TForm)
        ServerSocket1:   TServerSocket;
        ClientSocket1:   TClientSocket;
        Button1:   TButton;
        procedure   FormCreate(Sender:   TObject);
        procedure   ServerSocket1ClientRead(Sender:   TObject;
            Socket:   TCustomWinSocket);
        procedure   ServerSocket1ClientConnect(Sender:   TObject;
            Socket:   TCustomWinSocket);
        procedure   Button1Click(Sender:   TObject);
    private
          Clientserver:boolean;                                 //用来判断远程的   ClientSocket1   是都向   本机发送了   连接请求,并且是否成功了
        {   Private   declarations   }
        {   Private   declarations   }
    public
        {   Public   declarations   }
    end;

var
    Form1:   TForm1;

implementation

{$R   *.dfm}

procedure   TForm1.FormCreate(Sender:   TObject);
begin
            if       ServerSocket1.Active   =   false     then     //打开     ServerSocket1
                        begin
                                    ServerSocket1.Active:=true;
                        end;
           
          //****************   用来判断远程的   ClientSocket1   是都向   本机发送了   连接请求,并且是否成功了*******
            Clientserver:=false;
          //****************   用来判断远程的   ClientSocket1   是都向   本机发送了   连接请求,并且是否成功了*******
end;

procedure   TForm1.ServerSocket1ClientRead(Sender:   TObject;
    Socket:   TCustomWinSocket);
var
          ss:string;


begin
          ss:=Socket.ReceiveText;
          showmessage(ss);
end;

procedure   TForm1.ServerSocket1ClientConnect(Sender:   TObject;
    Socket:   TCustomWinSocket);
begin
              Clientserver:=true;
end;

procedure   TForm1.Button1Click(Sender:   TObject);
begin
            ClientSocket1.Address:= '192.168.0.118 ';
            ClientSocket1.Open;

            while   (Clientserver   =   false)   do                     //连上了远程
            begin
                        Application.ProcessMessages;
            end;

            if   (Clientserver   =   true)   then
                    begin
                                ClientSocket1.Socket.SendText( 'csok ');   //告诉客户端和服务器端连接起来了
                    end;
end;

end.


现在我单击   服务器端的   Button1   ,则客户端可以收到   服务器发过来的字符串
但是我单击   客户端的   Button1   ,   则服务器端不能收到   服务器发过来的字符串

各位大哥,这是什么原因?

还有,while   iStatus   =   0   do   Application.ProcessMessages;
这里可以改一下吗?改为   多少秒还是连接不上
则放弃,不然,别的就不能用   ClientSocket1   啊
(也就说,我可能用   ClientSocket1   向Address   为   '192.168.0.119 '  
的发送连接请求)

我试这个程序
服务器端和客户端是在同一台计算机上
但是是使用不同的端口
(我想应该不是服务器端和客户端是在同一台计算机上的原因)

谢谢!

[解决办法]
客户端连接上来后要把状态保存下来才能发,服务端不用IP地址.因为客户端连接时已有IP地址了.如果不保存状态,要发送的时间也可以到所有连接中去查,IP地址和你要发的一个一样就用这个发就行了.

热点排行