各位好
小弟剛學程式設計
有一個需求不知道該如何處理
下面是溫度轉換,可以執行
但是想要讓程式可以用telnet連線執行
不知道該怎麼做
google了一些socket程式,但執行後只能listen,用telnet建立連線
無法做到執行溫度轉換那段
希望指教
謝謝
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
String str;
Console.WriteLine("CelsiusToFahrenheit: ");
str = Console.ReadLine();
Console.WriteLine(CelsiusToFahrenheit(str));
Console.WriteLine("按任意鍵結束....");
Console.ReadKey(); //可按任意鍵結束畫面
}
public static double CelsiusToFahrenheit(string temperatureCelsius)
{
double celsius = System.Double.Parse(temperatureCelsius);
return (celsius * 9 / 5) + 32;
}
}
}
試試這樣寫,不知道有沒有回答到你,telnet預設是23port
public static void Main(String[] args)
{
string data = "";
byte[] bytes = new Byte[1];
IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
IPEndPoint localEndPoint = new IPEndPoint(ipAddress, 23);
Socket listener = new Socket(ipAddress.AddressFamily,
SocketType.Stream, ProtocolType.Tcp);
listener.Bind(localEndPoint);
listener.Listen(10);
while (true)
{
Console.WriteLine("Waiting for a connection...");
Socket handler = listener.Accept();
bool isExit = false;
while (true)
{
handler.Send(Encoding.ASCII.GetBytes("Send: "));
while (true)
{
int bytesRec = handler.Receive(bytes, 1, SocketFlags.None);
Console.WriteLine(bytes[0]);
if (bytes[0] == 13) // enter
{
break;
}
else if (bytes[0] == 3) // ctrl + c
{
isExit = true;
break;
}
else if (bytes[0] == 8) // backspace
{
handler.Send(new byte[] { 32, 8 });
}
else
{
data += Encoding.ASCII.GetString(bytes);
}
}
if (isExit)
{
break;
}
var result = CelsiusToFahrenheit(data);
handler.Send(Encoding.ASCII.GetBytes(string.Format("Result: {0:0.00}\n", result)));
handler.Send(new byte[] { 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 });
data = "";
}
handler.Send(Encoding.ASCII.GetBytes("Exit"));
handler.Shutdown(SocketShutdown.Both);
handler.Close();
}
}
另外,那一串new byte {8, 8, 8, 8...}
如果是為了回到行首,直接送CR
比較簡單吧?
感謝大大指點,原來只要在印出Result的最後面改成\r\n就行了XD
大大們好
最後我改成以下程式碼
原本還在想兩個問題
1."backspace沒處理data"
2.new byte {8, 8, 8, 8...}是什麼意思
然後看著我的鍵盤,突然恍然大悟,原來是同一件事,是倒退鍵的意思
比較遺憾的是以前的程式碼忘了,不然印象中我只有加listen port幾段,就可以達到相同功能
感謝大大們的指教
using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string data = "";
byte[] bytes = new Byte[1];
IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
IPEndPoint localEndPoint = new IPEndPoint(ipAddress, 23);
Socket listener = new Socket(ipAddress.AddressFamily,
SocketType.Stream, ProtocolType.Tcp);
listener.Bind(localEndPoint);
listener.Listen(10);
while (true)
{
Console.WriteLine("Waiting for a connection..."); //server顯示訊息
Socket handler = listener.Accept(); //執行後停在這裡等待client連入後才會往下走
bool isExit = false;
while (true)
{
handler.Send(Encoding.ASCII.GetBytes("Send: ")); //client顯示訊息
while (true)
{
int bytesRec = handler.Receive(bytes, 1, SocketFlags.None); //等待client輸入後才會往下走(輸入一個按鍵後就會往下check, 確認不是指定的字元才會讓你輸入第二個按鍵)
Console.WriteLine(bytes[0]);
//check輸入的按鍵是否為enter or ctrl+c or backspace, 成立則結束輸入, 開始執行後續的計算
if (bytes[0] == 13) // enter
{
break;
}
else if (bytes[0] == 3) // ctrl + c
{
isExit = true;
break;
}
else if (bytes[0] == 8) // backspace
{
handler.Send(new byte[] { 32, 8 });
}
else
{
data += Encoding.ASCII.GetString(bytes);
}
}
if (isExit)
{
break;
}
var result = CelsiusToFahrenheit(data);
handler.Send(Encoding.ASCII.GetBytes(string.Format(Environment.NewLine))); //client顯示訊息
handler.Send(Encoding.ASCII.GetBytes(string.Format("Result: {0:0.00}\r\n", result))); //client顯示訊息
handler.Send(Encoding.ASCII.GetBytes(string.Format(Environment.NewLine))); //client顯示訊息
data = "";
}
handler.Send(Encoding.ASCII.GetBytes("Exit"));
handler.Shutdown(SocketShutdown.Both);
handler.Close();
}
}
public static double CelsiusToFahrenheit(string temperatureCelsius)
{
double celsius = System.Double.Parse(temperatureCelsius);
return (celsius * 9 / 5) + 32;
}
}
}
你是要用cmd執行嗎?
那你要帶參數進去喔.
關於C#控制台傳遞參數和接收參數
下面是個簡單的範例
using System;
namespace ConsoleTest
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("參數個數:"+args.Length);
string text = "";
for(int i=0;i<args.Length;i++)
{
if (i > 0)
text += ", ";
text += args[i];
}
Console.WriteLine("參數:"+ text);
Console.WriteLine("請按任意鍵繼續");
Console.ReadKey();
}
}
}
命令提示字元
ConsoleTest 123 435 321
要做到的其實蠻簡單的,首先你要先
1.在目標電腦上開啟telnet server的功能
2.在使用的電腦上撰寫python程式連線1.然後執行上方回覆的cmd程式
3.在python程式抓取剛剛的執行結果