제가 구현 하려 가는 것은
서버소켓과 클라이어트 소켓을 가지고 서로 교신을 하는 것입니다.
전송하는 타입의 형태는 레코드 형이면 좋겠습니다.
제가 2주일째 테스트를 하고 있는데.
SendText를 가지고는 레코드형을 보낼수 없드라구요
SendText는 string만 전송이 되는 것 같구요.
예를 들어 65 + 'leewha' 이러한 것을 보내려고 하거든요..
65는 byte형이구요.
그래서 65를 char(65) 하니 'A' 로 치환이 되더라구요...
너무나 기뿐 마음에 이번엔 다시 'A'를 integer('A') 하니 65가 나왔습니다.
이때 모든 것이 해결 되었나 싶었는데 이번에는
(보내는 형이 숫자형이 많아 그것을 그대로 보내면 전송량이 많을것 같아..
문자로 변환한 다음 보내려고 하거든요.)
var
mm :string;
mm1:string;
mm2:byte;
이렇게 선언을 하고
mm2:=65;
mm1:='leewha'
mm:= char(65) + mm1;
이렇게 하니
mm의 내용은 Aleewha 이렇게 들어갔습니다.
그래서 이번엔 잘 쓰지 않는 char(135) 하니 □ 이러한 문자가 나옴니다.
그것을 다시 integer(char(135))하니 다시 135가 나왔습니다.
그래서 이것을 합치니 '혓eewha' 이렇게 처음 문자가 이상하게 변했더라구요.
합하면 이렇게 될수 있겠구나 해서 이번에는 문자를 짤라 봤습니다.
copy(mm,2,6) 이렇게 하면 다시 'leewha'가 나오거든요..
var
mm3:string;
mm3=copy(mm,1,1) 해서 integer로 변환을 하면 240이란 글자가 나오더라구요
이것은 아마 string과 char의 형의 불일치인것 같은데...
string과 char의 형변환을 알고 싶거든요...-----------------------(1)'
'leewha' 스트링을 한글자 한글자시 char[1].char[2].... 이렇게 넣을수 있는지..
또한 반대로도 될수 있는지....
아래와 같은 것도 있는것 같은데...
clientSocket1.sendstream(s);
\
procedure TForm1.Button2Click(Sender: TObject);
var
juso:Jusorec;
s : TMemoryStream;
begin
s := TMemoryStream.Create;
juso.age := 65; //F001이 메시지라는 암암리의 약정을...
juso.name := '이화';
s.Write(juso,sizeof(juso));
//ServerSocket1.Socket.SendStream(s);
clientSocket1.Socket.sendstream(s);
end;
\\
이렇게 전송을 했는데
서버소켓에서는 아무른 이벤트가 일어나지 않았거든요...
어떠한것을 써야 이벤트가 발생되는건지 알고 싶습니다. -----------(2)
서버소켓에서 구체적으로 처리하는 방법까지 가르쳐 주시면 좋구요 ---(3)
마지막으로.. 클라이언트 소켓은 서버로 보내고 내용을 받은 서버는
내용에 따라 모든 클라이언트에게 보낼 것인지 아니면 일부 또는 한명
에게 보내야 되는 것인지 결정을 해야 하거든요.
서버에서 이러한 방법을 이용하면 아래와 같은 내용으로는 해결되는데....
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
str:string;
m:integer;
begin
str:=socket.ReceiveText;
Memo1.lines.add(str);
for m:=0 to i - 1 do
begin
ServerSocket1.Socket.Connections[m].SendText(str);
end;
end;
다음의 방법을 이용하면 어떻게 구현 하는지...
clientSocket1.sendstream(s);
이것을 이용해서 위와 같이 구현할수 있느지요 ---------------(4)
고수님들 부탁 합니다....
lee_wha@hanmail.net
> 제가 구현 하려 가는 것은
> 서버소켓과 클라이어트 소켓을 가지고 서로 교신을 하는 것입니다.
>
> 전송하는 타입의 형태는 레코드 형이면 좋겠습니다.
> 제가 2주일째 테스트를 하고 있는데.
> SendText를 가지고는 레코드형을 보낼수 없드라구요
> SendText는 string만 전송이 되는 것 같구요.
>
> 예를 들어 65 + 'leewha' 이러한 것을 보내려고 하거든요..
> 65는 byte형이구요.
> 그래서 65를 char(65) 하니 'A' 로 치환이 되더라구요...
> 너무나 기뿐 마음에 이번엔 다시 'A'를 integer('A') 하니 65가 나왔습니다.
> 이때 모든 것이 해결 되었나 싶었는데 이번에는
> (보내는 형이 숫자형이 많아 그것을 그대로 보내면 전송량이 많을것 같아..
> 문자로 변환한 다음 보내려고 하거든요.)
> var
> mm :string;
> mm1:string;
> mm2:byte;
> 이렇게 선언을 하고
> mm2:=65;
> mm1:='leewha'
> mm:= char(65) + mm1;
> 이렇게 하니
> mm의 내용은 Aleewha 이렇게 들어갔습니다.
> 그래서 이번엔 잘 쓰지 않는 char(135) 하니 □ 이러한 문자가 나옴니다.
> 그것을 다시 integer(char(135))하니 다시 135가 나왔습니다.
> 그래서 이것을 합치니 '혓eewha' 이렇게 처음 문자가 이상하게 변했더라구요.
> 합하면 이렇게 될수 있겠구나 해서 이번에는 문자를 짤라 봤습니다.
> copy(mm,2,6) 이렇게 하면 다시 'leewha'가 나오거든요..
> var
> mm3:string;
> mm3=copy(mm,1,1) 해서 integer로 변환을 하면 240이란 글자가 나오더라구요
> 이것은 아마 string과 char의 형의 불일치인것 같은데...
> string과 char의 형변환을 알고 싶거든요...-----------------------(1)'
> 'leewha' 스트링을 한글자 한글자시 char[1].char[2].... 이렇게 넣을수 있는지..
> 또한 반대로도 될수 있는지....
>
> 아래와 같은 것도 있는것 같은데...
> clientSocket1.sendstream(s);
>
> \
> procedure TForm1.Button2Click(Sender: TObject);
> var
> juso:Jusorec;
> s : TMemoryStream;
>
> begin
> s := TMemoryStream.Create;
> juso.age := 65; //F001이 메시지라는 암암리의 약정을...
> juso.name := '이화';
> s.Write(juso,sizeof(juso));
> //ServerSocket1.Socket.SendStream(s);
> clientSocket1.Socket.sendstream(s);
> end;
>
> \\
>
> 이렇게 전송을 했는데
> 서버소켓에서는 아무른 이벤트가 일어나지 않았거든요...
> 어떠한것을 써야 이벤트가 발생되는건지 알고 싶습니다. -----------(2)
>
> 서버소켓에서 구체적으로 처리하는 방법까지 가르쳐 주시면 좋구요 ---(3)
>
> 마지막으로.. 클라이언트 소켓은 서버로 보내고 내용을 받은 서버는
> 내용에 따라 모든 클라이언트에게 보낼 것인지 아니면 일부 또는 한명
> 에게 보내야 되는 것인지 결정을 해야 하거든요.
>
> 서버에서 이러한 방법을 이용하면 아래와 같은 내용으로는 해결되는데....
>
> procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
> Socket: TCustomWinSocket);
> var
> str:string;
> m:integer;
> begin
>
> str:=socket.ReceiveText;
> Memo1.lines.add(str);
> for m:=0 to i - 1 do
> begin
> ServerSocket1.Socket.Connections[m].SendText(str);
> end;
> end;
>
>
>
> 다음의 방법을 이용하면 어떻게 구현 하는지...
> clientSocket1.sendstream(s);
> 이것을 이용해서 위와 같이 구현할수 있느지요 ---------------(4)
>
> 고수님들 부탁 합니다....
>
> lee_wha@hanmail.net
>
안녕하세요.. 박서규입니다.
스트림을 보내기전에 position을 0으로 셋팅하세요...그러면 이벤트가 짱...
그리고 텍스트를 잘라서 하시는 방법은 위험해서 권하지 않는 방법이구요..
이게 어떨까요..
type
Packet = record
messagetype : string[2];
data : array[0..999] of char;
end;
cont
mtText = $FF00;
mtData = $FF01;
데이터를 보낼려면...
var
p : Packet;
s : TMemoryStream;
begin
p.MessageType := intTohex(mtText,2);
p.Data에 자료 넣으시고...
요걸 위의것처럼 스트림에 넣어서 보내시면 됩니다..
받는측에서는 다시 구조체에 넣다가 빼면 되거든요..
도움이 되셨는지...