我一直在觀看以下關於如何創建TCP/IP連接的視頻對:Server和Client 我需要做的是創建一個遊戲(flipcard)我只發送一個矩陣的2個座標。而已。或更少。TCP/IP在不關閉連接的情況下連續接收消息
(代碼將遵循)
從我所觀察到的,他關閉並重新打開連接,每次他發送消息。它正在工作。但是,在代碼中修改以保持連接打開並且在郵件到達時檢測到什麼?
我所有的谷歌的搜索把我帶到了這2種方法:
- I have had luck using the socket object directly (rather than the TCP client).(但我不希望使用插座)
- Also uses sockets
當我點擊開始服務器
private void bStartServer_Click(object sender, EventArgs e)
{
Thread tcpServerRunThread = new Thread(new ThreadStart(TCPServerRun));
tcpServerRunThread.Start();
}
個服務器運行並等待連接
private void TCPServerRun()
{
TcpListener tcpListener = new TcpListener(IPAddress.Any, 2016);
tcpListener.Start();
updateUI("Listening");
while (true)
{
TcpClient client = tcpListener.AcceptTcpClient();
updateUI("Connected");
Thread tcpHandlerThread = new Thread(new ParameterizedThreadStart(tcpHandler));
tcpHandlerThread.Start(client);
}
}
我處理我的消息
private void tcpHandler(object client)
{
TcpListener tcpListener = new TcpListener(IPAddress.Any, 5004);
TcpClient mClient = (TcpClient)client;
NetworkStream stream = mClient.GetStream();
byte[] message = new byte[1024];
stream.Read(message,0, message.Length);
updateUI("New message = " + Encoding.ASCII.GetString(message));
stream.Close();
mClient.Close();
}
注意:updateUI
是藉着他造的更新列表框項
功能客戶端 - 幾乎像服務器端 `private void button1_Click(object sender,EventArgs e) { Thread mThread = new Thread(new ThreadStart(ConnectAsClient)); mThread.Start(); }
private void ConnectAsClient()
{
// aici putem inlocui cu adresa de IP dorita
//client.Connect(IPAddress.Parse(textBox.Text), 5004);
client = new TcpClient();
//client.Connect(IPAddress.Parse("127.0.0.1"), 2016); // for when I'm not connected to network
client.Connect(IPAddress.Parse("my_ip_here"), 2016); // for when I am connected to the network
updateUI("connected");
NetworkStream stream = client.GetStream();
string s = "Hello world!";
byte[] message = Encoding.ASCII.GetBytes(s);
stream.Write(message, 0, message.Length);
this.updateUI("Message sent!");
stream.Close();
// client.Close();
}`
如果我沒有錯,每次他再次連接,他創造了一個新的連接,而不是打開舊的,對不對? (這是我第一次使用TCP/IP,自己學習,所以我寧可不使用套接字,如果可能的話)
----------------- -------------------------------------------------- ----
全部鏈接到我的代碼(從一開始提供的視頻略低修改):
你不需要關閉它。但是如果我沒有記錯的話,您需要向客戶端發送響應消息,然後才能收到下一條消息 – Steve