掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
winsockを使って通信を行うには? (ID:578)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
D6 Personalには、Chatサンプルが付いてないですね。(T_T) で、BorlandサイトにあるC++Builder用のChatサンプルを Delphi用に書き換えてみました。 これは1対1のChat用なので、多人数用にするにはサーバーとなるパソコン側で参加者を管理しないとダメなんですよね? サーバー側は、参加人数分のServerSocketコンポーネントを用意する必要があるんでしょうか? //-------------------------------------------- procedure TForm1.ListenItemClick(Sender: TObject); begin ListenItem.Checked := not ListenItem.Checked; if (ListenItem.Checked) then begin ClientSocket1.Active := False; ServerSocket1.Active := True; Show_BarInfo('Listening...'); end else begin if (ServerSocket1.Active) then begin ServerSocket1.Active := False; end; Show_BarInfo(''); end; end; //-------------------------------------------- procedure TForm1.ConnectItemClick(Sender: TObject); begin if (ClientSocket1.Active) then ClientSocket1.Active := False; if (InputQuery('Connect to', 'Address Name:', Server)) then begin if (Length(Server) > 0) then begin ClientSocket1.Host := Server; ClientSocket1.Active := True; end; end; end; //-------------------------------------------- procedure TForm1.DisconnectItemClick(Sender: TObject); begin ClientSocket1.Close; ListenItemClick(Sender); end; //-------------------------------------------- procedure TForm1.ExitItemClick(Sender: TObject); begin ServerSocket1.Close; ClientSocket1.Close; Close; end; //-------------------------------------------- procedure TForm1.MemoSendKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (Key = VK_RETURN) then begin if (IsServer) then begin ServerSocket1.Socket.Connections[0].SendText(MemoSend.Lines[MemoSend.Lines.Count - 1]); end else begin ClientSocket1.Socket.SendText(MemoSend.Lines[MemoSend.Lines.Count - 1]); end; end; end; //-------------------------------------------- procedure TForm1.Show_BarInfo(const msg: string); begin StatusBar1.SimpleText := msg; end; //-------------------------------------------- procedure TForm1.FormCreate(Sender: TObject); begin ListenItemClick(Sender); end; //-------------------------------------------- procedure TForm1.ClientSocket1Connect(Sender: TObject; Socket: TCustomWinSocket); begin Show_BarInfo('Connected to: ' + Socket.RemoteHost); end; //-------------------------------------------- procedure TForm1.ClientSocket1Disconnect(Sender: TObject; Socket: TCustomWinSocket); begin ListenItemClick(Sender); end; //-------------------------------------------- procedure TForm1.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket); begin MemoRecv.Lines.Add(Socket.ReceiveText); end; //-------------------------------------------- procedure TForm1.ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); begin MemoRecv.Lines.Add('Error connecting to : ' + Server); ErrorCode := 0; end; //-------------------------------------------- procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); begin MemoRecv.Lines.Add(Socket.ReceiveText); end; //-------------------------------------------- procedure TForm1.ServerSocket1Accept(Sender: TObject; Socket: TCustomWinSocket); begin IsServer := True; Show_BarInfo('Connected to: ' + Socket.RemoteAddress); end; //-------------------------------------------- procedure TForm1.ServerSocket1ClientConnect(Sender: TObject; Socket: TCustomWinSocket); begin MemoRecv.Lines.Clear; end; //-------------------------------------------- procedure TForm1.ServerSocket1ClientDisconnect(Sender: TObject; Socket: TCustomWinSocket); begin ServerSocket1.Active := False; ListenItem.Checked := not ListenItem.Checked; ListenItemClick(Sender); end; //--------------------------------------------
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.