C 網路程式設計

2021-06-27 22:57:33 字數 3670 閱讀 7490

網際網路通過 ip 定位電腦。

在電腦中通過 port 來定位程式。

常用埠:21ftp, 25smtp, 110pop3, 80http, 443https

程式之間通過 協議 定義通訊資料的格式。

網絡卡接受到資料以後,根據埠號,把資料傳送給不同的程式。

是一種通訊機制,用於描述ip位址和port,是乙個通訊鏈的控制代碼。用於兩個程式的通訊。

socket類似打**。**通訊的雙方相當於相互通訊的2個程式,**號碼是ip。使用者通話前,首先要占有一部**(socket),同時要知道對方的號碼(對方有乙個固定的socket),然後撥號(發出連線請求)。對方假如在場並空閒,拿起**筒,雙方就可以通話(連線成功)。雙方通話的過程,相當於一方向socket傳送資料,一方從socket接收資料。通話結束後,一方掛起**,相當於關閉socket,撤銷連線,

流式socket(stream):是一種面向連線的socket,tcp協議用stream socket,安全,效率低。

browser和server之間使用的tcp協議(流式socket)

資料報socket(datagram):無連線的socket,udp使用報式socket,不安全(丟失,順序混亂,在接收端要分析重排序,要求重發等),效率高。

建立乙個winform程式

//伺服器段 監聽socket

socket slisten = null;

private void btnlisten_click(object sender, eventargs e)

程式執行起來以後,accept方法阻塞了當前執行緒,視窗不能再拖動。用browser進行測試,比如程式監聽127.0.0.1:11111, 在瀏覽器輸入這個ip:port. 這時候accept方法返回了,視窗又可以拖動了。建立乙個執行緒來監聽。

//伺服器段 監聽socket

socket slisten = null;

//監聽執行緒

thread threadlisten = null;

private void btnlisten_click(object sender, eventargs e)

private void listenconnection()

public partial class form1 : form

//伺服器段 監聽socket

socket slisten = null;

//監聽執行緒

thread threadlisten = null;

private void btnlisten_click(object sender, eventargs e)

private void listenconnection()

private void showmsg(string str)

}

winform程式:

public partial class form1 : form

socket socclient = null;

private void btnconnectserver_click(object sender, eventargs e)

}

測試:先執行伺服器端,start listen,然後客戶端project右鍵,debug,start new instance。連線server。server端:

private void listenconnection()
client端:
private void btnsendmsg_click(object sender, eventargs e)

上面的程式,server端只receive一次client端send來的訊息。server端:建立乙個通訊線程,專門負責接受client發來的msg

private void listenconnection() 

bool isreceive = true;

private void receivemsg(object obj)

}

在server端 : form中加乙個listbox顯示連線上的client的ip和port。

dictionarydictcon = new dictionary();private void listenconnection()
在server端 :

private void btnsendmsg_click(object sender, eventargs e)}}

在client端:接受伺服器發來的msg
thread threadmsg = null;

private void btnconnectserver_click(object sender, eventargs e)

bool isreceive = true;

private void receivemsg()

}

server端的監聽socket需要binding 乙個 endpoint(ip+port)。通訊socket不需要bind。在server端修改listenconnection方法:

dictionarydictcon = new dictionary();

bool iswatch = true;

private void listenconnection()

}

server端:

C 網路程式設計

首先我們解釋一下在網路程式設計時候,經常遇到的幾個概念 同步 synchronous 非同步 asynchronous 阻塞 block 和非阻塞 unblock 所謂同步方式,就是傳送方傳送資料報以後,不等接受方響應,就接著傳送下乙個資料報。非同步方式就是當傳送方傳送乙個資料報以後,一直等到接受方...

C 網路程式設計

1 ip網路中的每台主機都有乙個ip位址 它是邏輯位址 網際網路上的ip位址具有全球唯一性 4個位元組,192.168.0.16 2 osi將網路分為 tcp ip模型 應用層 應用層 表示層會話層 傳輸層 傳輸層 網路層 網路層 資料鏈路層 網路介面 物理層相同層次之間不可以直接通訊,是虛擬通訊。...

c 網路程式設計

microsoft.framework為應用程式訪問inter 提供了分層的 可擴充套件的以及受管轄的網路服務,其名字空間system.和system.sockets包含豐富的類可以開發多種網路應用程式。類採用的分層結構允許應用程式在不同的控制級別上訪問網路,開發人員可以根據需要選擇針對不同的級別編...