전혀 문제 없이...
잘 데이터를 주고 받다가....
어느순간... 에러가 납니다...
10038 에러 있잖아요.....
에러메세지를 찾아보니...
operation no socket...... 등등등... 비스므리 하게... 몇가지들이 있던데요..
정확한 원인을 모르겠습니다...
서버창을 보면... Connect 는 됐는데.. 메세지를 받지는 못하구..
클라이언트의 메세지를 기다리는 상태 이더라구요...
메세지를 전달하는 방식은..다음과 같아요..
Button1.click -> Client.Active:=true; 하구나서..
procedure TFrm_Main.ClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
var SendChar: array [0..4096] of Char;
begin
Timer1.Enabled:=True;
end;
접속이 되면.... Interval 200 으로 잡힌 타이머를 온~ 하구..
procedure TFrm_Main.Timer1Timer(Sender: TObject);
var SendChar: array [0..4096] of Char;
begin
StrCopy(SendChar, PChar(Send_Message+#10));
Client.Socket.SendBuf(SendChar, 1+length(Send_Message));
if Timer1.Enabled=true then
Timer1.Enabled:=false;
Timer1.Interval:=200;
end;
위와같이... 타이밍 시간 이 되면.. 메세지를 전달하고 있어요...
첨에는 타이머 없이.... ClientSocket.Connect 이벤트 시에
메세지를 전달 했는데요... 넘 빨리 전달해서... 그런 줄 알구... 타이머로
약간의 딜레이를 주었거든요........
자바 서버에서는... 메세지를 받고.. 일련의 작업을 마친후... Client 에게
해당 메세지를 전달하구.. Socket.close() 하거든요...
그래서 Client 에서는 특별히 연결을 끊어주지 않아도 연결은 끊기구요...
많은 경험자분들의 조언 바랍니다.
네트웤에서는 아무리 잘 만들어도 이유없이 에러가 발생할 경우가 많습니다.
제가 아래의 소스를 보고 몇가지 더 추가 사항을 조언해 드리면 ...
먼저.. 전송을 보내기전 서버 접속상태를 확인하세요...
다음 서버에 SendBuf에 Try를 달아 주세요..
마지막으로 타이머를 쓰래드 타이머로 사용하시는게 좋을것 같습니다.
그럼 즐거운 하루가 되시길..