[Windows 8]使用Socket連接-----建立客戶端(下)
前台設計完畢後,開啟【MainPage.xaml.cs】
在MainPage 類別中定義一些全局變數,程式碼如下:
public StreamSocket socket;
public DataWriter writer;
public DataReader reader;
下面是 "連接" 按鈕的Click事件處理方法的程式碼:
private async void ConnectServer_Click(object sender, RoutedEventArgs e)
{
try
{
socket = new StreamSocket();
await socket.ConnectAsync(new HostName(HostName.Text), ServerPort.Text);
LogInfo.Text = "連接成功";
}
catch (Exception ex)
{
LogInfo.Text = "連接服務器錯誤";
}
}
上面的程式碼,首先是初始化 StreamSocket 類型的變數 socket
然後,輸入的服務器位址和埠號碼為參數
呼叫 socket 對象的 ConnectAsync 方法非同步與服務器建立連接
若與服務器連接成功,會在LogInfo 控制項中顯示提示訊息 "連接成功"
若是連接異常 則顯示 "連接服務器錯誤"
連接服務器成功後,接下來要發送訊息,下面是 "發送訊息" 按鈕的Click事件處理方法的程式碼
private void SendMessage_Click(object sender, RoutedEventArgs e)
{
string str = Message.Text;
SendMessage(str,socket);
}
private async void SendMessage(string str,StreamSocket socket)
{
try
{
writer = new DataWriter(socket.OutputStream);
writer.WriteString(str);
await writer.StoreAsync();
reader = new DataReader(socket.InputStream);
reader.InputStreamOptions = InputStreamOptions.Partial;
await reader.LoadAsync(1024);
string data = reader.ReadString(reader.UnconsumedBufferLength);
ShowMessage.Text += data + "\r\n";
}
catch (Exception ex)
{
LogInfo.Text = "出現異常";
}
}
當觸發 "發送訊息" 的按鈕Click事件後,就會將獲得的 Message訊息發送出去
關於上面的程式碼中有呼叫 SendMessage 方法,是使用 Socket 類別的 OutputStream 和 InputStream 方法
將 socket 對象的 OutputStream 屬性作為參數傳遞到 DataWriter 類別的方法中
使用 writer 對象的 StoreAsync 方法非同步向服務器發送訊息
接著將 socket 對象的 InputStream 屬性作為參數傳遞到 DataReader 類別的方法中
使用 reader 對象的 LoadAsync 方法非同步獲取輸入的數據
最後將讀取到的字串顯示在 ShowMessage 文字方塊中
最後,是 "關閉" 按鈕的Click事件方法,程式碼如下:
private void Close_Click(object sender, RoutedEventArgs e)
{
reader.Dispose();
writer.Dispose();
socket.Dispose();
LogInfo.Text = "關閉成功";
}
程式碼完成後,執行專案:
按下 "連接" 按鈕,顯示【連接服務器錯誤】,是因為我們還沒開啟服務器
開啟服務器後,再次執行專案,按下連接後,顯示畫面如下
顯示【連接成功】
在看看服務器端連接成功後顯示的畫面
連接成功後,我們輸入一些訊息來發送
我們輸入【我愛微軟】,得到的回應是【response:我愛微軟】
這時候,看一下服務器端顯示的畫面
訊息成功發布和接收後,我們按下 "關閉" 按鈕,顯示畫面如下