簡單Tcp的winform窗體

2021-09-20 12:25:54 字數 3517 閱讀 3456

最近我們工作室的老師要過來檢查了 算是正式大二了。這便是讓我拋下醫藥專案,突擊看了書本和網上的例子結合寫的tcp聊天工具。之前我對套接字還是很排斥的,看到就頭疼 當初直接跳過 這次回過頭來做這個專案也是對我自己的完善和檢測。

先來看一下我的簡單winform窗體的介面吧

* 注意:*

1首先注意的點就是 上面的icon圖示是可以改的,這樣看起來好看點,這個也是我的隊友告訴我的 我也是蠢的一比 啥也不知道

2還有標題 當初我本來是要用paint繪製畫板寫的 ,後來發現可以用label控制項就ok

3.本文章的客戶端是針對傳送字串操作的 和下面的伺服器端有點衝突 因為 伺服器端還可以傳送檔案等操作 所以 留意區別

tcp要用到的標頭檔案

using system.io;

using system.net.sockets;

using system.net;

using system.threading;

知識點

用到的知識點無非就是

1.socket的套接字

2.執行緒(沒有執行緒的話 當窗體在等待接收的時候 窗體是卡死的 不能進行其他操作 所以要對等待的事件進行後台執行緒操作)

3.skinengine控制項的**控制項 用來美化窗體(控制項在其他文章裡 自己找)

4鍵盤控制輸入

5 首先要設定socket getsocket; 這個全域性變數 不然容易忽視而造成無連線

6form窗體有個屬性是accepbutton 繫結乙個控制項 比如button1 效果是如果按鍵盤的enter相當於單擊button1

7還有乙個問題就是 當傳輸的內容過多 不進行操作的話 就會出現看不到訊息 要手動拖動滑輪 解決方案如下:

單擊richtextbox控制項 進行操作

private

void

richtextbox2_textchanged(object sender, eventargs e)

對窗體進行初始化 窗體載入的時候要 載入** 。其次還要對執行緒的檢查設定為false 否則 執行緒無法建通。最後 要對窗體接受鍵盤按鍵的值設定為true。

private

void

form1_load(object sender, eventargs e)

單擊連線按鈕的** try{}catch{}是為了防止窗體因為服務端斷來連線而造成的窗體卡死

private

void

button1_click(object sender, eventargs e)

catch

}

recive函式用來接受伺服器端的訊息

void recive(object a)

}catch

}

這是 文字框結尾追加 為了**清晰所以分開寫

void showthing(string ss)

這是客戶端傳送給伺服器端的按鈕控制項

private

void

button2_click(object sender, eventargs e)

catch

}

這是窗體接受鍵盤按鈕值的操作 在這裡 傳送按鈕不用enter 因為 如果這樣子雖然也可以達到傳送效果 但是檔案框會換行 如果 case key.s的話 也可以達到對應的效果,但是文字框結束後會殘留s值 意思就是 雖然按鍵實現了效果但是按鍵的 值也施加給了text文字

private

void

form1_keydown(object sender, keyeventargs e)

}

以上是客戶端的操作 接下來是 伺服器端的操作

這個是伺服器端的介面 沒有進行排版有點簡陋

實現了 伺服器端對多個不同的可以客戶端進行收發的效果 還有傳送檔案的操作 而不是簡單的

我就直接複製**過來好了

using system;

using system.collections.generic;

using system.componentmodel;

using system.data;

using system.drawing;

using system.linq;

using system.text;

using system.threading.tasks;

using system.windows.forms;

using system.net.sockets;

using system.net;

using system.threading;

using system.io;

private

void

form1_load(object sender, eventargs e)

private

void

showmsg(string str)

private

void

button1_click(object sender, eventargs e)

catch

}socket socketsend;

dictionary socketdic =new dictionary();//這個是為了 實現伺服器端對多個客戶端進行收發訊息 名字對應連線

void recive(object o)//監聽等待進入的客戶端

}void listen(object o) //接受客戶端傳資訊

}catch

}//傳送字串訊息這個實現了 判斷傳入的訊息是字串型別

private

void

button2_click(object sender, eventargs e)

private

void

button3_click(object sender, eventargs e)

private

void

button4_click(object sender, eventargs e)

}//震動按鈕

private

void

button5_click(object sender, eventargs e)}}

接收器主要**

void recive()

else

if (buffer[0] == 2)}}

}

WinForm窗體動畫

在窗體的load 和 closing事件發生的時候,直接呼叫animation.animatewindow函式即可,簡單容易。如下 using system.runtime.interopservices public class animation 淡入窗體 private void form l...

WinForm 窗體美化

本月12號,過完了22歲生日,忽然間覺得自己長大了,呵呵 就像這份生日禮物中寫的一樣 no backspace in real life 我變的更加 勇敢 更加勇敢的去面對更多困難,例如winform 窗體美化這個難題。眾所周知 用來開發winform的ide vs在 所見即所得 方面做的相當不錯,...

WinForm窗體PropertyGrid控制項使用

propertygrid控制項是乙個很全能的winform屬性設定控制項,可以將button,lab,text等控制項的設定屬性全部暴露出來。我這裡簡單介紹該控制項的基本使用方法。首先我這裡定義了乙個該控制項的窗體,定義乙個公有的屬性,將該控制項暴露出來。在另乙個窗體中放幾個常用的控制項,並且將控制...