使用Socket進行簡單的通訊

2022-02-08 12:56:52 字數 3758 閱讀 9593

在socket程式設計中常用的協議主要有udp與tcp這二種,學習過一點網路知識的同學都知識如果想要保證資料的安全到達那麼我們一般採用tcp協議,如果為了保證資料的快速高效那麼就要採用udp協議,所謂的udp不安全是相對tcp來說的。

建立乙個簡單的udp客戶/伺服器通訊程式

在這個程式中我們將建立乙個簡單的解決方案實現基本的網路談天,在這個解決方案中我們將包含二個應用程式。乙個客戶端應用程式用於傳送資訊,乙個伺服器端用於接收資訊,在開發的過程中我們可能會遇到許多的難題(基本上是圍繞著執行緒出來的,因為現在大部分的程式設計師以b/s開發為主,慢慢的生疏了c/s開發,執行緒這一塊可能是個問題)。

寫乙個udp的客戶端,介面如下圖:

傳送按鈕的事件內容**如下:

1:  

private

void button1_click(object sender, eventargs e)

2:
首先我們建立乙個udpclient的例項用於傳送資料報,通過connect方法連線到指定的udp伺服器上,8080是我所指定的埠,您也可以自已寫乙個textbox自已指定埠,但這個埠號一定必須與伺服器的埠相對應,之後建立乙個sendbytes的bytes陣列,在這裡我們使用到了encoding這個類中的getbytes方法,在這裡我們所採用的編碼是utf-8,確定下來要傳送的bytes陣列之後我們就可以通過,send方法來傳送了。

從乙個客戶端程式上,大家可以看的出來建立乙個udp的客戶端非常的容易。那麼有一點點難度的可能就是伺服器的建立了,如果您對執行緒不是特別了解的話,我建議你用console程式來做伺服器端,因為它會省下很多windows應用程式上跨執行緒呼叫的麻煩,但是在這裡我還是以windows程式為主,因為你早晚都要接觸windows多執行緒程式設計。

寫乙個伺服器端應用程式

在這個程式中我們主要是將在客戶端接受上來的資料進行解碼與顯示。

在這個伺服器端主要是用到了幾個重要的成員方法,由於整體使用了多執行緒,我先把精簡下來的程式寫上來,慢慢介紹,在文章最後我會把原始碼貼上來。

1:  

public

void serverthread(object argu)

2:
12:          }
serverthread()成員方法主要是用到建立乙個訊息迴圈接收客戶端傳送上來的資訊,**比較簡單我就不多做解釋了,為了保證不影響窗體介面的重繪,我們將其改成多執行緒的程式,首先我們在窗體一載入的時候就載入這個方法,並且是乙個單獨的線。

1:  

private

void form1_load(object sender, eventargs e)

2:
為了使執行緒可以操作listbox,我們必須寫使用帶引數的委託用於傳遞要操作的控制項,**如下

1:  

//當啟動執行緒時,向執行緒函式傳送的資訊

2:  

class threadargu

3:

6:  

//代表兩個執行緒物件

7:  thread th2;

8:  

//讓進度條顯示進度的委託,用於跨執行緒呼叫

9:  

public

delegate

void showprogressdelegate(listbox templistbox, string

value);

10:  

//設定進度條的進度值,用於跨執行緒委託呼叫

11:  

private

void setprogressbarvalue(listbox prog, string

value)

12:

由於我們使用了執行緒所以serverthread()需要重寫

1:  

public

void serverthread(object argu)

2:          );
11:
12:              }
13:          }
執行結果如下:

伺服器端完整源程式:

1:  

using system;

2:  

using system.collections.generic;

3:  

using system.componentmodel;

4:  

using system.data;

5:  

using system.drawing;

6:  

using system.linq;

7:  

using system.text;

8:  

using system.windows.forms;

9:  

using system.net.sockets;

10:  

using system.net;

11:  

using system.threading;

12:  13:
23:  

//代表兩個執行緒物件

24:          thread th2;
25:  

public form1()

26:
29:
30:  

private

void form1_load(object sender, eventargs e)

31:
39:  

public

void serverthread(object argu)

40:          );
49:
50:              }
51:          }
52:  

//設定進度條的進度值,用於跨執行緒委託呼叫

53:  

private

void setprogressbarvalue(listbox prog, string

value)

54:
57:
58:  

private

void form1_formclosing(object sender, formclosingeventargs e)

59:
62:
63:
64:
65:      }
66:  }

python 進行socket 通訊

socket是應用層於tcp ip協議族通訊的中間軟體抽象層,它是一組介面。socket組織資料,以求符合指定的協議。server端 伺服器端 import socket sk socket.socket 括號內預設不加引數就是進行tcp連線 sk.bind 127.0.0.1 8898 把位址繫結...

簡單Socket通訊

示例程式是同步套接字程式,功能很簡單,只是客戶端發給伺服器一條資訊,伺服器向客戶端返回一條資訊 這裡只是乙個簡單的示例,是乙個最基本的socket程式設計流程,在接下來的文章中,會依次記錄套接字的同步和非同步,以及它們的區別。下面是示例程式的簡單步驟說明 伺服器端 第一步 用指定的埠號和伺服器的ip...

socket 簡單通訊

服務端 1.建立乙個服務端 import socket phone socket.socket 括號內不輸入,預設為family addressfamily.af inet type socketkind.sock stream proto 0 2.為服務端建立ip位址及埠號 phone.bind ...