TCP を使用して ac# クライアントから Delphi サーバーにテキスト行を送信しようとしています。どちらもローカルホストで実行するだけです。私は、クライアントが適切なときにテキスト行を送信し、サーバーが適切なときに一度に 1 行ずつ受信ストリームからそれらを読み込んで処理できるようにしたいと考えています。
以下のコードは、「テキスト 1 の一部の行」を表示する Delphi メモでこれを 1 回実現します。その後、C# が戻り、接続が強制的に閉じられたことを示す例外が発生します。
クライアント接続を閉じて、テキスト行が送信されるたびに新しい接続を再確立すると、目的の効果が得られます。しかし、これは非常に遅く、私の意図した用途には適していません。
私は TCP に不慣れで、自分が何をしているのかほとんどわかりません! 望ましい結果を達成するための助けをいただければ幸いです。
Delphi サーバー コードは....
procedure TForm1.FormCreate(Sender: TObject);
begin
Memo1.Lines.Clear;
//Server initialization
TcpServer1 := TTcpServer.Create(Self);
TcpServer1.OnAccept := TcpServer1Accept;
TcpServer1.LocalPort := IntToStr(DEFAULT_PORT);
TcpServer1.Active := true;
end; //TForm1.FormCreate procedure ends
procedure TForm1.TcpServer1Accept(Sender: TObject;
ClientSocket: TCustomIpClient);
var
somestring : string;
begin
somestring := ClientSocket.Receiveln('#$D#$A');
Memo1.Lines.Add(somestring);
end; //TForm1.TcpServer1Accept ends
c#コードは…………
public static void Main (string[] args)
{
bool connectionEstablished = false;
int messageNum = 1;
TcpClient theclient = new TcpClient();
//first try establish a successful connection before proceeding
Console.WriteLine("Waiting for server......");
while (connectionEstablished == false) {
connectionEstablished = true;
try {
Int32 port = 2501;
string server = "127.0.0.1"; //the ip of localhost
theclient = new TcpClient(server, port);
} catch {
Console.WriteLine("Could not find AI server");
connectionEstablished = false;
}
} //while (connectionEstablished == false) ends
Console.WriteLine("Connected to server");
////////////////////////////////////////
while (true) {
try
{
string message = "some line of text " + messageNum.ToString() + "#$D#$A";
// Translate the passed message into ASCII and store it as a Byte array.
Byte[] data = System.Text.Encoding.ASCII.GetBytes(message);
NetworkStream stream = theclient.GetStream();
stream.Write(data, 0, data.Length); //working
messageNum = messageNum + 1;
}
catch (ArgumentNullException e)
{
Console.WriteLine("ArgumentNullException: {0}", e);
Console.WriteLine("\n Press Enter to continue...");
Console.Read();
}
catch (SocketException e)
{
Console.WriteLine("SocketException: {0}", e);
Console.WriteLine("\n Press Enter to continue...");
Console.Read();
}
System.Threading.Thread.Sleep(2500);
} //while (true) ends
////////////////////////////////////////////////
}
}